// Update is called once per frame
    void Update()
    {
        //Keep the icon updated ~Adam
        if(mCurrentIcon != null)
        {
            mBossIcon.sprite = mCurrentIcon;
        }

        //Find the boss ~Adam
        if(mBoss == null && FindObjectOfType<BossGenericScript>() != null)
        {
            mBoss = FindObjectOfType<BossGenericScript>();
        }

        if(mBoss != null)
        {
            //Adjust meters ~Adam
            mHealthPanel.rectTransform.localScale = new Vector3((mBoss.mCurrentHealth/mBoss.mTotalHealth),1f,1f);
            mChargePanel.rectTransform.localScale = new Vector3((mBoss.mCurrentCharge/mBoss.mMaxCharge),1f,1f);
            mOverheatPanel.rectTransform.localScale = new Vector3((mBoss.mCurrentOverheat/mBoss.mMaxOverheat),1f,1f);
            //Toggle weapon button visibility ~Adam
            if(mBoss.mChargeReady)
            {
                mChargeWeaponButton.SetActive (true);
            }
            else
            {
                mChargeWeaponButton.SetActive (false);
            }

        }
    }
 // Use this for initialization
 void Start()
 {
     //Find the boss ~Adam
     if(FindObjectOfType<BossGenericScript>() != null)
     {
         mBoss = FindObjectOfType<BossGenericScript>();
     }
 }
    // Update is called once per frame
    void Update()
    {
        //Find the Boss ~Adam
        if(mTarget == null || mBoss == null)
        {
            if(FindObjectOfType<BossGenericScript>() != null)
            {
                mBoss = FindObjectOfType<BossGenericScript>();
                mTarget = mBoss.transform;
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (-3,3), Random.Range (-2,2),0);
            }
        }

        if(mTarget != null && Vector3.Distance (transform.position,mTargetPoint) < 2f)
        {
            //mHoverTimer -= Time.deltaTime;.
            if(Mathf.Abs (transform.position.x - mTarget.position.x) < 2f)
            {
                mSpeed = Mathf.Lerp (mSpeed, 2f, 0.3f);
            }
            else
            {
                mSpeed = Mathf.Lerp (mSpeed, mDefaultSpeed, 0.1f);
            }
            if(Vector3.Distance (transform.position,mTargetPoint) < 0.5f)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (-3,3), Random.Range (-2,2),0);
                mGoForCenter = false;
                mStuckTimer = mStuckDefault;
            }

        }
        else
        {
            if(mSpeed <= mDefaultSpeed-0.5f)
            {
                if(mTarget != null && Vector3.Distance (transform.position,mTargetPoint) < 3f)
                {
                    mSpeed = Mathf.Lerp (mSpeed, mDefaultSpeed/2f, 0.1f);
                }
                else
                {
                    mSpeed = mDefaultSpeed;
                }
            }
        }
        if(mDodgeTimer > 0f || mGoForCenter)
        {
            mSpeed = mDefaultSpeed;
        }

        if(mDodgeStuckTimer > mStuckDefault*-1f)
        {
            mDodgeStuckTimer-=Time.deltaTime;
        }

        if(!mHasFiredSuper && mHitsRemaining < 5)
        {
            mHasFiredSuper = true;
            mFiringSuper = true;
            mSuperWeapon.SetActive (true);
        }
        if(mFiringSuper && !mSuperWeapon.activeInHierarchy)
        {
            mFiringSuper = false;
        }

        //Toggle hit effect sparks ~Adam
        if(mInvincibleTimer >= 0f)
        {
            mInvincibleTimer -= Time.deltaTime;
            mDodgeTimer = 0f;
            mDodgeStuckTimer = mStuckDefault;
            mGoForCenter = false;
            mHitEffect.gameObject.SetActive (true);
            if(mHitEffect.isStopped)
            {
                mHitEffect.Play();
            }
        }
        else if(mHitEffect.isPlaying)
        {
            mHitEffect.gameObject.SetActive (false);
            mHitEffect.Stop();
        }

        //Check for if it's been stuck in place ~Adam
        if(mLastPos == transform.position && !mFiringSuper)
        {
            mStuckTimer -= Time.deltaTime;
            if(mStuckTimer <= 0f)
            {
                mGoForCenter = true;
            }
        }
        else
        {
            mLastPos = transform.position;
        }

        //Break out of what it's doing and fly to the center of the boss if stuck ~Adam
        if(mGoForCenter && mTarget != null)
        {
            mTargetPoint = mTarget.transform.position +(Vector3.up*5f);
            mMoveDir = Vector3.Normalize (mTargetPoint-transform.position);

            //mTargetPoint = mTarget.transform.position;

            //Don't try going to the center for too long ~Adam
            mGoForCenterTimer += Time.deltaTime;
            if(mGoForCenterTimer >= 3f)
            {
                mGoForCenter = false;
                mGoForCenterTimer = 0f;
            }
        }
        if(!mGoForCenter)
        {
            mGoForCenterTimer = 0;
        }

        //Try to get under the target point ~Adam
        if(mDodgeTimer <= 0f)
        {
            mMoveDir = Vector3.Normalize (mTargetPoint-transform.position);

        }
        //Dodge away ~Adam
        else
        {
            //mMoveDir = Vector3.Normalize (transform.position-mDodgePoint);
            mMoveDir = mDodgeDir;
            mDodgeTimer -= Time.deltaTime;
        }

        //Shoot ~Adam
        if(mShootTimer <= 0f)
        {
            FireHeroBullet ();
            mShootTimer = mShootTimerDefault;
        }

        //Adjust for speed and don't move on the Z axis ~Adam
        mMoveDir *= mSpeed * 0.01f;
        if(mDodgeTimer > 0f)
        {
            mMoveDir*=1.5f;
        }
        mMoveDir = new Vector3(mMoveDir.x, mMoveDir.y, 0f);

        //Don't let the ship shoot or get hit when a new boss or ship is coming in ~Adam
        if(!mHasEntered || mTarget == null || mBoss == null
           || (mBoss != null && (mBoss.mEntryTime>0f||mBoss.mDying) ) )
        {
            mInvincibleTimer = 1.5f;
            mShootTimer = 2f;
            if(transform.position.y > -33f)
            {
                mHasEntered = true;
            }
        }
        #region Don't let the ship leave the bounds of the screen ~Adamelse
        //Count down the shoot timer ~Adam
        mShootTimer -= Time.deltaTime;

        //Keep ship within screen bounds
        if(transform.position.x <= -20f)
        {
            transform.position = new Vector3(-20f, transform.position.y, transform.position.z);
            mMoveDir*=-1f;
            mDodgeTimer = 0f;
            if(mTarget != null)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (0,3), 0,0);
                mTargetPoint = new Vector3(-19f, mTargetPoint.y, mTargetPoint.z);
            }
        }
        if (transform.position.x >= 20f)
        {
            transform.position = new Vector3(20f, transform.position.y, transform.position.z);
            mMoveDir*=-1f;
            mDodgeTimer = 0f;
            if(mTarget != null)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (-3,0), 0,0);
                mTargetPoint = new Vector3(19f, mTargetPoint.y, mTargetPoint.z);
            }
        }

        if(transform.position.y <= -33f)
        {
            transform.position = new Vector3(transform.position.x, -33f, transform.position.z);
            mMoveDir*=-1f;
            mDodgeTimer = 0f;
            if(mTarget != null)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(0, Random.Range (0,2),0);
                mTargetPoint = new Vector3(mTargetPoint.x, -32f, mTargetPoint.z);
            }
        }
        if (transform.position.y >= 23f)
        {
            transform.position = new Vector3(transform.position.x, 23, transform.position.z);
            mMoveDir*=-1f;
            mDodgeTimer = 0f;
            if(mTarget != null)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(0, Random.Range (-2,0),0);
                mTargetPoint = new Vector3(mTargetPoint.x, 22f, mTargetPoint.z);
            }
        }
        #endregion

        //Don't try to go out of bounds due to the boss being too close to the bottom of the screen ~Adam

        if(mMoveDir.y < 0f && transform.position.y <-32f)
        {
            if(!mGoForCenter)
            {
                mMoveDir = new Vector3(mMoveDir.x,0f,mMoveDir.z);
            }
        }

        //Move the ship ~Adam
        if(!mFiringSuper && mBoss != null && mTarget != null)
        {
            transform.Translate(mMoveDir);
        }

        //Animate the ship ~Adam
        if(mShipSprite.GetComponent<Animator>() != null)
        {
            //Always firing ~Adam
            mShipSprite.GetComponent<Animator>().SetBool ("IsFiring", true);
            //Ship flying left ~Adam
            if(mMoveDir.x <= -0.02f)
            {
                mShipSprite.GetComponent<Animator>().SetInteger ("Direction", -1);
            }
            //Ship flying right ~Adam
            else if(mMoveDir.x >= 0.02f)
            {
                mShipSprite.GetComponent<Animator>().SetInteger ("Direction", 1);
            }
            //Ship flying straight/hovering
            else
            {
                mShipSprite.GetComponent<Animator>().SetInteger ("Direction", 0);
            }
        }

        //Toggle thrusters ~Adam
        if(mThrusters != null)
        {
            if(mMoveDir.y >= -0.02f && mThrusters.isStopped)
            {
                mThrusters.Play ();
            }
            else if(mMoveDir.y < -0.02f)
            {
                mThrusters.Stop();
            }
        }

        //For debug testing hero ship damage
        if(Input.GetKeyDown(KeyCode.K))
        {
            HitHeroShip(1);
        }

        //Keep target point within screen bounds
        if(mTarget != null)
        {
            if(mTargetPoint.x <= -20f)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (0,5), 0,0);
                mTargetPoint = new Vector3(-19f, mTargetPoint.y, mTargetPoint.z);

            }
            if (mTargetPoint.x >= 20f)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (-5,0), 0,0);
                mTargetPoint = new Vector3(19f, mTargetPoint.y, mTargetPoint.z);
            }

            if(mTargetPoint.y <= -33f)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(0, Random.Range (0,2),0);
                mTargetPoint = new Vector3(mTargetPoint.x, -32f, mTargetPoint.z);
            }
            if (mTargetPoint.y >= 23f)
            {
                mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(0, Random.Range (-2,0),0);
                mTargetPoint = new Vector3(mTargetPoint.x, 22f, mTargetPoint.z);
            }
        }
    }
 // Use this for initialization
 void Start()
 {
     mMaxHits = mHitsRemaining;
     mDefaultSpeed = mSpeed;
     //Find the Boss ~Adam
     if(mTarget == null || mBoss == null)
     {
         if(FindObjectOfType<BossGenericScript>() != null)
         {
             mBoss = FindObjectOfType<BossGenericScript>();
             mTarget = mBoss.transform;
             mTargetPoint = mTarget.transform.position +(Vector3.down*20f) +  new Vector3(Random.Range (-5,5), Random.Range (-2,2),0);
         }
     }
 }