Beispiel #1
0
    // Will attempt to start a new screenshake, returns true if new shake has started, false otherwise
    public bool StartShaking(ScreenShakeInfo info, float duration, int priority)
    {
        if (duration <= 0f)
        {
            Debug.LogError("Duration is zero or less, expecting value greater than zero");
            return(false);
        }

        if (isShaking)
        {
            if (priority < m_priority)
            {
                return(false);
            }

            // TODO: Could have an event here for when cancelling the current screen shake
        }

        m_shakeInfo = info;
        m_duration  = duration;
        m_priority  = priority;

        m_startTime = Time.time;

        // Call it once with value of zero to 'reset' it
        UpdateShake(0f);

        return(true);
    }
Beispiel #2
0
    public IEnumerator TriggerDoorClose()
    {
        // If the player has not already cleared this room,
        // close the doors on entry
        if (!beenCleared)
        {
            // Close doors
            if (room.beenEntered && room.enemiesHaveSpawned && !doorsClosed)
            {
                for (int i = 0; i < doors.Length; i++)
                {
                    //Screen shake
                    ScreenShakeInfo Info = new ScreenShakeInfo();
                    Info.shakeMag          = gm.shakeMagDClose;
                    Info.shakeRou          = gm.shakeRouDClose;
                    Info.shakeFadeIDur     = gm.shakeFadeIDurDClose;
                    Info.shakeFadeODur     = gm.shakeFadeODurDClose;
                    Info.shakePosInfluence = gm.shakePosInfluenceDClose;
                    Info.shakeRotInfluence = gm.shakeRotInfluenceDClose;

                    ss.StartShaking(Info, 0.25f, 3);

                    //depth shake
                    gm.depthShaking = true;
                    gm.CameraDepthShake();

                    room.canOpen     = false;
                    room.doorsClosed = true;
                    doors[i].SetActive(true);
                }

                // Play audio
                FindObjectOfType <AudioManager>().Play("DoorClose");
            }

            yield return(new WaitForSeconds(spawnWait + 0.25f));

            canOpen = true;
        }
    }
Beispiel #3
0
    public void Shoot()
    {
        // Play Audio
        FindObjectOfType <AudioManager>().Play("ProjectileThrow");

        hasShot = true;
        GameObject go2 = Instantiate(bullet, gunHolder.position, gunHolder.transform.rotation);

        go2.GetComponent <Bullet>().weaponHolder    = gunHolder;
        bullet.GetComponent <Bullet>().playerBullet = true;

        //Screen shake
        ScreenShakeInfo Info = new ScreenShakeInfo();

        Info.shakeMag          = gm.shakeMagShoot;
        Info.shakeRou          = gm.shakeRouShoot;
        Info.shakeFadeIDur     = gm.shakeFadeIDurShoot;
        Info.shakeFadeODur     = gm.shakeFadeODurShoot;
        Info.shakePosInfluence = gm.shakePosInfluenceShoot;
        Info.shakeRotInfluence = gm.shakeRotInfluenceShoot;

        ss.StartShaking(Info, .1f, 1);
    }
Beispiel #4
0
    public void DecreaseHealth(float bulletDamage, string playersCurElement)
    {
        // Decrease enemy health if it wont die from damage
        if (e_CurHealth > gm.e_HealthDeath)
        {
            //Screen shake
            ScreenShakeInfo Info = new ScreenShakeInfo();
            Info.shakeMag          = gm.shakeMagHit;
            Info.shakeRou          = gm.shakeRouHit;
            Info.shakeFadeIDur     = gm.shakeFadeIDurHit;
            Info.shakeFadeODur     = gm.shakeFadeODurHit;
            Info.shakePosInfluence = gm.shakePosInfluenceHit;
            Info.shakeRotInfluence = gm.shakeRotInfluenceHit;

            ss.StartShaking(Info, .1f, 2);

            //Freeze the game for a split second
            gm.Freeze();

            // If player countered the enemy with their hit, take bonus damage
            if (playersCurElement == "Fire" && gm.e_IsEarth)
            {
                e_CurHealth -= bulletDamage + gm.fireDamage;

                // Play crit projectile audio
                FindObjectOfType <AudioManager>().Play("ProjectileHitCrit");

                // Play audio
                FindObjectOfType <AudioManager>().Play("ProjectileHit");
            }

            // If player countered the enemy with their hit, take bonus damage
            if (playersCurElement == "Water" && gm.e_IsFire)
            {
                e_CurHealth -= bulletDamage + gm.waterDamage;

                // Play crit projectile audio
                FindObjectOfType <AudioManager>().Play("ProjectileHitCrit");

                // Play audio
                FindObjectOfType <AudioManager>().Play("ProjectileHit");
            }

            // If player countered the enemy with their hit, take bonus damage
            if (playersCurElement == "Earth" && gm.e_IsWater)
            {
                e_CurHealth -= bulletDamage + gm.earthDamage;

                // Play crit projectile audio
                FindObjectOfType <AudioManager>().Play("ProjectileHitCrit");

                // Play audio
                FindObjectOfType <AudioManager>().Play("ProjectileHit");
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Fire" && gm.e_IsWater)
            {
                e_CurHealth -= bulletDamage;
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Fire" && gm.e_IsFire)
            {
                e_CurHealth -= bulletDamage;
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Water" && gm.e_IsEarth)
            {
                e_CurHealth -= bulletDamage;
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Water" && gm.e_IsWater)
            {
                e_CurHealth -= bulletDamage;
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Earth" && gm.e_IsFire)
            {
                e_CurHealth -= bulletDamage;
            }

            // If there is no element counter, do regular damage
            if (playersCurElement == "Earth" && gm.e_IsEarth)
            {
                e_CurHealth -= bulletDamage;
            }

            // Play audio
            FindObjectOfType <AudioManager>().Play("ProjectileHit");
        }

        // If this object dies, and is not a boss
        if (e_CurHealth <= gm.e_HealthDeath && !isBoss)
        {
            //Play Death Audio
            FindObjectOfType <AudioManager>().Play("EnemyDeath");

            //Decrease enemy count
            gm.enemyCount--;

            //Decrease room enemy count
            room.GetComponent <Room>().roomEnemyCount--;

            //Kill enemy
            Destroy(gameObject);
        }

        // if the boss dies
        if (e_CurHealth <= gm.e_HealthDeath && isBoss && !isDead)
        {
            //Play Death Audio
            FindObjectOfType <AudioManager>().Play("BossDeath");

            //Trigger dialogue system
            bossDialogueReady = true;

            isDead = true;

            // set the animation to idle
            animator.SetInteger("EnemyBrain", 0);

            // set the rb of the enemy to kinematic. prevents it
            // being able to be pushed around by player
            rb.bodyType = RigidbodyType2D.Static;

            // turn off the element background
            elementBGAnimator.enabled = false;
            BGElement.GetComponent <SpriteRenderer>().sprite = null;

            rm.bossHealth.SetActive(false);
        }

        StartCoroutine("UpdateHealthBar");
    }