using UnityEngine; using UnityEngine.UI; using UnityEngine.Advertisements; using System.Collections; using System.Collections.Generic; using LitJson; public class ResultPanel : PopUpPanel { public enum Result { Lose = 0, Win = 1, Draw = 2 } public enum ChangeColor { Up = 0, Down = 1, } public Animator animator; public Text title; public Text coinTxt; public Text rankTxt; public Text orderTxt; public Text orderChangeTxt; public Text btnTxt; public Button btn; public ResultDrop resultDrop; public Color[] changeColorArr; private ResultData data; private RewardData rewardData; private bool isShown; protected override void BeforeShow () { if(data.result == Result.Win) title.text = Language.GetStr ("ResultPanel", "victory"); else if(data.result == Result.Lose) title.text = Language.GetStr ("ResultPanel", "defeat"); else if(data.result == Result.Draw) title.text = Language.GetStr ("ResultPanel", "draw"); rewardData = null; isShown = false; RequestReward (); } protected override void Shown () { isShown = true; if (rewardData != null) { ShowReward (); } } private void RequestReward() { Session.GetInstance ().GetNetworkManager ().Result (data.result.GetHashCode(), data.crystalSpend); } private void OnGotReward(RewardData rewardData) { this.rewardData = rewardData; coinTxt.text = "+" + rewardData.coinAdd; rankTxt.text = (rewardData.rankAdd >= 0 ? "+" + rewardData.rankAdd : rewardData.rankAdd.ToString ()); orderTxt.text = rewardData.rankOrder.ToString (); int startOrder = Session.GetInstance ().myUserData.rankIndex; int deltaOrder = rewardData.rankOrder - startOrder; if (deltaOrder > 0) { orderChangeTxt.color = changeColorArr [ChangeColor.Down.GetHashCode ()]; orderChangeTxt.text = "[ -"+ Mathf.Abs(deltaOrder) +" ]"; } else { orderChangeTxt.color = changeColorArr [ChangeColor.Up.GetHashCode ()]; orderChangeTxt.text = "[ +"+ Mathf.Abs(deltaOrder) +" ]"; } if (isShown) ShowReward (); } private void ShowReward() { UserData userData = Session.GetInstance ().myUserData; userData.coin = rewardData.coin; userData.rank = rewardData.rank; userData.rankIndex = rewardData.rankOrder; animator.Play ("Reward"); } public void ShowDrop() { if (rewardData.HasDrop ()) { resultDrop.Show (rewardData.dropList, rewardData.extraPrice); animator.Play ("Drop"); btnTxt.text = Language.GetStr("ResultPanel", "mix"); } else { animator.Play ("NoDrop"); btnTxt.text = Language.GetStr("Public", "continue"); } } public void SelectDrop(int index) { BattleRequest.Reward (rewardData.dropId).ResultEvent.AddListener ((bool success, JsonData data)=>{ if(success) { int rewardCount = JsonUtil.ToInt(data["reward"]); int equipId = JsonUtil.ToInt(data["equip_id"]); int equipItemId = JsonUtil.ToInt(data["equip_item_id"]); int count = JsonUtil.ToInt(data["count"]); if(JsonUtil.ContainKey(data, "diamond")) Session.GetInstance().myUserData.diamond = JsonUtil.ToInt(data["diamond"]); rewardData.rewardCount = rewardCount; EquipManager.GetInstance().RewardEquipment(equipId, equipItemId, count); resultDrop.Reward(index, rewardCount-1); if(!btn.gameObject.activeSelf) { btn.gameObject.SetActive(true); btnTxt.text = Language.GetStr("Public", "continue"); } } else { resultDrop.RewardFaild(index); } }); } public void OnClick() { if(rewardData != null && rewardData.HasDrop() && rewardData.rewardCount == 0) { resultDrop.Mix (); btn.gameObject.SetActive (false); return; } Session.GetInstance().GetBattleSession().GetMessageManager().ExitBattle(); Close (); } override protected void Remove() { this.gameObject.SetActive (false); PopUpManager.UpdateModal(); } private static ResultPanel currentPanel; public static ResultPanel Show(ResultData data) { if (currentPanel != null) { currentPanel.gameObject.SetActive (true); PopUpManager.AddToMainCanvas (currentPanel.gameObject); } else currentPanel = PopUpManager.AddPopUp (Resources.Load ("Prefabs/UI/Battle/ResultPanel"), null, true); currentPanel.data = data; currentPanel.Open (); return currentPanel; } public static bool IsEnabled() { if (currentPanel != null && currentPanel.gameObject.activeSelf) return true; return false; } public static void SetReward(RewardData rewardData) { if (IsEnabled ()) currentPanel.OnGotReward (rewardData); } public static void RequestFailed() { if (IsEnabled ()) currentPanel.RequestReward (); } public class ResultData { public Player me; public Player opp; public Result result; public int crystalSpend; public ResultData(Player me, Player opp, Result result, int crystalSpend) { this.me = me; this.opp = opp; this.result = result; this.crystalSpend = crystalSpend; } } public class RewardData { public int rank; public int exp; public int coin; public int win; public int lose; public int rankAdd; public int expAdd; public int coinAdd; public int winAdd; public int loseAdd; public int rankOrder; public int dropId; public List dropList; public int extraPrice; public int rewardCount; public RewardData(JsonData data) { rank = JsonUtil.ToInt(data["r"]); exp = JsonUtil.ToInt(data["e"]); coin = JsonUtil.ToInt(data["c"]); win = JsonUtil.ToInt(data["w"]); lose = JsonUtil.ToInt(data["l"]); rankAdd = JsonUtil.ToInt(data["ra"]); expAdd = JsonUtil.ToInt(data["ea"]); coinAdd = JsonUtil.ToInt(data["ca"]); winAdd = JsonUtil.ToInt(data["wa"]); loseAdd = JsonUtil.ToInt(data["la"]); rankOrder = JsonUtil.ToInt(data["o"]); dropList = new List(); if(JsonUtil.ContainKey(data, "drop_id")) { dropId = JsonUtil.ToInt(data["drop_id"]); extraPrice = JsonUtil.ToInt(data["extra_price"]); JsonData drop = data["drop"]; for(int i=0; i 0; } } }