Beispiel #1
0
    private void ChangeState(AICycle cycle)
    {
        switch (cycle.action)
        {
        case AIAction.None:
            cycle.action = AIAction.CreateFactory;
            cycle.CreateFactory();
            break;

        case AIAction.CreateFactory:
            cycle.action = AIAction.CreateTroop;
            cycle.CreateTroop();
            break;

        case AIAction.CreateTroop:
            if (cycle.factory.queue.Count == 0)
            {
                cycle.troop.ChangeTo(cycle.factory.GetUnits(cycle.tanksNumber));
                cycle.action = AIAction.MoveTroop;
                cycle.MoveTroop();
                cycle.timer = cycle.waitTime;
            }
            break;

        case AIAction.MoveTroop:
            if (cycle.troop.Arrived())
            {
                if (cycle.timer <= 0.0f)
                {
                    cycle.action = AIAction.AttackTroop;
                    cycle.AttackTroop();
                }
                else
                {
                    cycle.timer -= Time.deltaTime;
                }
            }
            break;

        case AIAction.AttackTroop:
            cycle.CheckGoal();
            if (cycle.troop.count == 0)
            {
                if (cycle.factory == null)
                {
                    cycle.action = AIAction.CreateFactory;
                    cycle.CreateFactory();
                }
                else
                {
                    cycle.action = AIAction.CreateTroop;
                    cycle.CreateTroop();
                }
                cycle.ClearGoals();
            }
            else if (cycle.isGoal == false)
            {
                cycle.action = AIAction.AttackTroop;
                cycle.AttackTroop();
            }
            break;
        }
    }
 public EnemyAIPattern(AICycle aiCycle, params AIActionPattern[] aiActionPattern)
 {
     this._aiCycle         = aiCycle;
     this._aiActionPattern = new List <AIActionPattern>(aiActionPattern);
 }