From 5a279e45cfd9e951788569f5ffc522952bf545e4 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 27 十一月 2025 00:04:10 +0800
Subject: [PATCH] 0312 内政NPC聊天
---
Main/System/InternalAffairs/AffairBaseWin.cs | 34 +++++++++++
Main/System/InternalAffairs/FuncNPCManager.cs | 92 ++++++++++++++++++++++++++++++
Main/System/Hero/UIHeroController.cs | 2
Main/System/HeroUI/HeroSkinModel.cs | 5 +
Main/Main.cs | 1
Main/System/InternalAffairs/FuncNPCManager.cs.meta | 11 +++
Main/Component/UI/Common/LayoutElementSizeClamp.cs | 3
7 files changed, 145 insertions(+), 3 deletions(-)
diff --git a/Main/Component/UI/Common/LayoutElementSizeClamp.cs b/Main/Component/UI/Common/LayoutElementSizeClamp.cs
index fc3752b..25a82f5 100644
--- a/Main/Component/UI/Common/LayoutElementSizeClamp.cs
+++ b/Main/Component/UI/Common/LayoutElementSizeClamp.cs
@@ -7,7 +7,8 @@
// Preferred Width 鍜� Height 鍙互涓嶅嬀閫�
// 锛侊紒锛佸繀椤诲嬀閫� Clamp Enable
// Clamp涓� Min閰嶆渶灏� 鍜� Max閰嶆渶澶�
-// Target 閰嶇洰鏍囷紝姣斿鑴氭湰鍙互鎸傝浇鏂囧瓧缁勪欢涓婏紝鐩爣涔熸寚鍚戞枃瀛楃粍浠�
+// Target 閰嶇洰鏍囷紝姣斿鑴氭湰鍙互鎸傝浇鏂囧瓧缁勪欢涓婏紝鐩爣涔熸寚鍚戞枃瀛楃粍浠讹紝鏂囨湰鍚屾椂閰岰ontentSizeFitter锛�
+// 鐖剁粍浠跺悓鏃堕厤ContentSizeFitterlayout妯珫閮借
[ExecuteAlways]
public class LayoutElementSizeClamp : LayoutElement
{
diff --git a/Main/Main.cs b/Main/Main.cs
index 6270a62..26670dd 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -91,6 +91,7 @@
managers.Add(HorseManager.Instance);
managers.Add(PhantasmPavilionManager.Instance);
managers.Add(AttributeManager.Instance);
+ managers.Add(FuncNPCManager.Instance);
foreach (var manager in managers)
{
diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index 2ad5cd7..4712be1 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -13,7 +13,7 @@
protected Spine.AnimationState spineAnimationState;
private GameObject instanceGO;
- private Action onComplete;
+ public Action onComplete;
public void Create(int _skinID, float scale = 0.8f, Action _onComplete = null, string motionName = "idle", bool isLh = false)
{
if (skinID == _skinID)
diff --git a/Main/System/HeroUI/HeroSkinModel.cs b/Main/System/HeroUI/HeroSkinModel.cs
index 0bd73d6..9d24b54 100644
--- a/Main/System/HeroUI/HeroSkinModel.cs
+++ b/Main/System/HeroUI/HeroSkinModel.cs
@@ -18,5 +18,10 @@
heroModel.PlayAnimation(actionName, true);
heroModel.SetEnabled(enable);
}
+
+ public UIHeroController GetModel()
+ {
+ return heroModel;
+ }
}
diff --git a/Main/System/InternalAffairs/AffairBaseWin.cs b/Main/System/InternalAffairs/AffairBaseWin.cs
index ea0da2f..e30ea39 100644
--- a/Main/System/InternalAffairs/AffairBaseWin.cs
+++ b/Main/System/InternalAffairs/AffairBaseWin.cs
@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
@@ -19,6 +20,12 @@
[SerializeField] Text autoText;
[SerializeField] GameObject flowAutoEffect;
[SerializeField] Button autoBtn;
+
+ //NPC瀵硅瘽鐩稿叧
+
+ [SerializeField] HeroSkinModel[] funcNPCs;
+ [SerializeField] Transform[] talkRects;
+ [SerializeField] Text[] talkTexts;
protected override void InitComponent()
{
@@ -50,6 +57,7 @@
GoldRushManager.Instance.OnAutoWorkingEvent += OnAutoWorkingEvent;
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
+ GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
Display();
if (GoldRushManager.Instance.openAutoGoldRush)
@@ -64,6 +72,7 @@
GoldRushManager.Instance.OnAutoWorkingEvent -= OnAutoWorkingEvent;
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
+ GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
}
protected override void OnOpen()
@@ -133,8 +142,31 @@
void PlayerDataRefreshEvent(PlayerDataType type)
{
if (type == PlayerDataType.GoldRush)
- {
+ {
RefreshGoldRushMoney();
}
}
+
+ void OnFiveSecondEvent()
+ {
+ var index = FuncNPCManager.Instance.GetRandomAffairNpcTalk();
+ var talk = FuncNPCManager.Instance.GetAffairTalk(funcNPCs[index].heroSkinID);
+ if (talk != null)
+ {
+ talkTexts[index].text = Language.Get(talk);
+ talkRects[index].SetActive(true);
+ }
+
+ var npc = funcNPCs[index].GetModel();
+ npc.PlayAnimation("hanhua", true);
+ Talk(index).Forget();
+ }
+
+ async UniTask Talk(int index)
+ {
+ await UniTask.Delay(4500);
+ talkRects[index].SetActive(false);
+ var npc = funcNPCs[index].GetModel();
+ npc.PlayAnimation("idle", true);
+ }
}
\ No newline at end of file
diff --git a/Main/System/InternalAffairs/FuncNPCManager.cs b/Main/System/InternalAffairs/FuncNPCManager.cs
new file mode 100644
index 0000000..e2d3b72
--- /dev/null
+++ b/Main/System/InternalAffairs/FuncNPCManager.cs
@@ -0,0 +1,92 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using Codice.Client.Common;
+using LitJson;
+using UnityEngine;
+
+public class FuncNPCManager : GameSystemManager<FuncNPCManager>
+{
+ //鍐呮斂NPC
+ Dictionary<int, string[]> affairNpcTalkDic = new Dictionary<int, string[]>();
+ public List<int> affairTalkIndexList = new List<int>();
+ public float lastAffairTalkTime;
+ public int lastAffiarRandomIndex;
+
+ //鍏細NPC
+ Dictionary<int, string[]> guildNpcTalkDic = new Dictionary<int, string[]>();
+ public List<int> guildTalkIndexList = new List<int>();
+ public float lastGuildTalkTime;
+ public int lastGuildRandomIndex;
+
+
+ public override void Init()
+ {
+ ParseConfig();
+ }
+ void ParseConfig()
+ {
+ var config = FuncConfigConfig.Get("FuncNPC");
+ var json = JsonMapper.ToObject(config.Numerical1);
+ var keys = json.Keys.ToList();
+ foreach (var key in keys)
+ {
+ var npcID = int.Parse(key);
+ var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson());
+ affairNpcTalkDic.Add(npcID, talkList);
+ }
+
+ for (int i = 0; i < affairNpcTalkDic.Count; i++)
+ {
+ affairTalkIndexList.Add(i);
+ }
+
+ json = JsonMapper.ToObject(config.Numerical2);
+ keys = json.Keys.ToList();
+ foreach (var key in keys)
+ {
+ var npcID = int.Parse(key);
+ var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson());
+ guildNpcTalkDic.Add(npcID, talkList);
+ }
+ for (int i = 0; i < guildNpcTalkDic.Count; i++)
+ {
+ guildTalkIndexList.Add(i);
+ }
+
+ }
+
+
+ //闅忔満鏌愪釜NPC瀵硅瘽锛屼笌涓婁竴娆¢殢鏈虹殑NPC绱㈠紩涓嶉噸澶�
+ public int GetRandomAffairNpcTalk()
+ {
+ int index = Random.Range(0, affairTalkIndexList.Count);
+ if (index == lastAffiarRandomIndex)
+ {
+ index = (index + 1) % affairTalkIndexList.Count;
+ }
+ lastAffiarRandomIndex = index;
+ return index;
+ }
+
+ public int GetRandomGuildNpcTalk()
+ {
+ int index = Random.Range(0, guildTalkIndexList.Count);
+ if (index == lastGuildRandomIndex)
+ {
+ index = (index + 1) % guildTalkIndexList.Count;
+ }
+ lastGuildRandomIndex = index;
+ return index;
+ }
+
+ public string GetAffairTalk(int skinID)
+ {
+ if (affairNpcTalkDic.ContainsKey(skinID))
+ {
+
+ return affairNpcTalkDic[skinID][Random.Range(0, affairNpcTalkDic[skinID].Length)];
+ }
+ return null;
+ }
+}
+
diff --git a/Main/System/InternalAffairs/FuncNPCManager.cs.meta b/Main/System/InternalAffairs/FuncNPCManager.cs.meta
new file mode 100644
index 0000000..ac48c76
--- /dev/null
+++ b/Main/System/InternalAffairs/FuncNPCManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: efdf806ad153a4d4bae560014fc20efd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
--
Gitblit v1.8.0