// Use this for initialization
 void Start()
 {
     if(FindObjectOfType<HeroShipAI>() != null)
     {
         mHero = FindObjectOfType<HeroShipAI>();
     }
 }
 public virtual void Start()
 {
     if(mHero == null)
     {
         mHero = FindObjectOfType<HeroShipAI>();
     }
     rgb2d = GetComponent<Rigidbody2D> ();
 }
    void Update()
    {
        if(!mAutoRotate)
        {
            mTargetRotation = new Vector3(Input.GetAxis ("RightAnalogHorizontal"), Input.GetAxis ("RightAnalogVertical"), 0);
            Vector3.Normalize (mTargetRotation);
            mTargetRotation = new Vector3(0f, 0f, Vector3.Angle(mTargetRotation, Vector3.down));
            if(Input.GetAxis ("RightAnalogHorizontal") < 0f)
            {
                mTargetRotation *= -1f;
            }
            if(Input.GetAxis ("RightAnalogHorizontal") !=0f || Input.GetAxis ("RightAnalogVertical") != 0f)
            {

                transform.rotation =Quaternion.Lerp (transform.rotation, Quaternion.Euler (mTargetRotation), 0.001f*mRotateSpeed);
            }
        }
        else
        {
            if(mTargetPlayer == null)
            {
                if(FindObjectOfType<HeroShipAI>() != null)
                {
                    mTargetPlayer = FindObjectOfType<HeroShipAI>();
                }
            }
            else
            {

                mTargetPlayerPosition = mTargetPlayer.gameObject.transform.position;
                mTargetRotation = new Vector3(mTargetPlayerPosition.x-transform.position.x,mTargetPlayerPosition.y-transform.position.y,0f);
                //mTargetRotation += Vector3.up*3f;
            }

            Vector3.Normalize (mTargetRotation);
            mTargetRotation = new Vector3(0f, 0f, Vector3.Angle(mTargetRotation, Vector3.down));
            if(mTargetPlayerPosition.x < transform.position.x)
            {
                mTargetRotation *= -1f;
            }

            transform.rotation =Quaternion.Lerp (transform.rotation, Quaternion.Euler (mTargetRotation), 0.001f*mRotateSpeed * Time.timeScale);

        }
        //transform.rotation = new Quaternion(Input.GetAxis ("RightAnalogHorizontal"), Input.GetAxis ("RightAnalogVertical"), 0, 0);
    }
    public virtual void Update()
    {
        if(mEntryTime >= 0f)
        {
            mEntryTime -= Time.deltaTime;
        }

        if(mHero == null)
        {
            mHero = FindObjectOfType<HeroShipAI>();
        }
        else
        {
            if(!mHero.mHasEntered)
            {
                mOverheated = true;
                mCurrentOverheat = 10f;
            }
            if(mWeakPointTransforms.Count >0 && mWeakPointTransforms[0] != null)
            {
                mHero.mTarget = mWeakPointTransforms[0];
            }
        }

        if(mWeakPointTransforms.Count >0 && mWeakPointTransforms[0] == null)
        {
            mWeakPointTransforms.Remove(null);
        }
        if(mWeakPoints.Count >0 && mWeakPoints[0] == null)
        {
            mWeakPoints.Remove(null);
        }

        float horizontal = Input.GetAxis ("Horizontal");
        float vertical = Input.GetAxis ("Vertical");
        rgb2d.velocity = new Vector2 (horizontal * mMoveSpeed, vertical * mMoveSpeed);

        //Keep the boss within the bounds of the screen ~Adam
        if(mBounds.Length >=4)
        {
            //X-Min ~Adam
            if(transform.position.x < mBounds[0])
            {
                transform.position = new Vector3(mBounds[0], transform.position.y, transform.position.z);

            }
            //X-Max ~Adam
            if (transform.position.x > mBounds[1])
            {
                transform.position = new Vector3(mBounds[1], transform.position.y, transform.position.z);

            }
            //Y-Min ~Adam

            if(transform.position.y < mBounds[2])
            {
                transform.position = new Vector3(transform.position.x, mBounds[2], transform.position.z);

            }
            //Y-Max ~Adam
            if (transform.position.y > mBounds[3])
            {
                transform.position = new Vector3(transform.position.x, mBounds[3], transform.position.z);
            }
        }

        //Die and spawn the next boss ~Adam
        if(mDying == true)
        {
            mDeathTimer -= Time.deltaTime;
            if(mDeathEffect != null)
            {
                mDeathEffect.SetActive (true);
            }
            if(mDeathTimer <= 0f)
            {
                if(mNextBoss != null)
                {
                    Instantiate (mNextBoss, new Vector3(0f,0f,-2f), Quaternion.identity);
                }
                else
                {
                    Application.LoadLevel(0);
                }
                Destroy (this.gameObject);
            }
        }

        //For Overheat Timers ~Adam
        if(mCurrentOverheat <= mMaxOverheat && !mOverheated)
        {
            mCurrentOverheat += Time.deltaTime;
        }
        else if(mCurrentOverheat >= mMaxOverheat)
        {
            mOverheated = true;
        }
        if(mOverheated)
        {
            mCurrentOverheat -= Time.deltaTime*5f;
            if(mCurrentOverheat <= 0f)
            {
                mCurrentOverheat = 0f;
                mOverheated = false;
            }
        }
        //For Charge Timers ~Adam
        if(mCurrentCharge < mMaxCharge && !mChargeReady)
        {
            mCurrentCharge += Time.deltaTime;
        }
        else if(mCurrentCharge >= mMaxCharge)
        {
            mChargeReady = true;
            if(mCurrentCharge > mMaxCharge)
            {
                mCurrentCharge = mMaxCharge;
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        if(mHero == null)
        {
            mShipIcon.sprite = mShipStages[7];
            mHealthPercent = 0f;
            if(FindObjectOfType<HeroShipAI>() != null)
            {
                mHero = FindObjectOfType<HeroShipAI>();
            }

        }

        else
        {
            //Find how much health the current hero ship has left ~Adam
            mHealthPercent = mHero.mHitsRemaining/(mHero.mMaxHits+0.001f);

            //Change the display of the ship based on health percentage ~Adam
            if(mShipIcon != null && mShipStages.Length >= 8)
            {
                //Ship at full health ~Adam
                if(mHealthPercent >= 0.9f)
                {
                    mShipIcon.sprite = mShipStages[0];
                }
                //One Claw down ~Adam
                else if(mHealthPercent >= 0.8f)
                {
                    mShipIcon.sprite = mShipStages[1];
                }
                //Both Claws down ~Adam
                else if(mHealthPercent >= 0.6f)
                {
                    mShipIcon.sprite = mShipStages[2];
                }
                //One Gun down ~Adam
                else if(mHealthPercent >= 0.4f)
                {
                    mShipIcon.sprite = mShipStages[3];
                }
                //Both Guns down ~Adam
                else if(mHealthPercent >= 0.2f)
                {
                    mShipIcon.sprite = mShipStages[4];
                }
                //One Wing down ~Adam
                else if(mHealthPercent >= 0.1f)
                {
                    mShipIcon.sprite = mShipStages[5];
                }
                //Both Wings down ~Adam
                else if(mHealthPercent >= 0.01f)
                {
                    mShipIcon.sprite = mShipStages[6];
                }
                //Dead Ship ~Adam
                else
                {
                    mShipIcon.sprite = mShipStages[7];
                }

            }

            if(!mHero.mHasEntered)
            {
                mShipIcon.sprite = mShipStages[7];
            }
        }

        //Adjust life meter
        mHealthPanel.localScale = new Vector3(mHealthPercent,1f,1f);
    }