Example #1
0
 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);
             }
         }
     }
 }
Example #2
0
    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);
        }
    }