Esempio n. 1
0
 public override void Enter()
 {
     this.timeInState      = 0f;
     this.hasReportedDeath = false;
     impulseSource.GenerateImpulse();
     slime.effectsAudioSource.PlayOneShot(deathSound);
 }
Esempio n. 2
0
 public override void Enter()
 {
     timeInState = 0f;
     bats.Clear();
     SpawnBats();
     impulseSource.GenerateImpulse();
 }
Esempio n. 3
0
    public override void Tick()
    {
        if (!manfred.playerInput.GetIsHoldingSiphon())
        {
            TransitionToSiphonRecovery();
            return;
        }

        Collider2D[] colliders = Physics2D.OverlapCircleAll(manfred.siphonSinkTransform.position, siphonRadius, siphonLayerMask);
        for (int i = 0; i < colliders.Length; i++)
        {
            Collider2D   collider = colliders[i];
            SiphonSource source   = collider.GetComponentInParent <SiphonSource>();
            if (source != null)
            {
                source.OnSiphoned(manfred.siphonSinkTransform.position, attractForce);

                SiphonDroplet droplet = source as SiphonDroplet;
                if (droplet != null && ShouldCollectDroplet(droplet))
                {
                    CollectDroplet(droplet);
                    Debug.Log("generating impulse");
                    impulseSource.GenerateImpulse();
                }
            }
        }
    }
Esempio n. 4
0
 private void GenerateShake()
 {
     if (impulseSource)
     {
         impulseSource.GenerateImpulse(transform.forward);
     }
 }
Esempio n. 5
0
    public void BaseEffect(float mod = 1f)
    {
        impulseSource.GenerateImpulse(Vector3.one * mod * 40f);
        //Shake(0.04f * mod, 0.075f * mod);
        Chromate(1.5f * mod, 2f * mod);
        Bulge(defaultLensDistortion * 1.1f * mod, 50f * mod);

        //Time.timeScale = Mathf.Clamp(1f - 0.2f * mod, 0f, 1f);
    }
Esempio n. 6
0
    private void Shoot()
    {
        SpawnProjectile();
        AddRecoil();
        ApplyKnockback();
        shakeSource.GenerateImpulse(Vector2.one);

        nextFireTime = Time.time + 60f / firerate;
    }
Esempio n. 7
0
    // Update is called once per frame
    //void Update()
    //{
    //}

    public override void Damage()
    {
        MyInpulse.GenerateImpulse();

        if (attackTarget != null)
        {
            attackTarget.GetComponent <PlayerControl>().TakeDamage(attackDamage);
        }
    }
    public void GenerateRecoil()
    {
        time = duration;
        cameraShake.GenerateImpulse(Camera.main.transform.forward);

        horizontalRecoil = recoilPattern[index].x;
        verticalRecoil   = recoilPattern[index].y;

        index = NextIndex(index);
    }
    public void GenerateRecoil()
    {
        if (!gameObject.transform.IsChildOf(GameObject.FindGameObjectWithTag("Player").transform))
        {
            return;
        }

        //Generate the impulse for the recoil
        _cameraShake.GenerateImpulse(Camera.main.transform.forward);
    }
Esempio n. 10
0
    private void UseDeath()
    {
        deathImpulseSource.GenerateImpulse();
        manfred.effectsCanvas.DoWhiteFlash(0.5f);
        manfred.effectsAudioSource.PlayOneShot(deathCardSoundEffect);

        TrashEnemy[] enemies = (TrashEnemy[])Object.FindObjectsOfType(typeof(TrashEnemy));
        for (int i = 0; i < enemies.Length; i++)
        {
            enemies[i].OnDeathUsed();
        }
    }
Esempio n. 11
0
    IEnumerator Flinch(bool turnToFacePlayerAfter = false)
    {
        WaitForEndOfFrame wfeof = new WaitForEndOfFrame();

        cinemachineImpulseSource.GenerateImpulse();
        float   currTime = 0f;
        Vector3 iPos     = transform.position;

        while (currTime < flinchFreeze)
        {
            transform.position = iPos + new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f)) * planetShakeAmplitude;
            currTime          += Time.deltaTime;
            yield return(wfeof);
        }

        float      angle             = Random.Range(70f, 90f);
        Quaternion irot              = transform.rotation;
        Quaternion targetOrientation = transform.rotation * Quaternion.AngleAxis(angle, new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f)));
        float      lerpVal;

        currTime = 0f;
        float totalTime = angle / 30f * FlinchTime * (turnToFacePlayerAfter?.5f : 1f);

        while (currTime < totalTime)
        {
            currTime          += Time.deltaTime;
            lerpVal            = FlinchCurve.Evaluate(Mathf.InverseLerp(0f, totalTime, currTime));
            transform.rotation = Quaternion.Lerp(irot, targetOrientation, lerpVal);
            yield return(wfeof);
        }
        if (health > 0)
        {
            StartCoroutine(CombatSpin());
        }
        if (turnToFacePlayerAfter)
        {
            FirePlanet fp = GetComponent <FirePlanet>();
            if (fp != null)
            {
                fp.StopFireBreath();
            }
            irot     = transform.rotation;
            currTime = 0f;
            while (currTime < 3f)
            {
                currTime          += Time.deltaTime;
                lerpVal            = LookAtPlayerCurve.Evaluate(Mathf.InverseLerp(0f, 3f, currTime));
                transform.rotation = Quaternion.Slerp(irot, Quaternion.LookRotation((player.position - transform.position).normalized, transform.up), lerpVal);
                yield return(wfeof);
            }
        }
    }
Esempio n. 12
0
    IEnumerator Explode_Coroutine()
    {
        explosionImpulse.GenerateImpulse(Vector3.one * 5);
        explosionParticle.Play(true);
        this.explosionHitBox.enabled = true;
        yield return(new WaitForEndOfFrame());

        yield return(new WaitForEndOfFrame());

        yield return(new WaitForEndOfFrame());

        this.explosionHitBox.enabled = false;
    }
Esempio n. 13
0
    public void TakeDamage(int damage, Action OnDead = null)
    {
        if (invulnerable)
        {
            OnHitWhileInvulnerable?.Invoke();
        }
        else
        {
            if (currentHP <= 0)
            {
                return;
            }

            currentHP -= damage;
            if (currentHP <= 0)
            {
                currentHP = 0;
            }

            if (smoke != null)
            {
                if (currentHP <= smokeThresshold)
                {
                    if (!smoke.isPlaying)
                    {
                        smoke.Play(true);
                    }
                }
                if (currentHP > smokeThresshold)
                {
                    if (smoke.isPlaying)
                    {
                        smoke.Stop(true);
                    }
                }
            }

            onHitImpulse.GenerateImpulse();
            OnHit.Invoke();
            onHpChanged?.Invoke(currentHP, maxHP, HealthPercentage);

            if (currentHP == 0)
            {
                OnDead?.Invoke();
                OnDeath.Invoke();
            }

            hitEffect.Play();
        }
    }
 private void OnTriggerEnter(Collider other)
 {
     if (animator.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.Attack"))
     {
         if (other.gameObject.tag == "Sword")
         {
             Debug.Log("Player[Sword] attacks the door.");
             //swordParticalSys.GetComponent<ParticleSystem>().Play();
             SwordPartical.SetActive(true);
             attackInpulse.GenerateImpulse();
         }
         if (other.gameObject.tag == "Shield")
         {
             Debug.Log("Player[Shield] attacks the door.");
             ShieldPartical.SetActive(true);
             attackInpulse.GenerateImpulse();
         }
     }
     else
     {
         SwordPartical.SetActive(false);
         ShieldPartical.SetActive(false);
     }
 }
 public bool Shoot()
 {
     if (!canShoot)
     {
         return(false);
     }
     if (nextFireTime < Time.time)
     {
         impulseSource.GenerateImpulse();
         spinner?.StopSpinning();
         nextFireTime = Time.time + (1 / fireRate);
         if (aimSprite != null)
         {
             aimSprite.gameObject.SetActive(false);
         }
         Instantiate(bulletPrefab, muzzle.position, muzzle.rotation, null).Shoot(transform.localScale.x > 0);
         return(true);
     }
     return(false);
 }
Esempio n. 16
0
    public void GenerageImpuse(ImpulseSelect impulseSelect)
    {
        switch (impulseSelect)
        {
        case ImpulseSelect.Dash:
            dash.GenerateImpulse();
            break;

        case ImpulseSelect.Hook:
            hook.GenerateImpulse();
            break;

        case ImpulseSelect.Sink:
            sink.GenerateImpulse();
            break;

        case ImpulseSelect.Speech:
            speech.GenerateImpulse();
            break;
        }
    }
Esempio n. 17
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Explosion")
        {
            GameObject explosion = Instantiate(explosionPrefab, transform.position, Quaternion.identity);

            //play explosion sound
            SoundManger.Instance.PlayRockExplosionSound();

            shakeImpulse.GenerateImpulse();

            Destroy(this.gameObject);

            foreach (var block in tileBlocks)
            {
                block.GetComponent <SpriteRenderer>().DOColor(Color.clear, 3f);

                Destroy(block, 1);
            }
        }
    }
Esempio n. 18
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetMouseButtonDown(0) && isAiming)
     {
         gunSound.Play();
         source.GenerateImpulse(Camera.main.transform.forward);
         RaycastHit hit;
         if (Physics.Raycast(cam.position, cam.forward, out hit, weaponRange))
         {
             Debug.Log("Hit");
             Target target = hit.transform.GetComponent <Target>();
             if (target != null)
             {
                 target.Hit(damage);
             }
         }
         else
         {
             Debug.Log("Miss");
         }
     }
     else if (Input.GetMouseButtonDown(0) && !isAiming)
     {
         Debug.Log("Melee");
     }
     if (Input.GetMouseButton(1) && !aimCamera.activeInHierarchy)
     {
         isAiming = true;
         mainCamera.SetActive(false);
         aimCamera.SetActive(true);
     }
     else if (!Input.GetMouseButton(1) && !mainCamera.activeInHierarchy)
     {
         isAiming = false;
         mainCamera.SetActive(true);
         aimCamera.SetActive(false);
     }
 }
Esempio n. 19
0
    private void Update()
    {
        if (pauseController.IsPaused())
        {
            if (!isPaused)
            {
                isPaused = true;
                PlayerInput.ShowMouse(true);
            }

            return;
        }
        else
        {
            if (isPaused == true)
            {
                PlayerInput.ShowMouse(false);
            }
        }

        if (isPaused != pauseController.IsPaused())
        {
            isPaused = pauseController.IsPaused();
        }

        if (PlayerInput.GetRightMouseDown())
        {
            sofaView.Begin();
            gapExplorer.Deselect();
            End();

            return;
        }


        if (cinemachineBrain.IsBlending)
        {
            return;
        }

        float dist        = float.MaxValue;
        Item  closestItem = gapExplorer.GetClosestItem(ref dist);

        if (dist <= maxGrabDistance)
        {
            if (closestItem != hoverItem)
            {
                if (DialogManager.CurrentMessage != introDialogs[0] && DialogManager.CurrentMessage != introDialogs[1] && DialogManager.CurrentMessage != introDialogs[2])
                {
                    hoverItem = closestItem;

                    if (!holdingItem)
                    {
                        wobble.GenerateImpulse();
                    }

                    OnOverItem(hoverItem);
                }
            }

            if (PlayerInput.GetLeftMouseDown())
            {
                if (DialogManager.CurrentMessage != introDialogs[0] && DialogManager.CurrentMessage != introDialogs[1] && DialogManager.CurrentMessage != introDialogs[2])
                {
                    holdingItem    = hoverItem;
                    camPosAtGrab   = cam.gameObject.transform.position;
                    handPosAtGrabY = gapExplorer.GetHandInGapPos().y;
                }
            }
        }
        else
        {
            if (hoverItem)
            {
                OnOutItem(hoverItem);
            }
            hoverItem = null;
        }

        float speedToMoveInOut;
        float speedToMovePan = speedToMoveInOut = maxPanSpeed * mouseSens.value * Time.deltaTime;

        if (holdingItem)
        {
            if (gapExplorer.GetHandInGapPos().y == 0)
            {
                cam.transform.position = camPosAtGrab;

                camPosAtGrab   = Vector3.zero;
                handPosAtGrabY = -1;

                introDialogs[3].AutoContinue = true;

                examineView.currentItem = holdingItem;
                examineView.lastView    = this;
                examineView.Begin();
                End();
            }
            else if (!PlayerInput.GetLeftMouse())
            {
                cam.transform.position = camPosAtGrab;

                camPosAtGrab   = Vector3.zero;
                handPosAtGrabY = -1;

                holdingItem = null;

                //if (gapExplorer.GetHandInGapPos().y == 0)
                //{
                //    examineView.currentItem = holdingItem;
                //    examineView.Begin();
                //    End();
                //}
                //else
                //{
                //    holdingItem = null;
                //}
            }
            else
            {
                speedToMovePan *= 0;
                Vector3 newCamPos = camPosAtGrab;

                float shakeAmount = Mathf.Clamp01(ExtensionMethods.Map((1 - gapExplorer.GetHandInGapPos().y), 0f, handPosAtGrabY, 0f, 1f)) * Time.deltaTime;
                //Debug.Log("handPosAtGrabY: " + handPosAtGrabY.ToString() + ", 1-GetHandInGapPos.y: " + (1-gapExplorer.GetHandInGapPos().y).ToString());
                Debug.Log(shakeAmount);

                newCamPos.x           += grabMaxShakeAmount * UnityEngine.Random.Range(-1f, 1f) * shakeAmount;
                newCamPos.z           += grabMaxShakeAmount * UnityEngine.Random.Range(-1f, 1f) * shakeAmount;
                cam.transform.position = newCamPos;
            }
        }

        if (holdingItem && PlayerInput.GetLeftMouse())
        {
            speedToMovePan   *= gapPanSpeedMod;
            speedToMoveInOut *= gapInOutSpeedMod;
        }


        if (Mathf.Abs(PlayerInput.GetMouseY()) > mouseMovementRummageSoundThreshold.y && !seachingSoundSource.isPlaying ||
            Mathf.Abs(PlayerInput.GetMouseX()) > mouseMovementRummageSoundThreshold.x && !seachingSoundSource.isPlaying
            )
        {
            seachingSoundSource.PlayOneShot(sofaRummageSounds.GetNext());
        }

        currentFOV      = Mathf.Lerp(currentFOV, Mathf.Lerp(gapFOVMinMax.x, gapFOVMinMax.y, 1 - gapExplorer.GetHandInGapPos().y), 0.35f);
        cam.fieldOfView = currentFOV;

        gapExplorer.MoveLeft(speedToMovePan * -PlayerInput.GetMouseX());


        gapExplorer.MoveIn(speedToMoveInOut * -PlayerInput.GetMouseY());

        //gapExplorer.SetFOV(currentFOV);

        //float mousePosX = cam.ScreenToViewportPoint(PlayerInput.GetMousePos()).x;

        //float speedToMove = 0;

        //if (mousePosX < mouseSideThreshold)
        //{

        //    speedToMove = maxPanSpeed * Time.deltaTime;
        //    gapExplorer.MoveLeft(speedToMove);

        //    //transform.position = gapExplorer.GetHandPosWorldSpace();
        //} else if (mousePosX > 1 - mouseSideThreshold)
        //{
        //    speedToMove = maxPanSpeed * Time.deltaTime;
        //    gapExplorer.MoveRight(speedToMove);

        //    //transform.position = gapExplorer.GetHandPosWorldSpace();
        //}
    }
Esempio n. 20
0
 public virtual void Fire(Vector3 direction)
 {
     rb.AddForce(direction * force, ForceMode.Impulse);
     source = GetComponent <Cinemachine.CinemachineImpulseSource>();
     source.GenerateImpulse(Camera.main.transform.forward);
 }
Esempio n. 21
0
 private void DoShake()
 {
     impulseSource.GenerateImpulse();
 }
Esempio n. 22
0
 void camShake()
 {
     //효과음
     imsr.GenerateImpulse();
 }
Esempio n. 23
0
 internal void HitSimple()
 {
     CameraShaker.GenerateImpulse(this.transform.position);
 }
Esempio n. 24
0
    private void FixedUpdate()
    {
        if (!control)
        {
            return;
        }
        bool emptySouldPlay = false;

        if (Input.GetKey(KeyCode.W) && !backGunOverHeat)
        {
            if (CanFire(lastFireBack, backFireFreq))
            {
                rb.AddForceAtPosition(transform.up * (backForce + currentBackForceIncrease), LBack.position, ForceMode2D.Impulse);
                rb.AddForceAtPosition(transform.up * (backForce + currentBackForceIncrease), RBack.position, ForceMode2D.Impulse);
                lastFireBack = Time.time;

                bulletFire.FireMinigun(LBack.position, -transform.up, backSpeed, 0, backGunDamage);
                bulletFire.FireMinigun(RBack.position, -transform.up, backSpeed, 1, backGunDamage);
            }

            foreach (ParticleSystem ps in mainGunEffects)
            {
                if (!ps.isPlaying)
                {
                    ps.Play();
                }
            }

            backShake.GenerateImpulse(-transform.up);

            currentBackForceIncrease += backgunForceIncreaseOvertime * Time.fixedDeltaTime;
            if (currentBackForceIncrease > backgunForceIncreaseOvertimeMax)
            {
                currentBackForceIncrease = backgunForceIncreaseOvertimeMax;
            }

            if (backGunSE.audioSource.volume < 0.5 && backGunSE.fadeSpeed <= 0)
            {
                backGunSE.FadeTo(backGunFadeInTime, 0.5f);
            }

            backGunHeat += backGunHeatIncrease * Time.fixedDeltaTime;
            backGunSE.audioSource.pitch = Mathf.Lerp(backGunSoundPitchMinHeat, backGunSoundPitchMaxHeat, backGunHeat / backGunMaxHeat);
            if (backGunHeat > backGunMaxHeat)
            {
                backGunHeat     = backGunMaxHeat;
                backGunOverHeat = true;
                backGunOverheatSE.Play();
                backGunOverheatAlarmSE.Play();
            }
        }
        else
        {
            if (backGunSE.audioSource.volume > 0 && backGunSE.fadeSpeed >= 0)
            {
                backGunSE.FadeTo(backGunFadeOutTime, 0);
            }

            foreach (ParticleSystem ps in mainGunEffects)
            {
                ps.Stop();
            }


            currentBackForceIncrease -= backgunForceDecreaseOvertime * Time.fixedDeltaTime;
            if (currentBackForceIncrease < 0)
            {
                currentBackForceIncrease = 0;
            }

            if (backGunOverHeat)
            {
                backGunHeat -= backGunOverHeatDecrease * Time.fixedDeltaTime;
                if (backGunHeat <= 0)
                {
                    backGunOverHeat = false;
                    backGunHeat     = 0;
                }
            }
            else
            {
                backGunHeat -= backGunHeatDecrease * Time.fixedDeltaTime;
                if (backGunHeat <= 0)
                {
                    backGunHeat = 0;
                }
            }
        }
        if (Input.GetKey(KeyCode.A))
        {
            if (CanFire(lastFireLeft, leftFireFreq) && Time.time - lastLeftGunReload > sideGunReloadTime && leftGunMag > 0)
            {
                rb.AddForceAtPosition(transform.right * midForce * Time.fixedDeltaTime, LMid.position, ForceMode2D.Impulse);
                lastFireLeft = Time.time;

                bulletFire.Fire(LMid.position, -transform.right, sideSpeed, BulletType.handgun, sideGunDamage);
                sideShake.GenerateImpulse();
                sideGunSE.pitch = Mathf.Lerp(sideGunSoundPitchMax, sideGunSoundPitchMin, (float)leftGunMag / sideGunSlot);
                sideGunSE.Play();

                leftGunMag -= 1;
                if (leftGunMag == 0)
                {
                    lastLeftGunReload = Time.time;
                    leftGunMag        = sideGunSlot;
                }
            }
            else if (Time.time - lastLeftGunReload < sideGunReloadTime)
            {
                emptySouldPlay = true;
            }
        }
        if (Input.GetKey(KeyCode.D))
        {
            if (CanFire(lastFireRight, rightFireFreq) && Time.time - lastRightGunReload > sideGunReloadTime && rightGunMag > 0)
            {
                rb.AddForceAtPosition(-transform.right * midForce * Time.fixedDeltaTime, RMid.position, ForceMode2D.Impulse);
                lastFireRight = Time.time;

                bulletFire.Fire(RMid.position, transform.right, sideSpeed, BulletType.handgun, sideGunDamage);
                sideShake.GenerateImpulse();
                sideGunSE.pitch = Mathf.Lerp(sideGunSoundPitchMax, sideGunSoundPitchMin, (float)rightGunMag / sideGunSlot);
                sideGunSE.Play();

                rightGunMag -= 1;
                if (rightGunMag == 0)
                {
                    lastRightGunReload = Time.time;
                    rightGunMag        = sideGunSlot;
                }
            }
            else if (Time.time - lastRightGunReload < sideGunReloadTime)
            {
                emptySouldPlay = true;
            }
        }
        if (Input.GetKey(KeyCode.S))
        {
            if (CanFire(lastFireFront, frontFireFreq) && Time.time - lastFrontGunReload > frontGunReloadTime && frontGunMag > 0)
            {
                rb.AddForceAtPosition(-transform.up * frontForce, LFront.position, ForceMode2D.Impulse);
                rb.AddForceAtPosition(-transform.up * frontForce, RFront.position, ForceMode2D.Impulse);
                lastFireFront = Time.time;

                bulletFire.Fire(LFront.position, transform.up, frontSpeed, BulletType.shotgun, frontGunDamage);
                bulletFire.Fire(RFront.position, transform.up, frontSpeed, BulletType.shotgun, frontGunDamage);

                frontShake.GenerateImpulse(transform.up);
                frontGunSE.pitch = Mathf.Lerp(frontGunSoundPitchMax, frontGunSoundPitchMin, (float)frontGunMag / frontGunSlot);
                frontGunSE.Play();

                frontGunMag -= 1;
                if (frontGunMag == 0)
                {
                    lastFrontGunReload = Time.time;
                    frontGunMag        = frontGunSlot;
                }
            }
            else if (Time.time - lastFrontGunReload < frontGunReloadTime)
            {
                emptySouldPlay = true;
            }
        }


        if (Input.GetMouseButton(0))
        {
            if (CanFire(lastFireMain, mainFireFreq) && Time.time - lastMainGunReload > mainGunReloadTime && mainGunMag > 0)
            {
                rb.AddForceAtPosition(-mainGun.transform.up * mainForce, MainFire.position, ForceMode2D.Impulse);
                lastFireMain = Time.time;

                bulletFire.Fire(MainFire.position, mainGun.transform.up, mainSpeed, BulletType.maingun, mainGunDamage);
                mainShake.GenerateImpulse();
                mainGunSE.pitch = Mathf.Lerp(mainGunSoundPitchMax, mainGunSoundPitchMin, (float)mainGunMag / mainGunSlot);
                mainGunSE.Play();

                mainGunMag -= 1;
                if (mainGunMag == 0)
                {
                    lastMainGunReload = Time.time;
                    mainGunMag        = mainGunSlot;
                }
            }
            else if (Time.time - lastMainGunReload < mainGunReloadTime)
            {
                emptySouldPlay = true;
            }
        }

        if (emptySouldPlay && !emptySE.isPlaying)
        {
            emptySE.Play();
        }
        else if (!emptySouldPlay && emptySE.isPlaying)
        {
            emptySE.Stop();
        }

        BoundaryVelocityLimit();
    }
Esempio n. 25
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (IsHeld == true)
        {
            return;
        }

        if (IsPlayer)
        {
            RatBrain brain = GetComponent <RatBrain>();
            if (brain.IsYote == false)
            {
                return;
            }
        }

        if (_killMode == true)
        {
            Debug.Log("killhit " + collision.collider.gameObject.name);
        }

        if (collision.collider.CompareTag("Player") && _killMode && Kills)
        {
            RatPlayer yeeter = this.LastYeeter.GetComponent <RatPlayer>();
            RatPlayer hit    = collision.collider.GetComponent <RatPlayer>();
            hit.Kill();
            if (hit != yeeter)
            {
                yeeter.AwardPoint();
            }
            Cinemachine.CinemachineImpulseSource impulse = GetComponent <Cinemachine.CinemachineImpulseSource>();
            impulse?.GenerateImpulse(this.MyRigidbody.velocity);
            AudioManager.Instance.PlaySound(HitSFX, this.transform.position);

            if (!IsPlayer)
            {
                PoolManager.Instance.releaseObject(this.gameObject);
            }

            Cloud.Spawn(collision.contacts[0].point, Cloud.Size.Large);
            _killMode = false;
        }
        else
        {
            if (_killMode)
            {
                AudioManager.Instance.PlaySound(HitGroundSFX, collision.contacts[0].point, AudioManager.MixerGroup.SFX, 0.8f);
                Cloud.Spawn(collision.contacts[0].point, Cloud.Size.Small);
            }
            _killMode = false;
        }


        if (SpinOnThrow)
        {
            this.Animator?.Play("ItemSpin");
        }
        else
        {
            this.Animator?.Play("ItemIdle");
        }

        if (collision.collider.CompareTag("Planet"))
        {
            var r2d = GetComponent <Rigidbody2D>();
            r2d.velocity = Vector3.zero;
            r2d.Sleep();
        }

        if (IsPlayer)
        {
            ReleaseAndSetKinematic();
        }
    }
Esempio n. 26
0
 // Start is called before the first frame update
 void Start()
 {
     screenShake = GetComponent <Cinemachine.CinemachineImpulseSource>();
     screenShake.GenerateImpulse();
 }
Esempio n. 27
0
 private void Shake(float power)
 {
     shakeSource.m_ImpulseDefinition.m_AmplitudeGain = Mathf.Lerp(0.05f, .5f, power / 100);
     shakeSource.GenerateImpulse();
 }
Esempio n. 28
0
    private void FixedUpdate()
    {
        if (currentPhase == 0)
        {
            fightStatus.isInvincible = true;
            Aiming();
            if (Time.time - startTime > prepareTime)
            {
                currentPhase    = 1;
                changePhaseTime = Time.time;
                actionTime      = Time.time;
            }
        }
        else if (currentPhase == 1)
        {
            fightStatus.isInvincible = false;
            Aiming();
            float actionTimeDiff = Time.time - actionTime;
            // phase 1.action 1
            if (actionTimeDiff < 15)
            {
                bool reach = MoveToTarget(normalMoveSpeed, normalMoveGoal);

                if (reach)
                {
                    normalMoveGoal = normalMoveBound.GetRandomPosInBound();
                }

                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
            }
            // phase 1.action 2
            else if (actionTimeDiff >= 15 && actionTimeDiff < 18)
            {
                bool reach = MoveToTarget(recenterSpeed, Vector3.zero);
            }
            // phase 1.action 3
            else if (actionTimeDiff >= 18 && actionTimeDiff < 28)
            {
                bool fired = FixedPatternFire(ref lastRotateFire, rotateFireFreq, rotatePattern1, rotateBullet, rotateBulletSpeed, rotateBulletIncreaseSpeed);
                if (fired)
                {
                    lastRotateFire = -100; // reset fire time
                    FixedPatternFire(ref lastRotateFire, rotateFireFreq, rotatePattern2, rotateBullet, rotateBulletSpeed, rotateBulletIncreaseSpeed);

                    if (fired)
                    {
                        laser2SE.Play();
                    }
                }
            }
            else if (actionTimeDiff >= 28 && actionTimeDiff < 31)
            {
            }
            // reset phase 1
            else
            {
                actionTime = Time.time;
            }

            if (fightStatus.getHP() <= phase2HP)
            {
                changePhaseTime = Time.time;
                actionTime      = Time.time;
                currentPhase    = 2;
                explosionSE.Play();
                haloEffect.StartScaleUp();
                moonShake.GenerateImpulse();
                fightStatus.isInvincible = true;
            }
        }
        else if (currentPhase == 2)
        {
            Aiming();
            float actionTimeDiff = Time.time - actionTime;

            if (actionTimeDiff > changePhaseInvincible)
            {
                fightStatus.isInvincible = false;
            }

            if (actionTimeDiff < 3)
            {
                bool reach = MoveToTarget(recenterSpeed, Vector3.zero);
            }
            else if (actionTimeDiff >= 3 && actionTimeDiff < 13)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount, randomFireDistance, transform.position);
                if (!loopSE.isPlaying)
                {
                    loopSE.Play();
                }
            }
            else if (actionTimeDiff >= 13 && actionTimeDiff < 19)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq, vortexPattern, vortexBullet1, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else if (actionTimeDiff >= 19 && actionTimeDiff < 25)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq, vortexPattern, vortexBullet2, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else
            {
                if (loopSE.isPlaying)
                {
                    loopSE.Stop();
                }
                actionTime = Time.time;
            }

            if (fightStatus.getHP() <= phase3HP)
            {
                if (loopSE.isPlaying)
                {
                    loopSE.Stop();
                }
                changePhaseTime      = Time.time;
                actionTime           = Time.time;
                currentPhase         = 3;
                currentEdgeMoveIndex = 0;
                explosionSE.Play();
                haloEffect.StartScaleUp();
                moonShake.GenerateImpulse();

                fightStatus.isInvincible = true;
            }
        }
        else if (currentPhase == 3)
        {
            float actionTimeDiff = Time.time - actionTime;
            Aiming();
            if (actionTimeDiff > changePhaseInvincible)
            {
                fightStatus.isInvincible = false;
            }

            if (actionTimeDiff <= 3)
            {
                // pause 3s
            }
            else if (actionTimeDiff >= 3 && actionTimeDiff < 13)
            {
                bool reach = MoveToTarget(edgeMoveSpeed, edgeMovePositions[currentEdgeMoveIndex].position);

                if (reach)
                {
                    currentEdgeMoveIndex = (currentEdgeMoveIndex + 1) % edgeMovePositions.Length;
                }

                bool fired = FixedPatternFire(ref lastqRotateFire, qrotateFireFreq, quickRotatePattern1, rotateBullet, qrotateBulletSpeed, qrotateBulletIncreaseSpeed);
                if (fired)
                {
                    laser2SE.Play();
                }
            }
            else if (actionTimeDiff >= 13 && actionTimeDiff < 16)
            {
                // pause 3s
            }
            else if (actionTimeDiff >= 16 && actionTimeDiff < 26)
            {
                bool fired = FixedPatternFire(ref lastqRotateFire, qrotateFireFreq, quickRotatePattern1, rotateBullet, qrotateBulletSpeed, qrotateBulletIncreaseSpeed);
                if (fired)
                {
                    laser2SE.Play();
                }
                fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq, vortexPattern, vortexBullet2, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else if (actionTimeDiff >= 26 && actionTimeDiff < 29)
            {
                // pause 3s
            }
            else if (actionTimeDiff >= 29 && actionTimeDiff < 39)
            {
                bool reach = MoveToTarget(edgeMoveSpeed, edgeMovePositions[currentEdgeMoveIndex].position);

                if (reach)
                {
                    currentEdgeMoveIndex = (currentEdgeMoveIndex + 1) % edgeMovePositions.Length;
                }

                bool fired = FixedPatternFire(ref lastRotateFire, rotateFireFreq, quickRotatePattern2, rotateBullet, rotateBulletSpeed, rotateBulletIncreaseSpeed);
                if (fired)
                {
                    laser2SE.Play();
                }
            }
            else if (actionTimeDiff >= 39 && actionTimeDiff < 42)
            {
                // pause 3s
            }
            else if (actionTimeDiff >= 42 && actionTimeDiff < 52)
            {
                bool fired = FixedPatternFire(ref lastqRotateFire, qrotateFireFreq, quickRotatePattern2, rotateBullet, qrotateBulletSpeed, qrotateBulletIncreaseSpeed);
                if (fired)
                {
                    laser2SE.Play();
                }
                fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq, vortexPattern, vortexBullet1, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else
            {
                actionTime = Time.time;
            }

            if (fightStatus.getHP() <= 0)
            {
                changePhaseTime      = Time.time;
                actionTime           = Time.time;
                currentPhase         = 4;
                currentEdgeMoveIndex = 0;
                explosionSE.Play();
                haloEffect.StartScaleUp();
                moonShake.GenerateImpulse();
                endPhaseSound.Play();
            }
        }
        else if (currentPhase == 4)
        {
            float actionTimeDiff = Time.time - actionTime;
            AimingPhase4();
            if (actionTimeDiff < 3)
            {
                bool reach = MoveToTarget(recenterSpeed, Vector3.zero);
            }
            else if (actionTimeDiff >= 3 && actionTimeDiff < 18)
            {
                if (!loopSE.isPlaying)
                {
                    loopSE.Play();
                }
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount, randomFireDistance, transform.position);
            }
            else if (actionTimeDiff >= 18 && actionTimeDiff < 21)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount, randomFireDistance, transform.position);
            }
            else if (actionTimeDiff >= 21 && actionTimeDiff < 36)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount - 1, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq * 1.3f, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
            }
            else if (actionTimeDiff >= 36 && actionTimeDiff < 39)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount - 1, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq * 1.3f, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
            }
            else if (actionTimeDiff >= 39 && actionTimeDiff < 49)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount - 2, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq * 1.3f, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
                fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq * 1.6f, vortexPattern, vortexBullet1, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else if (actionTimeDiff >= 49 && actionTimeDiff < 51)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount - 2, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq * 1.3f, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
                fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq * 1.6f, vortexPattern, vortexBullet1, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
            }
            else if (actionTimeDiff >= 51 && actionTimeDiff < 58)
            {
                RandomFire(ref lastRandomFire, randomFireFreq, randomBullet, randomBulletSpeed, randomBulletIncreaseSpeed, randomFireCount - 2, randomFireDistance, transform.position);
                bool fired = FixedPatternFire(ref lastnormalFire, normalFireFreq * 1.3f, normalPattern, normalBullet, normalBulletSpeed, normalBulletIncreaseSpeed);
                if (fired)
                {
                    laser3SE.Play();
                }
                fired = FixedPatternFire(ref lastVortexFire, vortexFireFreq * 1.6f, vortexPattern, vortexBullet1, vortexBulletSpeed, vortexBulletIncreaseSpeed);
                if (fired)
                {
                    laser1SE.Play();
                }
                fired = FixedPatternFire(ref lastRotateFire, rotateFireFreq * 1.3f, rotatePattern2, rotateBullet, rotateBulletSpeed * 0.6f, rotateBulletIncreaseSpeed);
                if (fired)
                {
                    laser2SE.Play();
                }
            }

            if (actionTimeDiff < 58)
            {
                moonShakeLoop.GenerateImpulse();
            }

            sr.color = Color.Lerp(Color.white, endPhaseColor, actionTimeDiff / 58.0f);

            if (actionTimeDiff >= 58)
            {
                if (loopSE.isPlaying)
                {
                    loopSE.Stop();
                }
                changePhaseTime      = Time.time;
                actionTime           = Time.time;
                currentEdgeMoveIndex = 0;
                explosionSE.Play();
                currentPhase = 5;
                haloEffect.StartScaleUp();
                moonShakeEnd.GenerateImpulse();
                whiteScreen.gameObject.SetActive(true);
                player.GetComponent <FightStatus>().isInvincible = true;
            }
        }
        else if (currentPhase == 5)
        {
            float actionTimeDiff = Time.time - actionTime;
            if (actionTimeDiff > 5)
            {
                transform.rotation = Quaternion.identity;
                launchPad.SetActive(true);
                sr.color = Color.white;
                endPhaseSound.Stop();
            }
        }
    }