public void SetArmyVictory() { state = ArmyState.Victory; timeTick = 0; CalcDirection(); }
public void SetArmyEscape() { state = ArmyState.Escape; timeTick = 0; CalcDirection(); }
public void InitArmyInfo(ArmyInfo ai) { armyInfo = ai; armyInfo.armyCtrl = GetComponent <ArmyController>(); SetArmyKingFlag(); if (armyInfo.cityTo != -1) { if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } SetRoute(pathfinding.GetRoute(armyInfo.pos, armyInfo.cityTo)); } state = (ArmyState)armyInfo.state; timeTick = armyInfo.timeTick; if (state == ArmyState.Garrison) { exSprite moveSprite = GetComponent <exSprite>(); exSpriteAnimation moveAnim = GetComponent <exSpriteAnimation>(); moveAnim.Stop(); int frame = armyInfo.direction; if (frame == -1) { frame = 0; } moveAnim.SetFrame("ArmyGarrison", frame); Vector3 pos = flagPos[3 + frame]; if (!armyInfo.isFlipped) { pos.x = -pos.x; } else { isHFlipped = true; moveSprite.HFlip(); exSprite flagSprite = flagCtrl.GetComponent <exSprite>(); BoxCollider flagCol = flagCtrl.GetComponent <BoxCollider>(); flagSprite.HFlip(); flagCol.center = new Vector3(-flagCol.center.x, flagCol.center.y, flagCol.center.z); } flagCtrl.localPosition = pos; } else { CalcDirection(); } }
Squad GetOrCreateSquad(ArmyState army) { var firstFreeSquad = army.Squads.FirstOrDefault(s => s.Free); if (firstFreeSquad == null) { var newSquad = new Squad(); army.Squads.Add(newSquad); return(newSquad); } return(firstFreeSquad); }
public void SetArmyGarrison() { state = ArmyState.Garrison; if (animName != "") { exSpriteAnimation moveAnim = GetComponent <exSpriteAnimation>(); moveAnim.Stop(); int frame = -1; if (animName == animNames[0] || animName == animNames[3] || animName == animNames[6]) { frame = 0; } else if (animName == animNames[1] || animName == animNames[4] || animName == animNames[7]) { frame = 1; } else if (animName == animNames[2] || animName == animNames[5] || animName == animNames[8]) { frame = 2; } moveAnim.SetFrame("ArmyGarrison", frame); Vector3 pos = flagPos[3 + frame]; if (!isHFlipped) { pos.x = -pos.x; } flagCtrl.localPosition = pos; animName = ""; } }
public void SetArmyRunning() { state = ArmyState.Running; CalcDirection(); }
void AttackCity(int cIdx) { CityInfo cInfo = Informations.Instance.GetCityInfo(cIdx); int result = 0; int selfIdx = 0; int enemyIdx = 0; if (cInfo.king != -1) { if (cInfo.king == Controller.kingIndex) { strCtrl.SetWarDialogue(cIdx, armyInfo); return; } else if (armyInfo.king == Controller.kingIndex) { strCtrl.SetWarDialogue(armyInfo, cIdx); return; } } else { result = 1; } while (result == 0) { GeneralInfo selfGeneral = Informations.Instance.GetGeneralInfo(armyInfo.generals[selfIdx]); GeneralInfo enemyGeneral = Informations.Instance.GetGeneralInfo(cInfo.generals[enemyIdx]); int power1 = selfGeneral.level * 5 + selfGeneral.knightCur * 6 + selfGeneral.soldierCur * 3 + selfGeneral.strength * 2 + selfGeneral.healthCur + selfGeneral.manaCur / 2 + Random.Range(0, 20); int power2 = enemyGeneral.level * 5 + enemyGeneral.knightCur * 6 + enemyGeneral.soldierCur * 3 + enemyGeneral.strength * 2 + enemyGeneral.healthCur + enemyGeneral.manaCur / 2 + cInfo.defense / 10 + Random.Range(0, 20); if (power1 > power2) { WarResult(selfGeneral, enemyGeneral, power2); enemyIdx++; } else { WarResult(enemyGeneral, selfGeneral, power1); selfIdx++; } if (selfIdx >= armyInfo.generals.Count) { result = 2; } else if (enemyIdx >= cInfo.generals.Count) { result = 1; } } if (result == 1) { for (int i = 0; i < armyInfo.generals.Count; i++) { Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).prisonerIdx = -1; Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).city = cIdx; Informations.Instance.GetGeneralInfo(armyInfo.generals[i]).escape = 0; CheckIsLevelUp(Informations.Instance.GetGeneralInfo(armyInfo.generals[i])); } int count = cInfo.generals.Count; for (int i = count - 1; i >= 0; i--) { if (Informations.Instance.GetGeneralInfo(cInfo.generals[i]).prisonerIdx == armyInfo.king) { cInfo.prisons.Add(cInfo.generals[i]); Informations.Instance.GetKingInfo(cInfo.king).generals.Remove(cInfo.generals[i]); if (cInfo.generals[i] == Informations.Instance.GetKingInfo(cInfo.king).generalIdx) { SetKingOver(cInfo.king); } cInfo.generals.RemoveAt(i); } } count = cInfo.generals.Count; if (count > 0) { SetEscapeFromCity(cIdx); } //cInfo.generals.Clear(); cInfo.generals.AddRange(armyInfo.generals); cInfo.prefect = armyInfo.commander; for (int i = 0; i < cInfo.prisons.Count; i++) { Informations.Instance.GetGeneralInfo(cInfo.prisons[i]).prisonerIdx = armyInfo.king; } for (int i = 0; i < armyInfo.prisons.Count; i++) { Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).city = cIdx; } cInfo.prisons.AddRange(armyInfo.prisons); cInfo.money += armyInfo.money; Informations.Instance.armys.Remove(armyInfo); Destroy(armyInfo.armyCtrl.gameObject); if (cInfo.king != -1) { KingInfo kInfo = Informations.Instance.GetKingInfo(cInfo.king); kInfo.cities.Remove(cIdx); } cInfo.king = armyInfo.king; cityFlagsCtrl.SetFlag(cIdx); Informations.Instance.GetKingInfo(armyInfo.king).cities.Add(cIdx); } else if (result == 2) { for (int i = 0; i < cInfo.generals.Count; i++) { Informations.Instance.GetGeneralInfo(cInfo.generals[i]).prisonerIdx = -1; CheckIsLevelUp(Informations.Instance.GetGeneralInfo(cInfo.generals[i])); } int count = armyInfo.generals.Count; for (int i = count - 1; i >= 0; i--) { int gIdx = armyInfo.generals[i]; if (Informations.Instance.GetGeneralInfo(gIdx).prisonerIdx == cInfo.king) { if (gIdx == Informations.Instance.GetKingInfo(armyInfo.king).generalIdx) { SetKingOver(armyInfo.king); } cInfo.prisons.Add(gIdx); Informations.Instance.GetGeneralInfo(gIdx).city = cIdx; Informations.Instance.GetKingInfo(armyInfo.king).generals.Remove(gIdx); armyInfo.generals.RemoveAt(i); } } if (armyInfo.generals.Count == 0) { for (int i = 0; i < armyInfo.prisons.Count; i++) { Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).prisonerIdx = cInfo.king; Informations.Instance.GetGeneralInfo(armyInfo.prisons[i]).city = cIdx; } cInfo.prisons.AddRange(armyInfo.prisons); armyInfo.prisons.Clear(); cInfo.money += armyInfo.money; state = ArmyState.Escape; Destroy(armyInfo.armyCtrl.gameObject); Informations.Instance.armys.Remove(armyInfo); } else { FindArmyCommander(); int tmp = armyInfo.cityTo; armyInfo.cityTo = armyInfo.cityFrom; armyInfo.cityFrom = tmp; if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } SetRoute(pathfinding.GetRoute(transform.position, armyInfo.cityTo)); armyInfo.armyCtrl.SetArmyEscape(); } } }