Ejemplo n.º 1
0
    public static Vector3 Eval(this AnimationCurve a, Vector3 p)
    {
        Vector3 v = Vector3.zero;

        v.x = a.Eval(p.x);
        v.y = a.Eval(p.y);
        v.z = a.Eval(p.z);
        return(v);
    }
        void Second()
        {
            // Must have an owner to do animations
            if (owner == null)
            {
                return;
            }
            Quaternion lastRotation = transform.rotation;

            // Clamp bob value
            bob = Mathf.Clamp01(bob);

            // Update position spring
            positionSpring.target = info.offset;
            offset = positionSpring.Animate(offset);
            // Update shake spring
            shakeSpring.target = Vector3.zero;
            shakeOffset        = shakeSpring.Animate(shakeOffset);
            // Update recoil spring
            recoil = recoilSpring.Animate(recoil);
            // Update offset rotation towards identity
            rotation = Quaternion.Lerp(rotation, Quaternion.identity, deltaTime * settings.rotationDampening);

            // Take owners rotation as basis
            Quaternion targetRotation = owner.rotation;

            // Apply all animation rotations based on current states.
            targetRotation    *= rotation;
            targetRotation    *= Quaternion.Euler(settings.airRotation * air);
            targetRotation    *= Quaternion.Euler(settings.reloadRotation * reload);
            targetRotation    *= Quaternion.Euler(settings.sprintRotation * sprint);
            targetRotation    *= Quaternion.Euler(settings.disabledRotation * disabled);
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, deltaTime * settings.lookDampening);

            // Move to owner position + offsets
            transform.position  = owner.position + transform.rotation * offset;
            transform.position += owner.rotation * (settings.sprintOffset * sprint);
            transform.position += owner.rotation * (settings.disabledOffset * disabled);

            // Evaluate weapon bobbing curves
            Vector3 bobOffset   = Vector3.Scale(info.bobPositionOffset, curve.Eval(info.bobPositionSpeed * bobTime));
            Vector3 bobRotation = Vector3.Scale(info.bobRotationOffset, curve.Eval(info.bobRotationSpeed * bobTime));

            // Apply weapon bob on top of previous animations
            transform.Translate(bobOffset * info.bobScale * bob);
            transform.Rotate(bobRotation * info.bobScale * bob);
            // Apply recoil on top of previous animations
            transform.Rotate(info.recoilRotation * info.recoilScale * recoil);
            transform.Translate(info.recoilOffset * info.recoilScale * recoil);
            // Apply shake on top of previous animations
            transform.Translate(shakeOffset);

            // Record our current actual offset
            offsetPosition = transform.position - owner.position;
        }