using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class GatherSoulBuildBehaviour : MonoBehaviour { [SerializeField] RectTransform m_AttackDefend; [SerializeField] Button m_BuildAttackDefend; [SerializeField] RectTransform m_IceDefend; [SerializeField] Button m_BuildIceDefend; [SerializeField] UIEffect m_AttackEffect; [SerializeField] UIEffect m_IceEffect; int collectNpcId = 0; uint serverInstanceId = 0; int buildNpcId = 0; static bool m_SatisfyBuild = false; public static event Action defendBuildRefresh; public static bool satisfyBuild { get { return m_SatisfyBuild; } set { m_SatisfyBuild = value; if (defendBuildRefresh != null) { defendBuildRefresh(); } } } bool isCollecting { get { return WindowCenter.Instance.IsOpen(); } } GatherSoulDungeonModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_BuildAttackDefend.AddListener(BuildAttackDefend); m_BuildIceDefend.AddListener(BuildIceDefend); } public void Display(int npcId,uint sid) { collectNpcId = npcId; serverInstanceId = sid; model.missionHelpUpdate -= MissionHelpUpdate; model.missionHelpUpdate += MissionHelpUpdate; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent; WindowCenter.Instance.windowAfterCloseEvent -= WindowAfterCloseEvent; WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent; WindowCenter.Instance.windowAfterCloseEvent += WindowAfterCloseEvent; DisplayBase(); DisplayEffect(); } public void Dispose() { model.missionHelpUpdate -= MissionHelpUpdate; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent; WindowCenter.Instance.windowAfterCloseEvent -= WindowAfterCloseEvent; collectNpcId = 0; serverInstanceId = 0; satisfyBuild = false; } void DisplayBase() { var attackDefendCount = model.GetDefendNpcCount(model.attckDefendNpcId); var iceDefendCount = model.GetDefendNpcCount(model.iceDefendNpcId); m_AttackDefend.gameObject.SetActive(attackDefendCount < model.attackDefendCountLimit); m_IceDefend.gameObject.SetActive(iceDefendCount < model.iceDefendCountLimit); satisfyBuild = iceDefendCount < model.iceDefendCountLimit || attackDefendCount < model.attackDefendCountLimit; } void DisplayEffect() { m_AttackEffect.StopImediatly(); m_IceEffect.StopImediatly(); if (isCollecting) { if (buildNpcId == model.attckDefendNpcId) { m_AttackEffect.Play(); } else if (buildNpcId == model.iceDefendNpcId) { m_IceEffect.Play(); } } } private void WindowAfterOpenEvent(Window window) { DisplayEffect(); } private void WindowAfterCloseEvent(Window window) { DisplayEffect(); } private void BuildAttackDefend() { if (isCollecting) { return; } if (collectNpcId != 0 && serverInstanceId != 0) { CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction(); pak.ActionType = 0; pak.ActionInfo = (uint)model.attckDefendNpcId; GameNetSystem.Instance.SendInfo(pak); buildNpcId = model.attckDefendNpcId; NPCInteractProcessor.InvokeEvent(E_NpcType.Collect, collectNpcId, serverInstanceId); } } private void BuildIceDefend() { if (isCollecting) { return; } if (collectNpcId != 0 && serverInstanceId != 0) { CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction(); pak.ActionType = 0; pak.ActionInfo = (uint)model.iceDefendNpcId; GameNetSystem.Instance.SendInfo(pak); buildNpcId = model.iceDefendNpcId; NPCInteractProcessor.InvokeEvent(E_NpcType.Collect, collectNpcId, serverInstanceId); } } private void MissionHelpUpdate() { DisplayBase(); } } }