using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; public class Player { public int index = -1; public int userId; public int playerId; public TeamUtil.Team team; public bool lost; private Hero hero; public const float heroReliveHoldTime = 7f; public int coinSpend; public int rankScore; public int expScore; public int coinGet; public int coinTotal; public int kill; public int assists; public int death; public float damage; public float heal; public int station; public int flag; public bool isMe; private Dictionary crystalPowerCDDict; public UnityEvent OnHeroSetted; public Player () { hero = new Hero (this); crystalPowerCDDict = new Dictionary (); OnHeroSetted = new UnityEvent (); } private string _nick; public string nick { set { _nick = WWW.UnEscapeURL(value); } get { return _nick; } } public bool IsAI() { return lost || userId < 0; } public Hero GetHero() { return hero; } public void HeroSetted() { OnHeroSetted.Invoke (); } public int GetHeroUid() { if (BattleController.battleType == BattleController.BattleType.Menu) return playerId; return (playerId + 1) * 10000; // return playerId * 1000; } public bool HasCraft(Craft craft) { if (hero.GetCraft() == craft) return true; for(int j=0; j 12f) combo = 0; combo++; lastComboTime = GameTime.time; } public string GetComboName() { int index = NumberUtil.forceBetween(combo, 1, 5); return Language.GetStr("GameInfo", "combo"+index); } public float GetLastCrystalPowerLaunchTime(int id) { if(crystalPowerCDDict.ContainsKey(id)) { return crystalPowerCDDict [id]; } return float.MinValue; } public void CrystalPowerLaunched(int id, float time) { if (crystalPowerCDDict.ContainsKey (id)) crystalPowerCDDict [id] = time; else crystalPowerCDDict.Add (id, time); } public LitJson.JsonData ToJson() { LitJson.JsonData json = LitJson.JsonMapper.ToObject ("{}"); json ["u"] = userId; json ["n"] = WWW.EscapeURL (nick); json ["t"] = team.GetHashCode (); json ["p"] = playerId; return json; } public void FromJson(LitJson.JsonData data) { userId = JsonUtil.ToInt (data ["u"]); nick = data ["n"].ToString (); team = TeamUtil.GetTeam (JsonUtil.ToInt(data["t"])); playerId = JsonUtil.ToInt (data ["p"]); } public class Hero { private Player player; public float lastSelectTime; public CraftData craftLandingData; private Craft craft; public Vector3 deadPostion; public float deadTime; //negative means hero is live, zero means first select hero public Craft[] soldierArr; public UnityEvent CraftChanged; public Hero(Player player) { this.player = player; soldierArr = new Craft[4]; CraftChanged = new UnityEvent(); } public void SetCraft(Craft craft) { this.craft = craft; deadTime = -1f; CraftChanged.Invoke (); } public Craft GetCraft() { return craft; } public void Dead() { deadPostion = craft.position; deadTime = GameTime.time; this.craft = null; CraftChanged.Invoke (); } public bool IsFirstTimeSelectHero() { return deadTime == 0; } public bool IsSelected() { return deadTime < 0 || craftLandingData != null || GameTime.time - lastSelectTime < 5f; } public bool CanRelive() { if(IsFirstTimeSelectHero() || (deadTime > 0 && GameTime.time - deadTime >= heroReliveHoldTime)) { return true; } return false; } public float HeroReliveCD() { if(deadTime > 0 && GameTime.time - deadTime < heroReliveHoldTime) { return heroReliveHoldTime - GameTime.time + deadTime; } return 0; } public int GetAvailableSoldierUid() { for(int i=0; i