Beispiel #1
0
    // Use this for initialization
    void Start()
    {
        rigidbody             = transform.GetComponent <Rigidbody>();
        boxCollider           = transform.GetComponent <BoxCollider>();
        timeSinceStateChanged = 0.0f;
        bossPos               = bossArcherPos.MEDIUMRIGHT;
        bossState             = bossArcherIA.IDLE;
        timeSinceStateChanged = 0.0f;
        timeJumping           = 0.0f;

        arrows = new Transform[arrowPool.childCount];
        for (int i = 0; i < arrowPool.childCount; ++i)
        {
            arrows[i] = arrowPool.GetChild(i);
        }
        arrowsScript = new BossArrowScript[arrowPool.childCount];
        for (int i = 0; i < arrows.Length; ++i)
        {
            arrowsScript[i] = arrows[i].GetComponent <BossArrowScript>();
        }
        animator       = transform.GetComponent <Animator>();
        firstStopPoint = true;
        slowFPS.SlowFPSChangedStatusEvent += SlowFPSStateChanged;
        timeWhenLastHitted = Time.time;

        playerScript.PlayerDeadEvent   += GlitchDead;
        playerScript.PlayerReviveEvent += GlitchRevives;

        upArrow.gameObject.SetActive(false);

        heart1 = HUDLives.FindChild("Heart1").GetComponent <Image>();
        heart2 = HUDLives.FindChild("Heart2").GetComponent <Image>();
        heart3 = HUDLives.FindChild("Heart3").GetComponent <Image>();
        heart4 = HUDLives.FindChild("Heart4").GetComponent <Image>();
        heart5 = HUDLives.FindChild("Heart5").GetComponent <Image>();

        //transform.FindChild("GlitchCollider").GetComponent<GlitchArcher>().BossGlitchedEvent += GlitchArcher;

        endBoss.BossGlitchEvent += GlitchArcher;
    }
Beispiel #2
0
 public void EndTurning()
 {
     if (bossState == bossArcherIA.TURNING_LEFT_TO_RUN)
     {
         transform.localEulerAngles = new Vector3(0f, 90f, 0f);
         bossState = bossArcherIA.MOVING;
     }
     else if (bossState == bossArcherIA.TURNING_RIGHT_TO_RUN)
     {
         transform.localEulerAngles = new Vector3(0f, 270f, 0f);
         bossState = bossArcherIA.MOVING;
     }
     else if (bossState == bossArcherIA.TURNING_LEFT_TO_STOP)
     {
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         bossState = bossArcherIA.PRESHOOT;
     }
     else if (bossState == bossArcherIA.TURNING_RIGHT_TO_STOP)
     {
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         bossState = bossArcherIA.PRESHOOT;
     }
     animator.speed = 1;
 }
Beispiel #3
0
    public void ShootArrows()
    {
        upArrow.gameObject.SetActive(false);
        upArrow.canMove = false;
        if (bossState != bossArcherIA.DEAD)
        {
            bossState = bossArcherIA.POSTSHOOT;
        }
        timeSinceStateChanged = 0.0f;
        animator.speed        = 1f;
        int random;

        if (lives == 5)
        {
            PrepareArrows(shootTypes.FIVE_NEAR_GLITCH);
        }
        else if (lives == 4)
        {
            random = Random.Range(1, 3);
            switch (random)
            {
            case 1:
                PrepareArrows(shootTypes.NINE_NEAR_GLITCH);
                break;

            case 2:
                PrepareArrows(shootTypes.NEW_SHOOT_TYPE_BIG);
                break;
            }
        }
        else if (lives == 3)
        {
            random = Random.Range(1, 5);
            switch (random)
            {
            case 1:
                PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH);
                break;

            case 2:
                PrepareArrows(shootTypes.NEW_SHOOT_TYPE_NORMAL);
                break;

            case 3:
                PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                break;

            case 4:
                PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                break;
            }
        }
        else if (lives == 2)
        {
            random = Random.Range(1, 5);
            switch (random)
            {
            case 1:
                PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL);
                break;

            case 2:
                PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                break;

            case 3:
                PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                break;

            case 4:
                PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA);
                break;
            }
        }
        else if (lives <= 1)
        {
            random = Random.Range(1, 6);
            switch (random)
            {
            case 1:
                PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL);
                break;

            case 2:
                PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                break;

            case 3:
                PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                break;

            case 4:
                PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH);
                break;

            case 5:
                PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA);
                break;
            }
        }
        shootInThisPlatform = true;
        StartCoroutine("CO_ShootArrows");
    }
Beispiel #4
0
    public void InsultingAnimationEnded()
    {
        if (lives == 2)
        {
            currentSpecialSpeed = 2f;
        }
        else if (lives == 1)
        {
            currentSpecialSpeed = 3f;
        }

        camera.ZoomArcherOut();
        holesActives = false;
        int random;

        switch (bossPos)
        {
        case bossArcherPos.MAXLEFT:
            movingRight = true;
            break;

        case bossArcherPos.MEDIUMLEFT:
            random = Random.Range(1, 3);
            if (random == 1)
            {
                movingRight = true;
            }
            else
            {
                movingRight = false;
            }
            break;

        case bossArcherPos.MEDIUMRIGHT:
            random = Random.Range(1, 3);
            if (random == 1)
            {
                movingRight = true;
            }
            else
            {
                movingRight = false;
            }
            break;

        case bossArcherPos.MAXRIGHT:
            movingRight = false;
            break;
        }


        if (!shootInThisPlatform)
        {
            bossState = bossArcherIA.PRESHOOT;
        }
        else if (movingRight)
        {
            bossState = bossArcherIA.TURNING_LEFT_TO_RUN;
            animator.SetBool("Run", true);
            animator.speed = currentSpecialSpeed;
            animator.SetTrigger("TurnLeft");
        }
        else
        {
            bossState = bossArcherIA.TURNING_RIGHT_TO_RUN;
            animator.SetBool("Run", true);
            animator.speed = currentSpecialSpeed;
            animator.SetTrigger("TurnRight");
        }
        timeSinceStateChanged = 0.0f;
    }
Beispiel #5
0
 public void OnCollisionEnter(Collision coll)
 {
     if (bossState == bossArcherIA.DEAD && !coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 1f)
     {
         animator.speed = 1f;
         animator.SetTrigger("GroundHitted");
     }
     else if (coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 2f && bossState != bossArcherIA.DEAD)
     {
         SoundManager.instance.PlaySingle(hit);
         timeWhenLastHitted         = Time.time;
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         animator.speed             = 1f;
         --lives;
         if (lives == 0)
         {
             heart1.sprite = heartEmpty;
             SoundManager.instance.PlaySingle(scream);
             animator.SetTrigger("LastHitted");
             camera.ZoomOut();
             glitchDebris.ArcherDead();
             bossState = bossArcherIA.DEAD;
             glitchDialogue.SetActive(true);
             glitchCollider.SetActive(true);
             shake.enabled = false;
             if (BossDeadEvent != null)
             {
                 BossDeadEvent();
             }
         }
         else if (lives == 1)
         {
             heart2.sprite = heartEmpty;
             holesActives  = true;
             camera.ZoomArcherIn();
             timeInPreShoot  = 0f;
             timeInPostShoot = 0f;
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 2)
         {
             heart3.sprite = heartEmpty;
             holesActives  = true;
             camera.ZoomArcherIn();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 3)
         {
             shake.enabled = true;
             heart4.sprite = heartEmpty;
             holesActives  = true;
             camera.ZoomArcherIn();
             timeInPreShoot  = 1f;
             timeInPostShoot = 1f;
             glitchDebris.Fall();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 4)
         {
             heart5.sprite = heartEmpty;
             holesActives  = true;
             camera.ZoomArcherIn();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
     }
 }
Beispiel #6
0
 public void OnTriggerEnter(Collider coll)
 {
     if (coll.transform.name == "JumpPoint" && bossState == bossArcherIA.MOVING && bossState != bossArcherIA.DEAD)
     {
         currentStartJumpPoint = transform.position;
         timeJumping           = 0.0f;
         SoundManager.instance.PlaySingle(jumpSound);
         int random;
         random = Random.Range(1, 3);
         if (bossPos == bossArcherPos.MAXRIGHT)
         {
             if (random == 1)
             {
                 bossPos                = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint    = EndJumpPoint[4].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[4].position;
             }
             else
             {
                 bossPos                = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint    = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[3].position;
             }
         }
         else if (bossPos == bossArcherPos.MAXLEFT)
         {
             if (random == 1)
             {
                 bossPos                = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint    = EndJumpPoint[1].position + new Vector3(+1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[0].position;
             }
             else
             {
                 bossPos                = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint    = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[1].position;
             }
         }
         else if (bossPos == bossArcherPos.MEDIUMLEFT && movingRight)
         {
             if (random == 1)
             {
                 bossPos                = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint    = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[2].position;
             }
             else
             {
                 bossPos                = bossArcherPos.MAXRIGHT;
                 currentEndJumpPoint    = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[3].position;
             }
         }
         else if (bossPos == bossArcherPos.MEDIUMLEFT && !movingRight)
         {
             bossPos                = bossArcherPos.MAXLEFT;
             currentEndJumpPoint    = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f);
             currentMiddleJumpPoint = MiddleJumpPoint[0].position;
         }
         else if (bossPos == bossArcherPos.MEDIUMRIGHT && movingRight)
         {
             bossPos                = bossArcherPos.MAXRIGHT;
             currentEndJumpPoint    = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f);
             currentMiddleJumpPoint = MiddleJumpPoint[4].position;
         }
         else if (bossPos == bossArcherPos.MEDIUMRIGHT && !movingRight)
         {
             if (random == 1)
             {
                 bossPos                = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint    = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[2].position;
             }
             else
             {
                 bossPos                = bossArcherPos.MAXLEFT;
                 currentEndJumpPoint    = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[1].position;
             }
         }
         else
         {
             Debug.Log("HEHE; ERROR");
         }
         bossState   = bossArcherIA.JUMPING;
         fallingJump = false;
         animator.SetTrigger("Jump");
     }
     else if (coll.transform.name == "StopPoint" && firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform)
     {
         firstStopPoint = false;
     }
     else if (coll.transform.name == "StopPoint" && !firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform)
     {
         if (bossPos == bossArcherPos.MEDIUMLEFT || bossPos == bossArcherPos.MEDIUMRIGHT)
         {
             transform.position = new Vector3(transform.position.x, transform.position.y, 17.5f - 5.34f);
         }
         if (movingRight)
         {
             bossState      = bossArcherIA.TURNING_RIGHT_TO_STOP;
             animator.speed = currentSpecialSpeed;
             animator.SetTrigger("TurnRight");
         }
         else
         {
             bossState      = bossArcherIA.TURNING_LEFT_TO_STOP;
             animator.speed = currentSpecialSpeed;
             animator.SetTrigger("TurnLeft");
         }
         animator.SetBool("Run", false);
     }
 }
Beispiel #7
0
    // Update is called once per frame
    void Update()
    {
        if (slowFPSactivated && (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP))
        {
            animator.speed = 0.5f;
        }
        else if (slowFPSactivated)
        {
            animator.speed = currentSpecialSpeed * 0.5f;
        }
        else if (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP)
        {
            animator.speed = 1f;
        }
        else
        {
            animator.speed = currentSpecialSpeed;
        }
        if (world.doUpdate)
        {
            if (!fallingDead)
            {
                rigidbody.velocity = Vector3.zero;
            }
            switch (bossState)
            {
            case bossArcherIA.MOVING:
                transform.Translate(Vector3.forward * world.lag * horizontalVelocity);
                break;

            case bossArcherIA.FALLING_JUMP:
                if (fallingJump)
                {
                    bossState = bossArcherIA.MOVING;
                }
                break;

            case bossArcherIA.JUMPING:
                float perc;
                timeJumping += world.lag;
                perc         = timeJumping / timeToJump;
                perc         = perc * perc * (3f - 2f * perc);

                Vector3 firstLerpPoint  = Vector3.Lerp(currentStartJumpPoint, currentMiddleJumpPoint, perc);
                Vector3 secondLerpPoint = Vector3.Lerp(currentMiddleJumpPoint, currentEndJumpPoint, perc);
                Vector3 currentPosition = Vector3.Lerp(firstLerpPoint, secondLerpPoint, perc);
                transform.position = currentPosition;

                if (IsGrounded() && perc >= 0.5f)
                {
                    shootInThisPlatform = false;
                    bossState           = bossArcherIA.FALLING_JUMP;
                }
                break;

            case bossArcherIA.PRESHOOT:
                if (canShoot)
                {
                    timeSinceStateChanged += world.lag;
                    if (timeSinceStateChanged >= timeInPreShoot)
                    {
                        bossState      = bossArcherIA.SHOOTING;
                        animator.speed = currentSpecialSpeed;
                        animator.SetTrigger("Attack");
                    }
                }
                else
                {
                    timeSinceStateChanged = 0.0f;
                }
                break;

            case bossArcherIA.SHOOTING:
                break;

            case bossArcherIA.POSTSHOOT:
                timeSinceStateChanged += world.lag;
                if (timeSinceStateChanged >= timeInPostShoot)
                {
                    int random;
                    switch (bossPos)
                    {
                    case bossArcherPos.MAXLEFT:
                        movingRight = true;
                        break;

                    case bossArcherPos.MEDIUMLEFT:
                        random = Random.Range(1, 3);
                        if (random == 1)
                        {
                            movingRight = true;
                        }
                        else
                        {
                            movingRight = false;
                        }
                        break;

                    case bossArcherPos.MEDIUMRIGHT:
                        random = Random.Range(1, 3);
                        if (random == 1)
                        {
                            movingRight = true;
                        }
                        else
                        {
                            movingRight = false;
                        }
                        break;

                    case bossArcherPos.MAXRIGHT:
                        movingRight = false;
                        break;
                    }
                    if (movingRight)
                    {
                        bossState = bossArcherIA.TURNING_LEFT_TO_RUN;
                        animator.SetBool("Run", true);
                        animator.speed = currentSpecialSpeed;
                        animator.SetTrigger("TurnLeft");
                    }
                    else
                    {
                        bossState = bossArcherIA.TURNING_RIGHT_TO_RUN;
                        animator.SetBool("Run", true);
                        animator.speed = currentSpecialSpeed;
                        animator.SetTrigger("TurnRight");
                    }
                }
                break;

            case bossArcherIA.TURNING_LEFT_TO_RUN:
            case bossArcherIA.TURNING_RIGHT_TO_RUN:
            case bossArcherIA.TURNING_LEFT_TO_STOP:
            case bossArcherIA.TURNING_RIGHT_TO_STOP:
            case bossArcherIA.HITTED:
                break;

            case bossArcherIA.IDLE:
                if (start)
                {
                    bossState = bossArcherIA.PRESHOOT;
                    start     = false;
                }
                break;

            case bossArcherIA.DEAD:
                if (fallingDead)
                {
                    timeFalling += world.lag;
                    float percentage = timeFalling / timeToMoveZWhileFall;
                    if (percentage >= 1.0f)
                    {
                        percentage = 1.0f;
                    }
                    float xPos = Mathf.Lerp(startXPosWhenDead, endXPosWhenDead, percentage);
                    float zPos = Mathf.Lerp(startZPosWhenDead, endZPosWhenDead, percentage);
                    transform.position = new Vector3(xPos, transform.position.y, zPos);
                }
                break;
            }
        }
    }
Beispiel #8
0
 public void EndTurning()
 {
     if (bossState == bossArcherIA.TURNING_LEFT_TO_RUN)
     {
         transform.localEulerAngles = new Vector3(0f, 90f, 0f);
         bossState = bossArcherIA.MOVING;
     }
     else if (bossState == bossArcherIA.TURNING_RIGHT_TO_RUN)
     {
         transform.localEulerAngles = new Vector3(0f, 270f, 0f);
         bossState = bossArcherIA.MOVING;
     }
     else if (bossState == bossArcherIA.TURNING_LEFT_TO_STOP)
     {
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         bossState = bossArcherIA.PRESHOOT;
     }
     else if (bossState == bossArcherIA.TURNING_RIGHT_TO_STOP)
     {
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         bossState = bossArcherIA.PRESHOOT;
     }
     animator.speed = 1;
 }
Beispiel #9
0
 public void ShootArrows()
 {
     upArrow.gameObject.SetActive(false);
     upArrow.canMove = false;
     if(bossState != bossArcherIA.DEAD)
         bossState = bossArcherIA.POSTSHOOT;
     timeSinceStateChanged = 0.0f;
     animator.speed = 1f;
     int random;
     if (lives == 5)
     {
         PrepareArrows(shootTypes.FIVE_NEAR_GLITCH);
     }
     else if (lives == 4)
     {
         random = Random.Range(1, 3);
         switch (random)
         {
             case 1:
                 PrepareArrows(shootTypes.NINE_NEAR_GLITCH);
                 break;
             case 2:
                 PrepareArrows(shootTypes.NEW_SHOOT_TYPE_BIG);
                 break;
         }
     }
     else if (lives == 3)
     {
         random = Random.Range(1, 5);
         switch (random)
         {
             case 1:
                 PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH);
                 break;
             case 2:
                 PrepareArrows(shootTypes.NEW_SHOOT_TYPE_NORMAL);
                 break;
             case 3:
                 PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                 break;
             case 4:
                 PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                 break;
         }
     }
     else if (lives == 2)
     {
         random = Random.Range(1, 5);
         switch (random)
         {
             case 1:
                 PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL);
                 break;
             case 2:
                 PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                 break;
             case 3:
                 PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                 break;
             case 4:
                 PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA);
                 break;
         }
     }
     else if (lives <= 1)
     {
         random = Random.Range(1, 6);
         switch (random)
         {
             case 1:
                 PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL);
                 break;
             case 2:
                 PrepareArrows(shootTypes.LEFT_TO_RIGHT);
                 break;
             case 3:
                 PrepareArrows(shootTypes.RIGHT_TO_LEFT);
                 break;
             case 4:
                 PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH);
                 break;
             case 5:
                 PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA);
                 break;
         }
     }
     shootInThisPlatform = true;
     StartCoroutine("CO_ShootArrows");
 }
Beispiel #10
0
    public void InsultingAnimationEnded()
    {

        if (lives == 2)
            currentSpecialSpeed = 2f;
        else if (lives == 1)
            currentSpecialSpeed = 3f;

        camera.ZoomArcherOut();
        holesActives = false;
        int random;
        switch (bossPos)
        {
            case bossArcherPos.MAXLEFT:
                movingRight = true;
                break;

            case bossArcherPos.MEDIUMLEFT:
                random = Random.Range(1, 3);
                if (random == 1)
                {
                    movingRight = true;
                }
                else
                {
                    movingRight = false;
                }
                break;
            case bossArcherPos.MEDIUMRIGHT:
                random = Random.Range(1, 3);
                if (random == 1)
                {
                    movingRight = true;
                }
                else
                {
                    movingRight = false;
                }
                break;
            case bossArcherPos.MAXRIGHT:
                movingRight = false;
                break;
        }


        if (!shootInThisPlatform)
            bossState = bossArcherIA.PRESHOOT;
        else if (movingRight)
        {
            bossState = bossArcherIA.TURNING_LEFT_TO_RUN;
            animator.SetBool("Run", true);
            animator.speed = currentSpecialSpeed;
            animator.SetTrigger("TurnLeft");
        }
        else
        {
            bossState = bossArcherIA.TURNING_RIGHT_TO_RUN;
            animator.SetBool("Run", true);
            animator.speed = currentSpecialSpeed;
            animator.SetTrigger("TurnRight");
        }
        timeSinceStateChanged = 0.0f;
    }
Beispiel #11
0
 public void OnCollisionEnter(Collision coll)
 {
     if (bossState == bossArcherIA.DEAD && !coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 1f)
     {
         animator.speed = 1f;
         animator.SetTrigger("GroundHitted");
     }
     else if (coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 2f && bossState != bossArcherIA.DEAD)
     {
         SoundManager.instance.PlaySingle(hit);
         timeWhenLastHitted = Time.time;
         transform.localEulerAngles = new Vector3(0f, 180f, 0f);
         animator.speed = 1f;
         --lives;
         if (lives == 0)
         {
             heart1.sprite = heartEmpty;
             SoundManager.instance.PlaySingle(scream);
             animator.SetTrigger("LastHitted");
             camera.ZoomOut();
             glitchDebris.ArcherDead();
             bossState = bossArcherIA.DEAD;
             glitchDialogue.SetActive(true);
             glitchCollider.SetActive(true);
             shake.enabled = false;
             if (BossDeadEvent != null)
                 BossDeadEvent();
         }
         else if (lives == 1)
         {
             heart2.sprite = heartEmpty;
             holesActives = true;
             camera.ZoomArcherIn();
             timeInPreShoot = 0f;
             timeInPostShoot = 0f;
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 2)
         {
             heart3.sprite = heartEmpty;
             holesActives = true;
             camera.ZoomArcherIn();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 3)
         {
             shake.enabled = true;
             heart4.sprite = heartEmpty;
             holesActives = true;
             camera.ZoomArcherIn();
             timeInPreShoot = 1f;
             timeInPostShoot = 1f;
             glitchDebris.Fall();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
         else if (lives == 4)
         {
             heart5.sprite = heartEmpty;
             holesActives = true;
             camera.ZoomArcherIn();
             animator.SetTrigger("Hitted");
             bossState = bossArcherIA.HITTED;
         }
     }
 }
Beispiel #12
0
 public void OnTriggerEnter(Collider coll)
 {
     if (coll.transform.name == "JumpPoint" && bossState == bossArcherIA.MOVING && bossState != bossArcherIA.DEAD)
     {
         currentStartJumpPoint = transform.position;
         timeJumping = 0.0f;
         SoundManager.instance.PlaySingle(jumpSound);
         int random;
         random = Random.Range(1, 3);
         if (bossPos == bossArcherPos.MAXRIGHT)
         {
             if (random == 1)
             {
                 bossPos = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint = EndJumpPoint[4].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[4].position;
             }
             else
             {
                 bossPos = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[3].position;
             }
         }
         else if (bossPos == bossArcherPos.MAXLEFT)
         {
             if (random == 1)
             {
                 bossPos = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint = EndJumpPoint[1].position + new Vector3(+1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[0].position;
             }
             else
             {
                 bossPos = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[1].position;
             }
         }
         else if (bossPos == bossArcherPos.MEDIUMLEFT && movingRight)
         {
             if (random == 1)
             {
                 bossPos = bossArcherPos.MEDIUMRIGHT;
                 currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[2].position;
             }
             else
             {
                 bossPos = bossArcherPos.MAXRIGHT;
                 currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[3].position;
             }
         }
         else if (bossPos == bossArcherPos.MEDIUMLEFT && !movingRight)
         {
             bossPos = bossArcherPos.MAXLEFT;
             currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f);
             currentMiddleJumpPoint = MiddleJumpPoint[0].position;
         }
         else if (bossPos == bossArcherPos.MEDIUMRIGHT && movingRight)
         {
             bossPos = bossArcherPos.MAXRIGHT;
             currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f);
             currentMiddleJumpPoint = MiddleJumpPoint[4].position;
         }
         else if (bossPos == bossArcherPos.MEDIUMRIGHT && !movingRight)
         {
             if (random == 1)
             {
                 bossPos = bossArcherPos.MEDIUMLEFT;
                 currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[2].position;
             }
             else
             {
                 bossPos = bossArcherPos.MAXLEFT;
                 currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f);
                 currentMiddleJumpPoint = MiddleJumpPoint[1].position;
             }
         }
         else
         {
             Debug.Log("HEHE; ERROR");
         }
         bossState = bossArcherIA.JUMPING;
         fallingJump = false;
         animator.SetTrigger("Jump");
     }
     else if (coll.transform.name == "StopPoint" && firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform)
     {
         firstStopPoint = false;
     }
     else if (coll.transform.name == "StopPoint" && !firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform)
     {
         if (bossPos == bossArcherPos.MEDIUMLEFT || bossPos == bossArcherPos.MEDIUMRIGHT)
             transform.position = new Vector3(transform.position.x, transform.position.y, 17.5f - 5.34f);
         if (movingRight)
         {
             bossState = bossArcherIA.TURNING_RIGHT_TO_STOP;
             animator.speed = currentSpecialSpeed;
             animator.SetTrigger("TurnRight");
         }
         else
         {
             bossState = bossArcherIA.TURNING_LEFT_TO_STOP;
             animator.speed = currentSpecialSpeed;
             animator.SetTrigger("TurnLeft");
         }
         animator.SetBool("Run", false);
     }
 }
Beispiel #13
0
    // Update is called once per frame
    void Update()
    {

        if (slowFPSactivated && (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP))
        {
            animator.speed = 0.5f;
        }
        else if (slowFPSactivated)
        {
            animator.speed = currentSpecialSpeed * 0.5f;
        }
        else if (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP)
        {
            animator.speed = 1f;
        }
        else
        {
            animator.speed = currentSpecialSpeed;
        }
        if (world.doUpdate)
        {
            if (!fallingDead)
                rigidbody.velocity = Vector3.zero;
            switch (bossState)
            {
                case bossArcherIA.MOVING:
                    transform.Translate(Vector3.forward * world.lag * horizontalVelocity);
                    break;

                case bossArcherIA.FALLING_JUMP:
                    if (fallingJump)
                        bossState = bossArcherIA.MOVING;
                    break;

                case bossArcherIA.JUMPING:
                    float perc;
                    timeJumping += world.lag;
                    perc = timeJumping / timeToJump;
                    perc = perc * perc * (3f - 2f * perc);

                    Vector3 firstLerpPoint = Vector3.Lerp(currentStartJumpPoint, currentMiddleJumpPoint, perc);
                    Vector3 secondLerpPoint = Vector3.Lerp(currentMiddleJumpPoint, currentEndJumpPoint, perc);
                    Vector3 currentPosition = Vector3.Lerp(firstLerpPoint, secondLerpPoint, perc);
                    transform.position = currentPosition;

                    if (IsGrounded() && perc >= 0.5f)
                    {
                        shootInThisPlatform = false;
                        bossState = bossArcherIA.FALLING_JUMP;
                    }
                    break;

                case bossArcherIA.PRESHOOT:
                    if (canShoot)
                    {
                        timeSinceStateChanged += world.lag;
                        if (timeSinceStateChanged >= timeInPreShoot)
                        {
                            bossState = bossArcherIA.SHOOTING;
                            animator.speed = currentSpecialSpeed;
                            animator.SetTrigger("Attack");
                        }
                    }
                    else
                    {
                        timeSinceStateChanged = 0.0f;
                    }
                    break;

                case bossArcherIA.SHOOTING:
                    break;

                case bossArcherIA.POSTSHOOT:
                    timeSinceStateChanged += world.lag;
                    if (timeSinceStateChanged >= timeInPostShoot)
                    {
                        int random;
                        switch (bossPos)
                        {
                            case bossArcherPos.MAXLEFT:
                                movingRight = true;
                                break;

                            case bossArcherPos.MEDIUMLEFT:
                                random = Random.Range(1, 3);
                                if (random == 1)
                                {
                                    movingRight = true;
                                }
                                else
                                {
                                    movingRight = false;
                                }
                                break;
                            case bossArcherPos.MEDIUMRIGHT:
                                random = Random.Range(1, 3);
                                if (random == 1)
                                {
                                    movingRight = true;
                                }
                                else
                                {
                                    movingRight = false;
                                }
                                break;
                            case bossArcherPos.MAXRIGHT:
                                movingRight = false;
                                break;
                        }
                        if (movingRight)
                        {
                            bossState = bossArcherIA.TURNING_LEFT_TO_RUN;
                            animator.SetBool("Run", true);
                            animator.speed = currentSpecialSpeed;
                            animator.SetTrigger("TurnLeft");
                        }
                        else
                        {
                            bossState = bossArcherIA.TURNING_RIGHT_TO_RUN;
                            animator.SetBool("Run", true);
                            animator.speed = currentSpecialSpeed;
                            animator.SetTrigger("TurnRight");
                        }
                    }
                    break;

                case bossArcherIA.TURNING_LEFT_TO_RUN:
                case bossArcherIA.TURNING_RIGHT_TO_RUN:
                case bossArcherIA.TURNING_LEFT_TO_STOP:
                case bossArcherIA.TURNING_RIGHT_TO_STOP:
                case bossArcherIA.HITTED:
                    break;

                case bossArcherIA.IDLE:
                    if (start)
                    {
                        bossState = bossArcherIA.PRESHOOT;
                        start = false;
                    }
                    break;

                case bossArcherIA.DEAD:
                    if (fallingDead)
                    {
                        timeFalling += world.lag;
                        float percentage = timeFalling / timeToMoveZWhileFall;
                        if (percentage >= 1.0f)
                            percentage = 1.0f;
                        float xPos = Mathf.Lerp(startXPosWhenDead, endXPosWhenDead, percentage);
                        float zPos = Mathf.Lerp(startZPosWhenDead, endZPosWhenDead, percentage);
                        transform.position = new Vector3(xPos, transform.position.y, zPos);
                    }
                    break;

            }
        }
    }
Beispiel #14
0
    // Use this for initialization
    void Start()
    {

        rigidbody = transform.GetComponent<Rigidbody>();
        boxCollider = transform.GetComponent<BoxCollider>();
        timeSinceStateChanged = 0.0f;
        bossPos = bossArcherPos.MEDIUMRIGHT;
        bossState = bossArcherIA.IDLE;
        timeSinceStateChanged = 0.0f;
        timeJumping = 0.0f;

        arrows = new Transform[arrowPool.childCount];
        for (int i = 0; i < arrowPool.childCount; ++i)
        {
            arrows[i] = arrowPool.GetChild(i);
        }
        arrowsScript = new BossArrowScript[arrowPool.childCount];
        for (int i = 0; i < arrows.Length; ++i)
        {
            arrowsScript[i] = arrows[i].GetComponent<BossArrowScript>();
        }
        animator = transform.GetComponent<Animator>();
        firstStopPoint = true;
        slowFPS.SlowFPSChangedStatusEvent += SlowFPSStateChanged;
        timeWhenLastHitted = Time.time;

        playerScript.PlayerDeadEvent += GlitchDead;
        playerScript.PlayerReviveEvent += GlitchRevives;

        upArrow.gameObject.SetActive(false);

        heart1 = HUDLives.FindChild("Heart1").GetComponent<Image>();
        heart2 = HUDLives.FindChild("Heart2").GetComponent<Image>();
        heart3 = HUDLives.FindChild("Heart3").GetComponent<Image>();
        heart4 = HUDLives.FindChild("Heart4").GetComponent<Image>();
        heart5 = HUDLives.FindChild("Heart5").GetComponent<Image>();

        //transform.FindChild("GlitchCollider").GetComponent<GlitchArcher>().BossGlitchedEvent += GlitchArcher;

        endBoss.BossGlitchEvent += GlitchArcher;
    }