public override void controlUnits(Squad squad) { // Mirar on estan els enemics enemySquadBoundingBox = squad.EnemySquad.BoundingBox.Bounds; // Mirar on estic jo ownSquadBoundingBox = squad.BoundingBox.Bounds; // Intentar Veure on hauria d'anar una unitat per estar protegida recalcSafePoint(); if (squad.UserData == this && squad.NotMoved)//If this was the last agent to take control and we haven't moved we probably did something wrong { Vector3 resPoint = Vector3.zero; Vector3 squadCenter = new Vector3(ownSquadBoundingBox.center.x, safeArea.y, ownSquadBoundingBox.y); Vector3 newPoint = Quaternion.Euler(0, 90, 0) * (safeArea - squadCenter) + squadCenter; if (DetourCrowd.Instance.RandomValidPointInCircle(newPoint, 20, ref resPoint)) { safeArea = resPoint; } else { //OH NO! CONCAVE GEOGRAPHY, MY ONLY WEAKNESS. //There is no safe point ahead, so let's just pray to the dice gods. if (DetourCrowd.Instance.RandomValidPointInCircle(squadCenter, 20, ref resPoint)) { safeArea = resPoint; } } } foreach (Unit u in squad.Units) { if (u.status != EntityStatus.DEAD) { u.moveTo(safeArea); } if (AIController.AI_DEBUG_ENABLED) { ai.aiDebug.registerDebugInfoAboutUnit(u, this.agentName); } } assistAgent.requestHelp(squad, CONFIDENCE_ASSIST_HELP_NEEDED); }
public override void controlUnits(Squad squad) { if (squad.EnemySquad.Units.Count > 0) { //Debug.Log(squad.Units[0] + " " + squad.EnemySquad.Units[0]); foreach (Unit u in squad.Units) { //Select target Unit bTar = null; float bVal = float.MinValue; foreach (Unit e in squad.EnemySquad.Units) { float val = -Vector3.Distance(u.transform.position, e.transform.position); if (u.type == Storage.UnitTypes.HERO) { val += 80; } if (u.healthPercentage < 20) { val += 15; } if (val > bVal) { bVal = val; bTar = e; } } IGameEntity target = u.getTarget(); if (bTar.status != EntityStatus.DEAD && u.status != EntityStatus.DEAD && (target == null || (!target.info.isUnit || (Unit)target != bTar))) { u.attackTarget(bTar); } if (AIController.AI_DEBUG_ENABLED) { ai.aiDebug.registerDebugInfoAboutUnit(u, this.agentName); } } assistAgent.requestHelp(squad, REQUEST_PRIORITY); } }