using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class BeautyMMTravelWin : UIBase
|
{
|
[SerializeField] Button rateTipBtn;
|
[SerializeField] Transform rateTipRect;
|
[SerializeField] Text[] rateNameText;
|
[SerializeField] Text[] rateText;
|
[SerializeField] Text horseRateText;
|
[SerializeField] Image[] buildImgs;
|
[SerializeField] GameObject girdsGo;
|
[SerializeField] UIEffectPlayer boomRowEffect;
|
[SerializeField] UIEffectPlayer boomColEffect;
|
[SerializeField] Image processImg;
|
[SerializeField] Text processText;
|
[SerializeField] Text timeText;
|
|
List<BeautyMMTravelCell> girds;
|
|
[SerializeField] Button buildResultBtn;
|
[SerializeField] UIEffectPlayer buildResultEffect;
|
[SerializeField] Image[] whatImgs;
|
[SerializeField] Image[] rightImgs;
|
[SerializeField] Image[] wrongImgs;
|
[SerializeField] UIEffectPlayer[] pointEffects;
|
[SerializeField] Button addBtn;
|
|
float gridWidth = 0;
|
float gridHeight = 0;
|
|
protected override void InitComponent()
|
{
|
girds = girdsGo.GetComponentsInChildren<BeautyMMTravelCell>().ToList();
|
rateTipBtn.AddListener(() =>
|
{
|
rateTipRect.SetActive(true);
|
});
|
DisplyRate();
|
|
buildResultBtn.AddListener(BuildLVUP);
|
addBtn.AddListener(AddEnergy);
|
|
|
var parentRect = girdsGo.GetComponent<RectTransform>();
|
var parentWidth = parentRect.rect.width;
|
var parentHeight = parentRect.rect.height;
|
gridWidth = parentWidth / BeautyMMManager.Instance.travelRowCol[1];
|
gridHeight = parentHeight / BeautyMMManager.Instance.travelRowCol[0];
|
}
|
|
protected override void OnPreOpen()
|
{
|
BeautyMMManager.Instance.OnTravelInfoUpdate += OnTravelInfoUpdate;
|
GlobalTimeEvent.Instance.secondEvent += ShowEnergy;
|
BeautyMMManager.Instance.openChangeGridList.Clear();
|
BeautyMMManager.Instance.isClickDoor = false;
|
BeautyMMManager.Instance.clickGirdPos = new Int2(0, 0);
|
UIManager.Instance.OnCloseWindow += OnCloseWindow;
|
rateTipRect.SetActive(false);
|
|
Display();
|
DisplayBuildResult();
|
}
|
|
protected override void OnPreClose()
|
{
|
BeautyMMManager.Instance.OnTravelInfoUpdate -= OnTravelInfoUpdate;
|
UIManager.Instance.OnCloseWindow -= OnCloseWindow;
|
GlobalTimeEvent.Instance.secondEvent -= ShowEnergy;
|
}
|
|
void OnTravelInfoUpdate(int result)
|
{
|
//后端处理:0-无;1-常规;2-马车炸弹;3-传送门;4-景观;5-重置开始
|
Display();
|
if (result == 2)
|
{
|
var height = girdsGo.GetComponent<RectTransform>().rect.height;
|
var width = girdsGo.GetComponent<RectTransform>().rect.width;
|
boomRowEffect.transform.localPosition = new Vector3(0,
|
height/2-((BeautyMMManager.Instance.clickGirdPos.x - 1) * gridHeight + gridHeight / 2), 0);
|
boomRowEffect.Play();
|
boomColEffect.transform.localPosition = new Vector3((BeautyMMManager.Instance.clickGirdPos.y - 1) * gridWidth + gridWidth / 2 - width/2, 0, 0);
|
boomColEffect.Play();
|
}
|
|
DisplayBuildResult();
|
|
// 重置开始要在显示后处理动画
|
if (result == 5)
|
{
|
for (int i = 0; i < girds.Count; i++)
|
{
|
girds[i].RestartAnim();
|
}
|
}
|
else if (result == 4 && BeautyMMManager.Instance.m_SceneryLVInfo == 0)
|
{
|
SoundPlayer.Instance.PlayUIAudio(23);
|
}
|
}
|
|
void Display()
|
{
|
for (int i = 0; i < girds.Count; i++)
|
{
|
girds[i].Display(i);
|
}
|
|
var showIndex = -1;
|
if (BeautyMMManager.Instance.m_SceneryType == 1)
|
{
|
showIndex = 0;
|
}
|
else if (BeautyMMManager.Instance.m_SceneryType == 4)
|
{
|
showIndex = 1;
|
}
|
else if (BeautyMMManager.Instance.m_SceneryType == 6)
|
{
|
showIndex = 2;
|
}
|
|
var hasDoor = BeautyMMManager.Instance.HasDoor();
|
for (int i = 0; i < buildImgs.Length; i++)
|
{
|
if (i == showIndex && !hasDoor)
|
{
|
buildImgs[i].SetActive(true);
|
|
var x = (BeautyMMManager.Instance.m_SceneryCol - 1) * gridWidth + 2;
|
var y = (BeautyMMManager.Instance.m_SceneryRow - 1) * gridHeight + 2;
|
buildImgs[i].transform.localPosition = new Vector3(x, -y, 0);
|
}
|
else
|
{
|
buildImgs[i].SetActive(false);
|
}
|
}
|
|
|
ShowEnergy();
|
}
|
|
void ShowEnergy()
|
{
|
processImg.fillAmount = BeautyMMManager.Instance.m_Energy*1.0f / BeautyMMManager.Instance.GetMaxEnergy();
|
processText.text = BeautyMMManager.Instance.m_Energy.ToString() + "/" + BeautyMMManager.Instance.GetMaxEnergy().ToString();
|
|
if (processImg.fillAmount >= 1)
|
{
|
timeText.text = Language.Get("BeautyMM27");
|
}
|
else
|
{
|
//BeautyMM12
|
var remainSeconds = BeautyMMManager.Instance.recoverTravelEnergyTime * 60 - (TimeUtility.AllSeconds - BeautyMMManager.Instance.m_EnergyTime);
|
timeText.text = Language.Get("BeautyMM12", TimeUtility.SecondsToMS((int)remainSeconds));
|
}
|
}
|
|
void DisplyRate()
|
{
|
rateTipRect.SetActive(false);
|
var keys = TravelEventConfig.GetKeys();
|
var index = 0;
|
for (int i = 0; i < keys.Count; i++)
|
{
|
var config = TravelEventConfig.Get(keys[i]);
|
if (config.EventID < 200)
|
{
|
continue;
|
}
|
if (index >= rateNameText.Length)
|
{
|
break;
|
}
|
rateNameText[index].text = ItemConfig.Get(config.AwardItemID).ItemName + "x" + config.AwardItemCnt;
|
rateText[index].text = config.ShowRate;
|
index++;
|
}
|
|
for (int i = index; i < rateNameText.Length; i++)
|
{
|
rateNameText[i].text = "";
|
rateText[i].text = "";
|
}
|
|
horseRateText.text = TravelEventConfig.Get(101).ShowRate;
|
}
|
|
//建筑特效品质 1-1073 2-1078 3-1083
|
Dictionary<int, int> buildEffectDic = new Dictionary<int, int>()
|
{
|
{1, 1073},
|
{4, 1078},
|
{6, 1083}
|
};
|
void DisplayBuildResult()
|
{
|
if (!IsShowBuildUpgradeUI())
|
{
|
buildResultBtn.SetActive(false);
|
return;
|
}
|
buildResultBtn.SetActive(true);
|
|
var startEffectID = buildEffectDic[BeautyMMManager.Instance.m_SceneryType] + GetSuccessCnt();
|
buildResultEffect.effectId = startEffectID;
|
buildResultEffect.isPlaySpineLoop = false;
|
buildResultEffect.onComplete = () =>
|
{
|
buildResultEffect.isPlaySpineLoop = true;
|
buildResultEffect.Play(1);
|
};
|
buildResultEffect.Play(0);
|
|
//public uint m_SceneryLVInfo; //景观升级信息:0-还未处理景观升级;个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
|
int effectPointIndex = -1;
|
|
for (int i = 0; i < whatImgs.Length; i++)
|
{
|
//0显示问号 1 成功 2 失败
|
var value = BeautyMMManager.Instance.m_SceneryLVInfo;
|
for (int j = 0; j < i; j++)
|
{
|
value /= 10;
|
}
|
var result = value % 10;
|
whatImgs[i].SetActive(result == 0);
|
rightImgs[i].SetActive(result == 1);
|
wrongImgs[i].SetActive(result == 2);
|
if (result == 0 && effectPointIndex == -1)
|
{
|
effectPointIndex = i;
|
}
|
}
|
if (effectPointIndex != -1 && effectPointIndex != 0)
|
{
|
pointEffects[effectPointIndex - 1].Play();
|
}
|
else if (effectPointIndex == -1 && BeautyMMManager.Instance.m_SceneryLVInfo != 0)
|
{
|
pointEffects[whatImgs.Length - 1].Play();
|
}
|
}
|
|
//public uint m_SceneryLVInfo; //景观升级信息:0-还未处理景观升级;个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
|
int GetSuccessCnt()
|
{
|
uint value = BeautyMMManager.Instance.m_SceneryLVInfo;
|
//总共4次
|
var cnt = 0;
|
for (int i = 0; i < 4; i++)
|
{
|
if (value % 10 == 1)
|
{
|
cnt++;
|
}
|
value /= 10;
|
}
|
return cnt;
|
}
|
|
void BuildLVUP()
|
{
|
var pack = new CB041_tagCSTravelSceneryUP();
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
//是否显示建筑升级UI
|
bool IsShowBuildUpgradeUI()
|
{
|
|
//重登后 m_Result 是0 ,依然要遍历判断
|
//如果已经有门了
|
if (BeautyMMManager.Instance.HasDoor())
|
{
|
return false;
|
}
|
//m_Result 只用于即时判断
|
if (BeautyMMManager.Instance.m_SceneryLVInfo == 0 && BeautyMMManager.Instance.m_Result != 4)
|
{
|
return false;
|
}
|
return true;
|
}
|
|
void OnCloseWindow(UIBase ui)
|
{
|
if (ui is CommonGetItemWin)
|
{
|
var gird = BeautyMMManager.Instance.GetGrid(BeautyMMManager.Instance.clickGirdPos);
|
if (BeautyMMManager.Instance.isClickDoor && gird != null && gird.EventID == (int)GirdEventType.Door)
|
{
|
//默认请求下一局
|
var pack = new CB040_tagCSTravelClick();
|
pack.Row = (byte)BeautyMMManager.Instance.clickGirdPos.x;
|
pack.Col = (byte)BeautyMMManager.Instance.clickGirdPos.y;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
}
|
}
|
|
void AddEnergy()
|
{
|
ItemLogicUtility.Instance.ShowItemBatchUseWin(BeautyMMManager.Instance.addEnergyItemID, ShowTip, Language.Get("GuildBoss22"));
|
}
|
|
string ShowTip(long useCnt)
|
{
|
return Language.Get("UseItem1", BeautyMMManager.Instance.addEnergyValue * useCnt);
|
}
|
}
|