public void Hurt() { if (canBeHurt) { #if !UNITY_EDITOR AndroidPlugin.StartVibrator(180); #endif carpeAnimator.SetTrigger("Hit"); carpeAnimator.SetBool("Recovering", true); hurtSource.PlayOneShot(hurtSounds[Random.Range(0, hurtSounds.Length - 1)]); carpeManager.UpdateMultiplier(false); foreach (Material meeesh in carpeMats) { meeesh.DOColor(Color.white, invicibilityTime / 6).SetLoops(-1, LoopType.Yoyo); } carpeState = CarpeState.hurt; canBeHurt = false; invincibilityLeft = invicibilityTime; body.velocity = Vector3.zero; aieParticles.Play(true); } }
public void Jump() { if (canJump) { jumpParticles.Play(true); whooshSource.PlayOneShot(whooshSounds[Random.Range(0, whooshSounds.Length - 1)]); RaycastHit hit; if (Physics.Raycast(new Vector3(transform.position.x, 0, transform.position.z), transform.TransformDirection(Vector3.forward), out hit, 20f)) { Debug.DrawLine(new Vector3(transform.position.x, 0, transform.position.z), transform.TransformDirection(Vector3.forward) * 150, Color.red, 5f); if (hit.collider.GetComponent <Obstacles>() != null && hit.distance < styleDetectionDistance) { carpeManager.ObstaclePassed(hit.collider.GetComponent <Obstacles>().ObstacleValue); carpeManager.IncreaseScore(Mathf.Clamp(Mathf.FloorToInt(1 / hit.distance), 0, 40)); } } carpeAnimator.SetBool("Start", true); carpeState = CarpeState.startJump; canJump = false; #if !UNITY_EDITOR AndroidPlugin.StartVibrator(40); #endif } //else if (carpeState == CarpeState.endJump || carpeState == CarpeState.startJump) //{ // RaycastHit hit; // if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity)) // { // if (hit.distance < styleDetectionDistance) // carpeManager.UpdateMultiplier(true); // } // carpeState = CarpeState.stomp; //} }
void FixedUpdate() { var xChange = transform.position.x - posDelta; if (xChange != 0 && !slideSource.isPlaying && Mathf.Abs(xChange) > .01f) { slideSource.PlayOneShot(slideSounds[Random.Range(0, slideSounds.Length - 1)]); } else if (xChange == 0 && slideSource.isPlaying) { slideSource.Stop(); } if (FastApproximately(transform.position.y, 0)) { carpeTrail.enabled = true; } else { carpeTrail.enabled = false; } switch (carpeState) { case CarpeState.floating: { if (!canJump) { canJump = true; } transform.localPosition = Vector3.LerpUnclamped(transform.localPosition, new Vector3(transform.localPosition.x, 0, 0), recoverySpeed); } break; case CarpeState.startJump: { transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(transform.localPosition.x, jumpHeight, transform.localPosition.z), jumpSpeed); if (FastApproximately(transform.localPosition.y, jumpHeight)) { carpeState = CarpeState.endJump; ploufParticles.Play(true); carpeAnimator.SetBool("Start", false); } } break; case CarpeState.endJump: { transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(transform.localPosition.x, 0, transform.localPosition.z), fallSpeed); if (FastApproximatelyPrecise(transform.localPosition.y, 0)) { canJump = true; carpeState = CarpeState.floating; } } break; case CarpeState.stomp: { transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(transform.localPosition.x, 0, transform.localPosition.z), stompSpeed); if (FastApproximately(transform.localPosition.y, 0)) { carpeState = CarpeState.floating; } } break; case CarpeState.hurt: { transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(transform.localPosition.x, 0, hurtPos.z), hurtSpeed); if (FastApproximatelyPrecise(transform.localPosition.z, -hurtForce)) { carpeState = CarpeState.recovering; } } break; case CarpeState.recovering: { if (!canJump) { canJump = true; } transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(transform.localPosition.x, 0, 0), recoverySpeed); if (FastApproximatelyPrecise(transform.localPosition.z, 0)) { carpeAnimator.SetBool("Recovering", false); carpeState = CarpeState.floating; } } break; } posDelta = transform.position.x; if (invincibilityLeft > 0) { invincibilityLeft -= Time.deltaTime; } else if (invincibilityLeft <= 0 && !canBeHurt) { int i = 0; canBeHurt = true; foreach (Material meeesh in carpeMats) { meeesh.DOKill(); meeesh.DOColor(carpeColors[i], .1f); carpeAnimator.SetBool("Recovering", false); i++; } } if (body.velocity != Vector3.zero) { body.velocity = Vector3.zero; } }