using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
[XLua.Hotfix]
|
public class GatherSoulDungeonBehaviour : MonoBehaviour
|
{
|
[SerializeField] RectTransform m_GenerateMonsterRemind;
|
[SerializeField] Button m_GenerateMonster;
|
[SerializeField] Button m_AttackDefendButton;
|
[SerializeField] Text m_AttackDefendCount;
|
[SerializeField] Text m_AttackDefendDescription;
|
[SerializeField] Button m_IceDefendButton;
|
[SerializeField] Text m_IceDefendCount;
|
[SerializeField] Text m_IceDefendDescription;
|
[SerializeField] Button m_GenerateBoss;
|
[SerializeField] RectTransform m_ContaienrAreadySpawn;
|
[SerializeField] RectTransform m_ContainerAutoSpawn;
|
[SerializeField] Button m_ViewGetItem;
|
|
GatherSoulDungeonModel model
|
{
|
get { return ModelCenter.Instance.GetModel<GatherSoulDungeonModel>(); }
|
}
|
|
DungeonFightWin window;
|
|
private void Awake()
|
{
|
m_GenerateMonster.onClick.AddListener(GenerateMonster);
|
m_AttackDefendButton.onClick.AddListener(ClickAttackDefend);
|
m_IceDefendButton.onClick.AddListener(ClickIceDefend);
|
m_GenerateBoss.onClick.AddListener(GenerateBoss);
|
m_ViewGetItem.onClick.AddListener(ViewGetItem);
|
}
|
|
public void Display(DungeonFightWin window)
|
{
|
this.window = window;
|
model.missionHelpUpdate += MissionHelpUpdate;
|
model.monsterAppearEvent += MonsterAppearEvent;
|
DropItem.onDropItemDisappear += OnDropItemDisappear;
|
DisplayGenerateMonster();
|
DisplayDefend();
|
DisplayGenerateBoss();
|
}
|
|
public void Dispose()
|
{
|
model.missionHelpUpdate -= MissionHelpUpdate;
|
model.monsterAppearEvent -= MonsterAppearEvent;
|
DropItem.onDropItemDisappear -= OnDropItemDisappear;
|
}
|
|
private void OnDropItemDisappear(Vector3 position)
|
{
|
if (window != null)
|
{
|
var flyObject = DungeonItemCollectFlyObjectPool.Require();
|
flyObject.transform.SetParentEx(window.transform, Vector3.zero, Quaternion.identity, Vector3.one);
|
var uiPosition = CameraUtility.ConvertToUIPosition(CameraManager.sceneCamera, position);
|
var localPos = window.transform.InverseTransformPoint(uiPosition);
|
if (Mathf.Abs(localPos.x) > Screen.width / 2 ||
|
Mathf.Abs(localPos.y) > Screen.height / 2)
|
{
|
localPos.x = -Screen.width / 2;
|
localPos.y = -Screen.height / 2 + 100f;
|
localPos.z = 0;
|
}
|
uiPosition = window.transform.TransformPoint(localPos);
|
flyObject.Begin(uiPosition, m_ViewGetItem.transform.position, 0.2f, null);
|
}
|
}
|
|
void DisplayGenerateMonster()
|
{
|
m_GenerateMonster.gameObject.SetActive(model.mission.step == 1);
|
if (model.GetDefendNpcCount(model.attckDefendNpcId) >= model.attackDefendCountLimit
|
&& model.GetDefendNpcCount(model.iceDefendNpcId) >= model.iceDefendCountLimit
|
&& model.mission.step == 1)
|
{
|
m_GenerateMonsterRemind.gameObject.SetActive(true);
|
}
|
else
|
{
|
m_GenerateMonsterRemind.gameObject.SetActive(false);
|
}
|
}
|
|
void DisplayDefend()
|
{
|
var count = model.GetDefendNpcCount(model.attckDefendNpcId);
|
m_AttackDefendCount.text = Language.Get("GatherSoulDefendRemain", model.attackDefendCountLimit - count);
|
count = model.GetDefendNpcCount(model.iceDefendNpcId);
|
m_IceDefendCount.text = Language.Get("GatherSoulDefendRemain", model.iceDefendCountLimit - count);
|
}
|
|
void DisplayGenerateBoss()
|
{
|
var mission = model.mission;
|
m_ContainerAutoSpawn.gameObject.SetActive(mission.isAuto == 1);
|
m_ContaienrAreadySpawn.gameObject.SetActive(mission.isAuto != 1 && mission.hasRefreshBoss == 1);
|
}
|
|
private void MissionHelpUpdate()
|
{
|
DisplayGenerateMonster();
|
DisplayDefend();
|
DisplayGenerateBoss();
|
}
|
|
private void GenerateMonster()
|
{
|
var mission = model.mission;
|
if (model.GetDefendNpcCount(model.attckDefendNpcId) < model.attackDefendCountLimit
|
|| model.GetDefendNpcCount(model.iceDefendNpcId) < model.iceDefendCountLimit)
|
{
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("GenerateMonsterConfirm"), (bool isOk) =>
|
{
|
if (isOk)
|
{
|
SendGenerateMonsterPackage();
|
}
|
});
|
}
|
else
|
{
|
SendGenerateMonsterPackage();
|
}
|
}
|
|
void SendGenerateMonsterPackage()
|
{
|
model.clickGenerateMonster = true;
|
CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();
|
pak.ActionType = 1;
|
pak.ActionInfo = 0;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
private void GenerateBoss()
|
{
|
var mission = model.mission;
|
if (mission.step <= 1)
|
{
|
SysNotifyMgr.Instance.ShowTip("PleaseGenerateMonsterFirst");
|
}
|
else
|
{
|
WindowCenter.Instance.Open<GatherSoulGenerateBossWin>();
|
}
|
}
|
|
private void ClickAttackDefend()
|
{
|
var count = model.GetDefendNpcCount(model.attckDefendNpcId);
|
if (count >= model.attackDefendCountLimit)
|
{
|
var npcConfig = NPCConfig.Get(model.attckDefendNpcId);
|
if (npcConfig != null)
|
{
|
SysNotifyMgr.Instance.ShowTip("HasBuildAllDefend", npcConfig.charName);
|
}
|
}
|
else
|
{
|
GotoCloserBuildPoint();
|
}
|
}
|
|
private void ClickIceDefend()
|
{
|
var count = model.GetDefendNpcCount(model.iceDefendNpcId);
|
if (count >= model.iceDefendCountLimit)
|
{
|
var npcConfig = NPCConfig.Get(model.iceDefendNpcId);
|
if (npcConfig != null)
|
{
|
SysNotifyMgr.Instance.ShowTip("HasBuildAllDefend", npcConfig.charName);
|
}
|
}
|
else
|
{
|
GotoCloserBuildPoint();
|
}
|
}
|
|
void GotoCloserBuildPoint()
|
{
|
var hero = PlayerDatas.Instance.hero;
|
if (hero != null)
|
{
|
var actor = GAMgr.Instance.GetCloserNPC(hero.Pos, model.defendPointNpcId) as GA_NpcCollect;
|
if (actor != null)
|
{
|
SnxxzGame.Instance.StartCoroutine(Co_MoveToNpc(actor));
|
}
|
}
|
}
|
|
private void MonsterAppearEvent()
|
{
|
|
}
|
|
private void ViewGetItem()
|
{
|
bool existItems = false;
|
for (int i = 1; i <= model.dungeonWeelCount; i++)
|
{
|
List<GatherSoulDungeonModel.ItemInfo> list;
|
if (model.TryGetDungeonItems(i,out list))
|
{
|
existItems = true;
|
break;
|
}
|
}
|
if (existItems)
|
{
|
WindowCenter.Instance.Open<GatherSoulDungeonGetItemWin>();
|
}
|
else
|
{
|
SysNotifyMgr.Instance.ShowTip("UnGetAnyGatherSoulItems");
|
}
|
}
|
|
IEnumerator Co_MoveToNpc(GA_NpcCollect actor)
|
{
|
var hero = PlayerDatas.Instance.hero;
|
if (hero == null || actor == null)
|
{
|
yield break;
|
}
|
while (hero.SkillMgr.CurCastSkill != null &&
|
hero.SkillMgr.CurCastSkill.SkillCompelete == false)
|
{
|
yield return null;
|
}
|
MapTransferUtility.Instance.MoveToNPC(actor.NpcConfig.NPCID, (int)actor.ServerInstID);
|
}
|
}
|
}
|