// Use this for initialization void Start() { flagCtrl = transform.GetChild(0); strCtrl = GameObject.FindWithTag("StrategyController").GetComponent <StrategyController>(); pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); cityFlagsCtrl = GameObject.FindWithTag("CityFlags").GetComponent <FlagsController>(); }
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(); } }
// Use this for initialization void Start() { state = State.Normal; pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); Camera.main.transform.position = strategyCamPos; CheckCorrection(); InitArmys(); CheckGameState(); SoundController.Instance.PlayBackgroundMusic("Music03"); }
void CheckCorrection() { for (int i = 0; i < Informations.Instance.cityNum; i++) { CityInfo cInfo = Informations.Instance.GetCityInfo(i); if (cInfo.generals.Count <= 10) { continue; } do { ArmyInfo ai = new ArmyInfo(); ai.king = cInfo.king; ai.state = (int)ArmyController.ArmyState.Garrison; if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } ai.pos = pathfinding.GetCityPos(i); Informations.Instance.armys.Add(ai); int count = cInfo.generals.Count; int min = count - 5; min = Mathf.Clamp(min, 10, count); for (int j = count - 1; j >= min; j--) { int g = cInfo.generals[j]; ai.generals.Add(g); cInfo.generals.RemoveAt(j); Informations.Instance.GetGeneralInfo(g).city = -1; if (cInfo.prefect == g) { cInfo.prefect = FindCommander(cInfo.generals, cInfo.king); } } ai.commander = FindCommander(ai.generals, ai.king); } while(cInfo.generals.Count > 10); } }
private void GenerateMap() { myPathfinding = GetComponent <MyPathfinding>(); map = new int[width, height]; RandomFillMap(); while (changes > 0) { changes = 0; SmoothMap(); } changes = 1; CheckWalls(); PlaceEnemies(); GenerateTrees(); GenerateChests(); PlaceDoors(); myPathfinding.OnStart(new Vector2(width, height) * scale); }
public override void LoadData() { base.LoadData(); if (MyPerGameSettings.EnableAi) { Sync.Players.NewPlayerRequestSucceeded += PlayerCreated; Sync.Players.LocalPlayerLoaded += LocalPlayerLoaded; Sync.Players.NewPlayerRequestFailed += Players_NewPlayerRequestFailed; if (Sync.IsServer) { Sync.Players.PlayerRemoved += Players_PlayerRemoved; Sync.Players.PlayerRequesting += Players_PlayerRequesting; } m_pathfinding = new MyPathfinding(); m_behaviorTreeCollection = new MyBehaviorTreeCollection(); m_botCollection = new MyBotCollection(m_behaviorTreeCollection); m_loadedLocalPlayers = new List <int>(); m_loadedBotObjectBuildersByHandle = new Dictionary <int, MyObjectBuilder_Bot>(); m_agentsToSpawn = new Dictionary <int, AgentSpawnData>(); m_removeQueue = new MyConcurrentQueue <BotRemovalRequest>(); m_maxBotNotification = new MyHudNotification(MyCommonTexts.NotificationMaximumNumberBots, 2000, MyFontEnum.Red); m_processQueue = new MyConcurrentQueue <AgentSpawnData>(); m_lock = new FastResourceLock(); #if !XB1 if (MyFakes.ENABLE_BEHAVIOR_TREE_TOOL_COMMUNICATION) { MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_UPLOAD_TREE, OnUploadNewTree); MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_STOP_SENDING, OnBreakDebugging); MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_RESUME_SENDING, OnResumeDebugging); } #endif MyToolbarComponent.CurrentToolbar.SelectedSlotChanged += CurrentToolbar_SelectedSlotChanged; MyToolbarComponent.CurrentToolbar.SlotActivated += CurrentToolbar_SlotActivated; MyToolbarComponent.CurrentToolbar.Unselected += CurrentToolbar_Unselected; } }
protected override void UnloadData() { base.UnloadData(); if (MyPerGameSettings.EnableAi) { Sync.Players.NewPlayerRequestSucceeded -= PlayerCreated; Sync.Players.LocalPlayerRemoved -= LocalPlayerRemoved; Sync.Players.LocalPlayerLoaded -= LocalPlayerLoaded; Sync.Players.NewPlayerRequestFailed -= Players_NewPlayerRequestFailed; if (Sync.IsServer) { Sync.Players.PlayerRequesting -= Players_PlayerRequesting; Sync.Players.PlayerRemoved -= Players_PlayerRemoved; } m_pathfinding.UnloadData(); m_botCollection.UnloadData(); m_botCollection = null; m_pathfinding = null; #if !XB1 if (MyFakes.ENABLE_BEHAVIOR_TREE_TOOL_COMMUNICATION) { MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_UPLOAD_TREE, OnUploadNewTree); MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_STOP_SENDING, OnBreakDebugging); MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_RESUME_SENDING, OnResumeDebugging); } #endif if (MyToolbarComponent.CurrentToolbar != null) { MyToolbarComponent.CurrentToolbar.SelectedSlotChanged -= CurrentToolbar_SelectedSlotChanged; MyToolbarComponent.CurrentToolbar.SlotActivated -= CurrentToolbar_SlotActivated; MyToolbarComponent.CurrentToolbar.Unselected -= CurrentToolbar_Unselected; } } }
public MyPath<MyNavigationPrimitive> FindHighLevelPath(MyPathfinding pathfinding, MyHighLevelPrimitive startPrimitive) { m_pathfindingStatic = this; var path = pathfinding.FindPath(startPrimitive, m_hlPathfindingHeuristic, m_hlTerminationCriterion, null, returnClosest: false); pathfinding.LastHighLevelTimestamp = pathfinding.GetCurrentTimestamp(); m_pathfindingStatic = null; return path; }
void WarResult(ArmyInfo winner, ArmyInfo loser) { winner.armyCtrl.SetArmyVictory(); for (int i = 0; i < winner.generals.Count; i++) { GeneralInfo wgInfo = Informations.Instance.GetGeneralInfo(winner.generals[i]); wgInfo.prisonerIdx = -1; CheckIsLevelUp(wgInfo); } int count = loser.generals.Count; for (int i = count - 1; i >= 0; i--) { int gIdx = loser.generals[i]; if (Informations.Instance.GetGeneralInfo(gIdx).prisonerIdx == winner.king) { winner.prisons.Add(gIdx); Informations.Instance.GetKingInfo(loser.king).generals.Remove(gIdx); loser.generals.RemoveAt(i); if (gIdx == Informations.Instance.GetKingInfo(loser.king).generalIdx) { SetKingOver(loser.king); } } } if (loser.generals.Count == 0) { for (int i = 0; i < loser.prisons.Count; i++) { Informations.Instance.GetGeneralInfo(loser.prisons[i]).prisonerIdx = winner.king; } winner.prisons.AddRange(loser.prisons); loser.prisons.Clear(); winner.money += loser.money; Destroy(loser.armyCtrl.gameObject); Informations.Instance.armys.Remove(loser); } else { loser.armyCtrl.FindArmyCommander(); int tmp = loser.cityTo; loser.cityTo = loser.cityFrom; loser.cityFrom = tmp; if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } loser.armyCtrl.SetRoute(pathfinding.GetRoute(loser.armyCtrl.transform.position, loser.cityTo)); loser.armyCtrl.SetArmyEscape(); } }
public override void LoadData() { base.LoadData(); if (MyPerGameSettings.EnableAi) { Sync.Players.NewPlayerRequestSucceeded += PlayerCreated; Sync.Players.LocalPlayerLoaded += LocalPlayerLoaded; Sync.Players.NewPlayerRequestFailed += Players_NewPlayerRequestFailed; if (Sync.IsServer) { Sync.Players.PlayerRemoved += Players_PlayerRemoved; Sync.Players.PlayerRequesting += Players_PlayerRequesting; } m_pathfinding = new MyPathfinding(); m_behaviorTreeCollection = new MyBehaviorTreeCollection(); m_botCollection = new MyBotCollection(m_behaviorTreeCollection); m_loadedLocalPlayers = new List<int>(); m_loadedBotObjectBuildersByHandle = new Dictionary<int, MyObjectBuilder_Bot>(); m_agentsToSpawn = new Dictionary<int, AgentSpawnData>(); m_removeQueue = new Queue<int>(); m_maxBotNotification = new MyHudNotification(MySpaceTexts.NotificationMaximumNumberBots, 2000, MyFontEnum.Red); if (MyFakes.ENABLE_BEHAVIOR_TREE_TOOL_COMMUNICATION) { MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_UPLOAD_TREE, OnUploadNewTree); MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_STOP_SENDING, OnBreakDebugging); MyMessageLoop.AddMessageHandler(MyWMCodes.BEHAVIOR_GAME_RESUME_SENDING, OnResumeDebugging); } MyToolbarComponent.CurrentToolbar.SelectedSlotChanged += CurrentToolbar_SelectedSlotChanged; MyToolbarComponent.CurrentToolbar.SlotActivated += CurrentToolbar_SlotActivated; MyToolbarComponent.CurrentToolbar.Unselected += CurrentToolbar_Unselected; } }
protected override void UnloadData() { base.UnloadData(); if (MyPerGameSettings.EnableAi) { Sync.Players.NewPlayerRequestSucceeded -= PlayerCreated; Sync.Players.LocalPlayerRemoved -= LocalPlayerRemoved; Sync.Players.LocalPlayerLoaded -= LocalPlayerLoaded; Sync.Players.NewPlayerRequestFailed -= Players_NewPlayerRequestFailed; if (Sync.IsServer) { Sync.Players.PlayerRequesting -= Players_PlayerRequesting; Sync.Players.PlayerRemoved -= Players_PlayerRemoved; } m_pathfinding.UnloadData(); m_botCollection.UnloadData(); m_botCollection = null; m_pathfinding = null; if (MyFakes.ENABLE_BEHAVIOR_TREE_TOOL_COMMUNICATION) { MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_UPLOAD_TREE, OnUploadNewTree); MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_STOP_SENDING, OnBreakDebugging); MyMessageLoop.RemoveMessageHandler(MyWMCodes.BEHAVIOR_GAME_RESUME_SENDING, OnResumeDebugging); } if (MyToolbarComponent.CurrentToolbar != null) { MyToolbarComponent.CurrentToolbar.SelectedSlotChanged -= CurrentToolbar_SelectedSlotChanged; MyToolbarComponent.CurrentToolbar.SlotActivated -= CurrentToolbar_SlotActivated; MyToolbarComponent.CurrentToolbar.Unselected -= CurrentToolbar_Unselected; } } }
public void SetPathfinder(MyPathfinding _pathfinder) { pathfinder = _pathfinder; }
void SetEscapeFromCity(int cIdx) { CityInfo cInfo = Informations.Instance.GetCityInfo(cIdx); do { ArmyInfo ai = new ArmyInfo(); ai.king = cInfo.king; ai.money = 0; Informations.Instance.armys.Add(ai); int count = cInfo.generals.Count; int min = count - 5; min = Mathf.Clamp(min, 0, count); for (int i = count - 1; i >= min; i--) { int g = cInfo.generals[i]; ai.generals.Add(g); cInfo.generals.RemoveAt(i); Informations.Instance.GetGeneralInfo(g).city = -1; } ai.commander = -1; FindArmyCommander(ai); int cityEscTo = -1; List <int> clist = MyPathfinding.GetCityNearbyIdx(cIdx); List <int> canGoList = new List <int>(); if (clist.Count == 1) { cityEscTo = clist[0]; } else { for (int i = 0; i < clist.Count; i++) { if (Informations.Instance.GetCityInfo(clist[i]).king == ai.king) { canGoList.Add(clist[i]); } } if (canGoList.Count > 0) { cityEscTo = canGoList[Random.Range(0, canGoList.Count)]; } if (cityEscTo == -1) { for (int i = 0; i < clist.Count; i++) { if (Informations.Instance.GetCityInfo(clist[i]).king == -1) { canGoList.Add(clist[i]); } } if (canGoList.Count > 0) { cityEscTo = canGoList[Random.Range(0, canGoList.Count)]; } } if (cityEscTo == -1) { cityEscTo = clist[Random.Range(0, clist.Count)]; } } ai.cityFrom = cityAttacked; ai.cityTo = cityEscTo; ai.state = (int)ArmyController.ArmyState.Escape; ai.pos = Vector3.zero; } while(cInfo.generals.Count > 0); }
// Use this for initialization void Start() { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); armyMoving = GetComponent <ArmyController>(); }
void CityAct(int cIdx) { CityInfo cInfo = Informations.Instance.GetCityInfo(cIdx); if (cInfo.king == -1 || cInfo.king == Controller.kingIndex || cInfo.king == Informations.Instance.kingNum) { return; } foreach (int gIdx in cInfo.generals) { if (cInfo.reservist == 0) { break; } GeneralInfo gInfo = Informations.Instance.GetGeneralInfo(gIdx); if (gInfo.knightCur < gInfo.knightMax) { int soldierAdd = gInfo.knightMax - gInfo.knightCur; soldierAdd = Mathf.Clamp(soldierAdd, 0, cInfo.reservist); gInfo.knightCur += soldierAdd; cInfo.reservist -= soldierAdd; } if (cInfo.reservist == 0) { break; } if (gInfo.soldierCur < gInfo.soldierMax) { int soldierAdd = gInfo.soldierMax - gInfo.soldierCur; soldierAdd = Mathf.Clamp(soldierAdd, 0, cInfo.reservist); gInfo.soldierCur += soldierAdd; cInfo.reservist -= soldierAdd; } } List <int> cities = MyPathfinding.GetCityNearbyIdx(cIdx); for (int i = 0; i < cities.Count; i++) { CityInfo cityNeighbor = Informations.Instance.GetCityInfo(cities[i]); int count = 0; for (int j = 0; j < cInfo.generals.Count; j++) { GeneralInfo gInfo = Informations.Instance.GetGeneralInfo(cInfo.generals[j]); if (gInfo.healthCur > 50 && (gInfo.soldierCur + gInfo.knightCur) > (gInfo.soldierMax + gInfo.knightMax) / 2) { count++; } } if (cityNeighbor.king == cInfo.king) { if (count < 8 && cityNeighbor.generals.Count > 2 && Random.Range(0, 100) > 88) { SetArmyMove(cities[i], cIdx, Random.Range(1, cityNeighbor.generals.Count), 5); break; } } else { if (cityNeighbor.king == -1) { if (count > 3 && Random.Range(0, 100) > 80) { SetArmyMove(cIdx, cities[i], Random.Range(1, cInfo.generals.Count), 5); break; } } else { if (count > 2 && Random.Range(0, 100) > 88) { if (count - cityNeighbor.generals.Count >= 2) { SetArmyMove(cIdx, cities[i], Random.Range(cityNeighbor.generals.Count + 1, cInfo.generals.Count), 5); break; } else if (count - cityNeighbor.generals.Count > 0 && Random.Range(0, 100) > 50) { SetArmyMove(cIdx, cities[i], cityNeighbor.generals.Count, 5); break; } else if (count - cityNeighbor.generals.Count == 0 && Random.Range(0, 100) > 88) { SetArmyMove(cIdx, cities[i], cityNeighbor.generals.Count - 1, 5); break; } } } } } }
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(); } } }
void SetEscapeFromCity(int cIdx) { CityInfo cInfo = Informations.Instance.GetCityInfo(cIdx); do { GameObject go = (GameObject)Instantiate(armyPrefab, pathfinding.GetCityPos(cIdx), transform.rotation); ArmyController ac = go.GetComponent <ArmyController>(); ArmyInfo ai = new ArmyInfo(); ai.king = cInfo.king; ai.money = 0; ai.armyCtrl = ac; ac.armyInfo = ai; ac.SetArmyKingFlag(); Informations.Instance.armys.Add(ai); ai.armyCtrl.SetArmyKingFlag(); go.transform.parent = GameObject.Find("ArmiesRoot").transform; int count = cInfo.generals.Count; int min = count - 5; min = Mathf.Clamp(min, 0, count); for (int i = count - 1; i >= min; i--) { int g = cInfo.generals[i]; ai.generals.Add(g); cInfo.generals.RemoveAt(i); Informations.Instance.GetGeneralInfo(g).city = -1; } ai.commander = -1; ai.armyCtrl.FindArmyCommander(); int cityEscTo = -1; List <int> clist = MyPathfinding.GetCityNearbyIdx(cIdx); List <int> canGoList = new List <int>(); if (clist.Count == 1) { cityEscTo = clist[0]; } else { for (int i = 0; i < clist.Count; i++) { if (Informations.Instance.GetCityInfo(clist[i]).king == ai.king) { canGoList.Add(clist[i]); } } if (canGoList.Count > 0) { cityEscTo = canGoList[Random.Range(0, canGoList.Count)]; } if (cityEscTo == -1) { for (int i = 0; i < clist.Count; i++) { if (Informations.Instance.GetCityInfo(clist[i]).king == -1) { canGoList.Add(clist[i]); } } if (canGoList.Count > 0) { cityEscTo = canGoList[Random.Range(0, canGoList.Count)]; } } if (cityEscTo == -1) { cityEscTo = clist[Random.Range(0, clist.Count)]; } } ai.cityFrom = cIdx; ai.cityTo = cityEscTo; if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } ai.armyCtrl.SetRoute(pathfinding.GetRoute(ai.armyCtrl.transform.position, ai.cityTo)); ai.armyCtrl.SetArmyEscape(); } while (cInfo.generals.Count > 0); }
public MySmartPath(MyPathfinding pathfinding) { m_pathfinding = pathfinding; m_pathNodes = new List<MyHighLevelPrimitive>(); m_expandedPath = new List<Vector4D>(); }
public MyPath<MyNavigationPrimitive> FindPath(MyPathfinding pathfinding, MyNavigationPrimitive startPrimitive) { throw new NotImplementedException(); }