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 nickTxt; public Text coinTxt; public Text rankTxt; public Text orderTxt; public Text orderChangeTxt; public Text btnTxt; public Color[] changeColorArr; private ResultData data; private RewardData rewardData; private bool isShown; public void ShowWinner() { if (data.result == Result.Draw) title.text = Language.GetStr ("ResultPanel", "draw"); else title.text = Language.GetStr ("ResultPanel", "winner"); } protected override void BeforeShow () { title.text = Language.GetStr ("ResultPanel", "complete"); if (data.result == Result.Draw) nickTxt.text = ""; else if (data.result == Result.Win) nickTxt.text = data.me.nick; else if (data.result == Result.Lose) nickTxt.text = data.opp.nick; 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 ()); startOrder = Session.GetInstance ().myUserData.rankIndex; orderChanged = 0; orderTxt.text = startOrder.ToString (); int deltaOrder = Mathf.Abs (rewardData.rankOrder - startOrder); if (deltaOrder > 50) orderChangeStep = Mathf.FloorToInt ((float)deltaOrder / 50f); orderChangeStep = Mathf.Max (orderChangeStep, 1); if (startOrder < rewardData.rankOrder) { orderChangeTxt.color = changeColorArr [ChangeColor.Down.GetHashCode ()]; orderChangeTxt.text = "[ -0 ]"; } else { orderChangeTxt.color = changeColorArr [ChangeColor.Up.GetHashCode ()]; orderChangeTxt.text = "[ +0 ]"; orderChangeStep = -orderChangeStep; } 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"); } private bool isOrderChanging; private int orderChangeStep; private int startOrder; private int orderChanged; public void OrderChange() { isOrderChanging = true; } void FixedUpdate() { if(isOrderChanging) { orderChanged += orderChangeStep; if (orderChangeStep >= 0) { if(startOrder + orderChanged >= rewardData.rankOrder) { orderChanged = rewardData.rankOrder - startOrder; isOrderChanging = false; } orderChangeTxt.text = "[ -"+Mathf.Abs(orderChanged)+" ]"; } else { if(startOrder + orderChanged <= rewardData.rankOrder) { orderChanged = rewardData.rankOrder - startOrder; isOrderChanging = false; } orderChangeTxt.text = "[ +"+Mathf.Abs(orderChanged)+" ]"; } orderTxt.text = (startOrder + orderChanged).ToString (); } } public void Exit() { 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 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"]); } } }