// 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>(); }
// 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)); } }