Exemplo n.º 1
0
    // ========================================================================

    public void TryAction(ObjSpringable character, float collisionAngle)
    {
        if (Mathf.Abs(collisionAngle - topAngle) > 0.1)
        {
            return;
        }
        DoAction(character);
    }
Exemplo n.º 2
0
    public void DoAction(ObjSpringable obj)
    {
        Rigidbody rigidbody = obj.GetComponent <Rigidbody>();

        Vector3 velocityRaw = (topPositionObj.transform.position - transform.position).normalized * springPower;

        rigidbody.velocity = new Vector3(
            Mathf.Abs(velocityRaw.x) > springPower / 3 ? velocityRaw.x * Utils.physicsScale : rigidbody.velocity.x,
            Mathf.Abs(velocityRaw.y) > springPower / 3 ? velocityRaw.y * Utils.physicsScale : rigidbody.velocity.y,
            Mathf.Abs(velocityRaw.z) > springPower / 3 ? velocityRaw.z * Utils.physicsScale : rigidbody.velocity.z
            );

        // rigidbody.position += rigidbody.velocity / 60F;

        audioSource.time = 0;
        audioSource.Play();

        switch (type)
        {
        case SpringType.Yellow:
            animator.Play("Yellow Hit");
            break;

        case SpringType.Red:
            animator.Play("Red Hit");
            break;
        }

        Character character = obj.GetComponent <Character>();

        if (character != null)
        {
            if (!keepGrounded)
            {
                character.stateCurrent = "air";
                character.AnimatorPlay("Spring");
                character.spriteAnimatorSpeed = 1;
            }
            else
            {
                character.GroundSpeedSync();
            }
        }
    }
Exemplo n.º 3
0
    public void OnCollisionEnter(Collision collision)
    {
        GameObject other = collision.gameObject;

        ObjSpringable[] characters = other.GetComponentsInParent <ObjSpringable>();
        if (characters.Length == 0)
        {
            return;
        }
        ObjSpringable character = characters[0];

        if (character.GetComponent <Character>() != null && topAngle == 0)
        {
            return;
        }

        ContactPoint hit            = collision.GetContact(0);
        float        collisionAngle = (
            Quaternion.FromToRotation(Vector3.up, hit.normal).eulerAngles.z
            + 180
            ) % 360;

        TryAction(character, collisionAngle);
    }