public void FindArmyInAreaListener(FindArmyInArea findArmyInArea) { Point middle = findArmyInArea.Location; foreach (var entity in _armies) { GeoEntity geoEntity = entity.GetComponent <GeoEntity>(); float distance = Point.Distance(middle, geoEntity.Position); if (distance <= findArmyInArea.MaxDistance) { findArmyInArea.Results.Add(entity); } } }
public void MoveInListener(MoveInEvent moveInEvent) { FindArmyInArea findArmyInArea = new FindArmyInArea(moveInEvent.Current, 1); FindArmyInAreaListener(findArmyInArea); if (findArmyInArea.Results.Count < 2) { return; } Army attacker = findArmyInArea.Results[0].GetComponent <Army>(); Army defender = findArmyInArea.Results[1].GetComponent <Army>(); Debug.WriteLine($"BATTLE ENCOUNTER {attacker} VS {defender}"); BattleEncounterEvent battleEncounterEvent = new BattleEncounterEvent(findArmyInArea.Results[0], findArmyInArea.Results[1], moveInEvent.Current); _eventBus.Post(battleEncounterEvent); }
public void Think(Entity thinker, JEventBus eventBus) { _eventBus = eventBus; GeoEntity geoEntity = thinker.GetComponent <GeoEntity>(); ArmyAi armyAi = thinker.GetComponent <ArmyAi>(); Army army = thinker.GetComponent <Army>(); FindArmyInArea findStructureInArea = new FindArmyInArea(geoEntity.Position, armyAi.SearchRadius * 3); JEventBus.GetDefault().Post(findStructureInArea); Entity nearestEnemyArmy = null; foreach (var structureEntity in findStructureInArea.Results) { Army encounteredArmy = structureEntity.GetComponent <Army>(); if (encounteredArmy.Fraction == army.Fraction) { continue; } nearestEnemyArmy = structureEntity; break; } if (nearestEnemyArmy == null) { Debug.WriteLine(army + " Skip to FindStructure"); armyAi.ArmyStateMachine.Fire(ArmyTrigger.FindStructure); return; } GeoEntity armyPosition = nearestEnemyArmy.GetComponent <GeoEntity>(); GoToEvent goToEvent = new GoToEvent(thinker, armyPosition.Position); Debug.WriteLine(army + " Go For Battle!: " + goToEvent.Goal); JEventBus.GetDefault().Post(goToEvent); armyAi.ArmyStateMachine.Fire(ArmyTrigger.FinishAction); }