コード例 #1
0
ファイル: FighterInFormation.cs プロジェクト: Broghain/GTO7
    public override void UpdateState()
    {
        //find or become leader
        if (fighter.GetLeader() == null && !fighter.IsMainLeader)
        {
            EnemyBehaviour[] potentialPartners = GameManager.instance.GetEnemiesOfType(EnemyType.Fighter);
            foreach (FighterController potentialPartner in potentialPartners)
            {
                if (potentialPartner.IsMainLeader)
                {
                    fighter.IsMainLeader = false;
                    break;
                }
                fighter.IsMainLeader = true; //no leader found, become leader
                fighter.Wing         = 0;
            }
        }

        //find partner 0
        if ((fighter.IsMainLeader || fighter.Wing == -1) && fighter.GetPartner(0) == null)
        {
            EnemyBehaviour[] potentialPartners = GameManager.instance.GetEnemiesOfType(EnemyType.Fighter);
            foreach (FighterController potentialPartner in potentialPartners)
            {
                if (potentialPartner.GetLeader() == null)
                {
                    potentialPartner.SetLeader(fighter);
                    fighter.SetPartner(0, potentialPartner);
                    potentialPartner.Wing = -1;
                    break;
                }
            }
        }

        //find partner 1
        if ((fighter.IsMainLeader || fighter.Wing == 1) && fighter.GetPartner(1) == null)
        {
            EnemyBehaviour[] potentialPartners = GameManager.instance.GetEnemiesOfType(EnemyType.Fighter);
            foreach (FighterController potentialPartner in potentialPartners)
            {
                if (potentialPartner.GetLeader() == null)
                {
                    potentialPartner.SetLeader(fighter);
                    fighter.SetPartner(1, potentialPartner);
                    potentialPartner.Wing = 1;
                    break;
                }
            }
        }

        //if not main leader and has a leader, move toward leader
        if (!fighter.IsMainLeader && fighter.GetLeader() != null)
        {
            destination = (fighter.GetLeader().transform.position - fighter.GetLeader().transform.up) + (fighter.GetLeader().transform.right *fighter.Wing);
            //rotate toward destination
            Quaternion targetRotation = Quaternion.LookRotation(destination - fighter.transform.position, new Vector3(0, 0, -1));
            fighter.transform.rotation = Quaternion.Lerp(fighter.transform.rotation, targetRotation, Time.deltaTime * fighter.RotationSpeed);
            //Move forward
            fighter.transform.Translate(Vector3.forward * Time.deltaTime * (fighter.MoveSpeed * 1.5f));
        }
    }