public void AddNPC(NPC npc) { if (!npcDic.ContainsKey(npc.Uid)) { npcDic.Add(npc.Uid, npc); } }
public static void Recycle(NPC npc) { if (npc != null) { HUDIcon.Recycle(npc.Script.Icon); npc.Data = null; npc.EventData = null; npc.Script.StopAllCoroutines(); ResourceManager.Instance.RecycleAsset(npc.Script.gameObject); npc.Script = null; } else { BaseLogger.Log("Recyle a null npc!"); } }
public static NPC Create(int npcKid, int eventKid, NPCState state = NPCState.Normal) { ResourceManager resManager = ResourceManager.Instance; NPC npc = null; if (!resManager.ContainsObjectKey(ObjectKey.NPC)) { for (int i = 0; i < PRE_CACHE_COUNT; ++i) { npc = new NPC(); resManager.AddObject(ObjectKey.NPC, npc); } } npc = new NPC(); npc.Uid = Guid.NewGuid().ToString(); npc.Data = NPCDataManager.Instance.GetData(npcKid) as NPCData; npc.EventData = NPCDataManager.Instance.GetEventDataByID(eventKid); npc.Script = ResourceManager.Instance.LoadAsset<NPCScript>(ObjectType.GameObject, npc.Data.GetResPath()); npc.Script.Uid = npc.Uid; npc.Script.transform.parent = RootTransform.Instance.NPCRoot; npc.Script.CallbackClick = npc.OnNPCClick; npc.State = state; return npc; }
private void OnDialogClick() { PopupManager.Instance.RemovePopup(panel); if (currentNPC.Data.AppearScene == NPCAppearScene.HomeTown) { Game.Instance.SwitchStage(StageEnum.Maze); } currentNPC = null; }
private void HandleDialogShow(NPC npc) { currentNPC = npc; panel = PopupManager.Instance.CreateAndAddPopup<DialogPanel>(); panel.CallbackDialogFinish = OnDialogClick; string npcName = TextDataManager.Instance.GetData(npc.Data.Name); panel.LabelTitle.text = npcName; NPCData data = npc.Data; NPCEventData eventData = npc.EventData; if (eventData.Type == NPCEventType.Normal) { panel.Init(data.Name, eventData.FirstTalkList); } else if (eventData.Type == NPCEventType.Result) { List<string> talkList = npc.State == NPCState.Normal ? eventData.FirstTalkList : eventData.EndTalkList; panel.Init(data.Name, talkList); } else if (eventData.Type == NPCEventType.Task) { } }