public override void Enter() { this.timeInState = 0f; this.hasReportedDeath = false; impulseSource.GenerateImpulse(); slime.effectsAudioSource.PlayOneShot(deathSound); }
public override void Enter() { timeInState = 0f; bats.Clear(); SpawnBats(); impulseSource.GenerateImpulse(); }
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(); } } } }
private void GenerateShake() { if (impulseSource) { impulseSource.GenerateImpulse(transform.forward); } }
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); }
private void Shoot() { SpawnProjectile(); AddRecoil(); ApplyKnockback(); shakeSource.GenerateImpulse(Vector2.one); nextFireTime = Time.time + 60f / firerate; }
// 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); }
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(); } }
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); } } }
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; }
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); }
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; } }
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); } } }
// 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); } }
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(); //} }
public virtual void Fire(Vector3 direction) { rb.AddForce(direction * force, ForceMode.Impulse); source = GetComponent <Cinemachine.CinemachineImpulseSource>(); source.GenerateImpulse(Camera.main.transform.forward); }
private void DoShake() { impulseSource.GenerateImpulse(); }
void camShake() { //효과음 imsr.GenerateImpulse(); }
internal void HitSimple() { CameraShaker.GenerateImpulse(this.transform.position); }
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(); }
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(); } }
// Start is called before the first frame update void Start() { screenShake = GetComponent <Cinemachine.CinemachineImpulseSource>(); screenShake.GenerateImpulse(); }
private void Shake(float power) { shakeSource.m_ImpulseDefinition.m_AmplitudeGain = Mathf.Lerp(0.05f, .5f, power / 100); shakeSource.GenerateImpulse(); }
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(); } } }