public IEnumerator MoveLeg_C() { isGrounded = false; for (float i = 0; i < 1; i += Time.deltaTime * (legSpeed * Random.Range(0.8f, 1.2f))) { if (wantedTransform != null && IK.Target != null && IK.Target.transform != null) { Vector3 newPosition = Vector3.Lerp(IK.Target.transform.position, wantedTransform.transform.position + forwardOffset, i / 1f); float yPos = Mathf.Lerp(IK.Target.transform.position.y, wantedTransform.transform.position.y, i / 1f); yPos += heightCurve.Evaluate(i / 1f) * height; newPosition.y = yPos; IK.Target.transform.position = newPosition; yield return(null); } } IK.Target.transform.position = wantedTransform.transform.position + forwardOffset; isGrounded = true; if (eventOnStep != "") { FeedbackManager.SendFeedback(eventOnStep, this); } if (bumpPawnsOnGrounded) { List <PawnController> hitPawns = new List <PawnController>(); foreach (Collider c in Physics.OverlapSphere(IK.Target.transform.position, bumpPawnRadius)) { PawnController pawnController = c.GetComponentInParent <PawnController>(); if (pawnController != null && !hitPawns.Contains(pawnController)) { pawnController.Push(PushType.Light, pawnController.transform.position - IK.Target.transform.position, PushForce.Force1); hitPawns.Add(pawnController); } } } }
IEnumerator Dash_C(Vector3 _startPosition, Vector3 _endPosition) { currentUseCooldown = useCooldown; currentStackAmount--; currentDashFX = FeedbackManager.SendFeedback("event.Dash", this).GetVFX(); Vector3 i_dashDirection = _endPosition - _startPosition; ChangeState(DashState.Dashing); float i_cloneCounter = 0; for (float i = 0; i <= duration; i += Time.deltaTime) { i_cloneCounter += Time.deltaTime; if (i_cloneCounter >= 1f / clonePerSec) { GenerateClone(); i_cloneCounter = 0; } RaycastHit[] hits = Physics.SphereCastAll(linkedPawn.GetCenterPosition(), dashHitboxSize, i_dashDirection.normalized, 0.4f); foreach (RaycastHit hit in hits) { PlayerController hitPawn = hit.collider.transform.gameObject.GetComponent <PlayerController>(); if (hitPawn) { if (hitPawn != linkedPawn) { DashController dashController = hitPawn.GetComponent <DashController>(); if (dashController != null) { dashController.StopAllCoroutines(); dashController.ChangeState(DashState.None); linkedPawn.Push(PushType.Light, -i_dashDirection, PushForce.Force2); } hitPawn.Push(PushType.Light, i_dashDirection, PushForce.Force2); if (!unstoppableDash) { ChangeState(DashState.None); StopAllCoroutines(); } } } if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Environment")) { StartCoroutine(StopDash_C()); } } transform.position = Vector3.Lerp(_startPosition, _endPosition, dashSpeedCurve.Evaluate(i / duration)); yield return(null); } transform.position = _endPosition; GenerateClone(); ChangeState(DashState.None); StartCoroutine(FadePlayerSpeed()); yield return(null); }
private void OnTriggerEnter(Collider other) { if (other.gameObject.GetComponent <PawnController>()) { PawnController pawn = other.gameObject.GetComponent <PawnController>(); pawn.Damage(damageToPlayer); pawn.Push(PushType.Light, pawn.transform.position - transform.position, PushForce.Force1); } if (other.gameObject.GetComponent <EnemyBehaviour>()) { EnemyBehaviour ennemy = other.gameObject.GetComponent <EnemyBehaviour>(); ennemy.OnHit(null, Vector3.zero, null, damageToPlayer, DamageSource.RedBarrelExplosion); } }