using System.Collections.Generic;
|
using System.Linq;
|
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 bool isHawkerShowNow = false; //行商状态,true 行商走出来和站岗中,false 行商走出去和外出中
|
public bool isHawkerStandBy = false; //行商状态,true 行商站岗中,只有true才能参与喊话;移动或者消失都为false
|
|
|
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;
|
if (isHawkerStandBy)
|
{
|
index = Random.Range(0, guildTalkIndexList.Count);
|
}
|
else
|
{
|
if (guildTalkIndexList.Count == 1)
|
{
|
return -1;
|
}
|
index = Random.Range(1, guildTalkIndexList.Count);
|
}
|
if (index == lastGuildRandomIndex)
|
{
|
if (guildTalkIndexList.Count == 1)
|
{
|
//只有一个的情况
|
lastGuildRandomIndex = -1;
|
return -1;
|
}
|
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;
|
}
|
|
public string GetGuildTalk(int skinID)
|
{
|
if (guildNpcTalkDic.ContainsKey(skinID))
|
{
|
return guildNpcTalkDic[skinID][Random.Range(0, guildNpcTalkDic[skinID].Length)];
|
}
|
return null;
|
}
|
}
|