예제 #1
0
 private void Awake()
 {
     this.controller    = GameObject.Find("BattleController").GetComponent <GameState_Controller>();
     this.field         = transform.parent.GetComponent <Player_UI>();
     this.agentName     = field.GetName();
     this.currentState  = AI_States.Idle;
     this.previousState = MainGameStates.SetupGame;
     this.updateNeeded  = false;
 }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        StopEngines();
        MoveToDestionation();
        ShootThePlayer();

        if (state == AI_States.AIS_IDLE)
        {
        }
        else if (state == AI_States.AIS_ATTACK)
        {
            if (live < 30)
            {
                state = AI_States.AIS_ESCAPE;
            }
        }
        else if (state == AI_States.AIS_ESCAPE)
        {
        }
    }
예제 #3
0
        private void CheckForTurn()
        {
            //Ha az aktív kulcs az övé és az aktuális fázisban még nem váltottunk, illetve engedélyezett az akció
            if (this.playerKey == controller.GetCurrentKey() &&
                (controller.GetGameState() != previousState) &&
                GameState_Controller.readyForAction)
            {
                //Fázis meghatározása
                switch (controller.GetGameState())
                {
                case MainGameStates.SetStat: this.currentState = AI_States.ChooseStat; break;

                case MainGameStates.SummonCard: this.currentState = AI_States.SummonCard; break;

                case MainGameStates.NormalSkills: this.currentState = AI_States.DecideSkill; break;

                default: this.currentState = AI_States.Idle; break;
                }
                previousState = controller.GetGameState();
                updateNeeded  = true;
            }
        }
예제 #4
0
 void BreakAway()
 {
     ai_state = AI_States.Fleeing;
     breakingAway = true;
     invokedBreakAway = false;
 }
예제 #5
0
    // Update is called once per frame
    void Update()
    {
        distToTarget = Vector3.Distance(target.position, transform.position);
        angle = Vector3.Angle(rigidbody.velocity, target.position - transform.position);
        switch (ai_type)
        {
            case AI_Types.FlyBy:

                if (breakingAway)
                {
                    if (distToTarget < maxRange)
                        ai_state = AI_States.Fleeing;
                    else
                    {
                        ai_state = AI_States.Hunting;
                        breakingAway = false;
                    }
                }
                else
                {
                    if (distToTarget > weaponsRange)
                        ai_state = AI_States.Hunting;
                    if (distToTarget <= weaponsRange)
                    {
                        //if (distToTarget <= minRange)
                        //{
                        //    ai_state = AI_States.StopAndAttack;
                        //    Invoke("BreakAway", timeToBreakaway);
                        //}
                        //else
                        //{
                            ai_state = AI_States.AttackMove;
                            if (!invokedBreakAway)
                            {
                                Invoke("BreakAway", timeToBreakaway);
                                invokedBreakAway = true;
                            }
                        //}
                    }
                }
                break;
            case AI_Types.Assassin:
                if (distToTarget < sightRange)
                {
                    spotted = true;
                    GameObject missionEnemy = missionController.missionEnemies.FirstOrDefault(e => e == this.gameObject);
                    if(missionEnemy)
                    {
                        missionController.missionEnemies
                            .Where(e => e != this.gameObject)
                            .ToList()
                            .ForEach(e => e.GetComponent<AI_Controller>().spotted = true);
                    }

                }
                if (spotted)
                {
                    ai_type = AI_Types.FlyBy;
                    //if (distToTarget > weaponsRange)
                    //    ai_state = AI_States.Hunting;
                    //if (distToTarget <= weaponsRange)
                    //{
                    //    if (distToTarget <= minRange)
                    //    {
                    //        ai_state = AI_States.StopAndAttack;
                    //        Invoke("BreakAway", timeToBreakaway);
                    //    }
                    //    else
                    //    {
                    //        ai_state = AI_States.AttackMove;
                    //        Invoke("BreakAway", timeToBreakaway);
                    //    }
                    //}
                }

                break;
            case AI_Types.Vulture:
                break;
            default:
                break;
        }
    }
예제 #6
0
 void Start()
 {
     missionController = GameObject.FindObjectOfType<MissionController>();
     switch (ai_type)
     {
         case AI_Types.FlyBy:
             ai_state = AI_States.Hunting;
             break;
         case AI_Types.Assassin:
             ai_state = AI_States.Waiting;
             break;
         case AI_Types.Vulture:
             ai_state = AI_States.Waiting;
             break;
         default:
             break;
     }
     attacking = false;
 }