Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }