Esempio n. 1
0
 private void Init()
 {
     rightHandTrapSource = InstantiateTrapSource();
     leftHandTrapSource  = InstantiateTrapSource();
     leftHandState       = ControllerAndTrapSourceState.Initial;
     rightHandState      = ControllerAndTrapSourceState.Initial;
 }
Esempio n. 2
0
    private void UpdateControllerStateAndTrap(TriggerState triggerState, Vector2 touchpadAxis, Vector3?controllerPosition, Vector3?controllerDirection,
                                              ref GameObject trapSource, ref GameObject placedTrapSource, ref ControllerAndTrapSourceState state, ref Vector3 throwingStartPosition, ref float throwingStartTime,
                                              ref Vector3 throwVelocity, ref Vector3 throwPosition, ref float throwTime)
    {
        if (controllerPosition == null || controllerDirection == null)
        {
            // Controller isn't active
            return;
        }

        switch (state)
        {
        case ControllerAndTrapSourceState.Initial:
            UpdateTrapSourcePosition(ref trapSource, controllerPosition.Value, controllerDirection.Value, false);
            if (triggerState.down)
            {
                state = ControllerAndTrapSourceState.Placing;
            }
            break;

        case ControllerAndTrapSourceState.Placing:
            UpdateTrapSourcePosition(ref trapSource, controllerPosition.Value, controllerDirection.Value, true);
            if (triggerState.up)
            {
                if (NextSurfacePosition(controllerPosition.Value, controllerDirection.Value) != null)
                {
                    state            = ControllerAndTrapSourceState.Placed;
                    placedTrapSource = trapSource;
                    trapSource       = null;
                }
                else
                {
                    state = ControllerAndTrapSourceState.Initial;
                }
            }
            break;

        case ControllerAndTrapSourceState.Placed:
            if (triggerState.down)
            {
                trapSource = InstantiateTrapSource();
                MakeTrapSolid(trapSource);
                throwingStartPosition = controllerPosition.Value;
                throwingStartTime     = Time.time;
                state = ControllerAndTrapSourceState.Throwing;
            }
            break;

        case ControllerAndTrapSourceState.Throwing:
            UpdateTrapSourcePosition(ref trapSource, controllerPosition.Value, controllerDirection.Value, false);
            if (triggerState.up)
            {
                Vector3 direction = controllerPosition.Value - throwingStartPosition;
                float   speed     = direction.magnitude / (Time.time - throwingStartTime);

                throwVelocity = direction / (Time.time - throwingStartTime) * 10;
                throwPosition = controllerPosition.Value;
                throwTime     = Time.time;

                state = ControllerAndTrapSourceState.Thrown;
                trapSource.AddComponent <Rigidbody>();
                trapSource.GetComponent <Rigidbody>().velocity = throwVelocity;
                trapSource.GetComponent <Rigidbody>().mass     = 1;
            }
            break;

        case ControllerAndTrapSourceState.Thrown:
            if (maxThrowDuration < Time.time - throwTime)
            {
                state = ControllerAndTrapSourceState.Placed;
                Object.Destroy(trapSource);
            }
            float currentDist = (placedTrapSource.transform.position - trapSource.transform.position).magnitude;
            float origDist    = (placedTrapSource.transform.position - throwPosition).magnitude;

            float velocityWeight = currentDist / origDist;
            if (currentDist < 1)
            {
                state = ControllerAndTrapSourceState.Arrived;
                Object.Destroy(trapSource);
            }

            if (velocityWeight > 2)
            {
                state = ControllerAndTrapSourceState.Placed;
                Object.Destroy(trapSource);
            }
            if (velocityWeight > 1)
            {
                velocityWeight = 1;
            }
            UpdateFlyingTrapSourceVelocity(ref trapSource, placedTrapSource, throwVelocity, velocityWeight);

            break;
        }
    }