Beispiel #1
0
    // Use this for initialization
    void Start()
    {
        eCurrentPhase     = eBossPhase.ePhaseSetup;
        mCanFire          = true;
        mTurningClockwise = true;
        mMovingLeft       = true;
        mAddCanFire       = true;
        mAltPhaseFour     = false;

        Target       = new Vector3(0, 5, 4);
        sEnemyGen    = GameObject.FindGameObjectWithTag("Enemy Generator").GetComponent <EnemyGenerator>();
        sGameManager = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManager>();
    }
Beispiel #2
0
    // Update is called once per frame
    void Update()
    {
        rot = transform.eulerAngles.y;

        //switch that uses an enum to determine what stage the boss is in and carry out different behaviours
        switch (eCurrentPhase)
        {
        //Setup phase, currently moves towards a set target and changes to phase one when in range
        case eBossPhase.ePhaseSetup:
        {
            transform.LookAt(Target);
            MovementForward();

            if (Vector3.Distance(this.transform.position, Target) <= 1)
            {
                eCurrentPhase = eBossPhase.ePhaseOne;
            }

            break;
        }

        //Shoots on the spot and rotates
        case eBossPhase.ePhaseOne:
        {
            if (mTurningClockwise == true && transform.eulerAngles.y <= 270.0f)
            {
                transform.Rotate(new Vector3(0, mRotateSpeed, 0));

                if (transform.eulerAngles.y >= 269.0f)
                {
                    mTurningClockwise = false;
                }
            }
            else if (mTurningClockwise == false && transform.eulerAngles.y >= 90.0f)
            {
                transform.Rotate(new Vector3(0, -mRotateSpeed, 0));

                Debug.Log("Gets Here");

                if (transform.eulerAngles.y <= 91.0f)
                {
                    mTurningClockwise = true;
                }
            }

            if (mHealth < 75)
            {
                eCurrentPhase = eBossPhase.ePhaseTwo;

                //Change this to an animation into the second phase rather than a straight set rotation
                transform.eulerAngles = new Vector3(0, 180, 0);
            }

            break;
        }

        //Moves left and right and shoots towards -Z
        case eBossPhase.ePhaseTwo:
        {
            if (mMovingLeft == true && transform.position.x >= -10.0f)
            {
                transform.position = new Vector3(transform.position.x - mMoveSpeed, transform.position.y, transform.position.z);

                if (transform.position.x < -9.9f)
                {
                    mMovingLeft = false;
                }
            }
            else if (mMovingLeft == false && transform.position.x <= 10.0f)
            {
                transform.position = new Vector3(transform.position.x + mMoveSpeed, transform.position.y, transform.position.z);

                if (transform.position.x > 9.9f)
                {
                    mMovingLeft = true;
                }
            }

            if (mHealth < 50)
            {
                eCurrentPhase = eBossPhase.ePhaseFourTransform;
            }

            break;
        }

        case eBossPhase.ePhaseThree:
        {
            break;
        }

        //Moves to a spot to prepare for the final phase
        case eBossPhase.ePhaseFourTransform:
        {
            transform.LookAt(Target);
            MovementForward();

            if (Vector3.Distance(this.transform.position, Target) <= 1)
            {
                transform.eulerAngles = new Vector3(0, 180, 0);
                eCurrentPhase         = eBossPhase.ePhaseFour;
            }


            break;
        }

        case eBossPhase.ePhaseFour:
        {
            mSpeed = 2.0f;

            if (mAddCanFire)
            {
                StartCoroutine(FireAddsBullets(0.3f));
            }
            break;
        }

        default:
            break;
        }

        if (mCanFire)
        {
            StartCoroutine(FireBullet(mSpeed));
        }
    }