public void CollectForcefields(
        Matrix4x4 simulationToWorldMatrix,
        ref List <SwarmShaderForcefieldState> inoutForceFieldStates)
    {
        if (currentCollectionList != null)
        {
            throw new InvalidOperationException();
        }

        currentCollectionList          = inoutForceFieldStates;
        currentSimulationToWorldMatrix = simulationToWorldMatrix;

        currentCollectionList.Clear();

        if (CollectingForcefields != null)
        {
            var eventArgs = new CollectingForcefieldsEventArgs();
            eventArgs.ForcefieldAppender = this;

            CollectingForcefields(this, eventArgs);
        }

        currentCollectionList          = null;
        currentSimulationToWorldMatrix = Matrix4x4.identity;
    }
 private void OnCollectingForcefields(
     object sender,
     CollectingForcefieldsEventArgs eventArgs)
 {
     eventArgs.ForcefieldAppender.AppendGlobalForcefield(
         ForceDirection,
         IdleForceScalar);
 }
Esempio n. 3
0
    private void OnCollectingForcefields(
        object sender,
        CollectingForcefieldsEventArgs eventArgs)
    {
        float localToWorldUniformScale =
            (transform.localToWorldMatrix.GetScale().magnitude / Mathf.Sqrt(3.0f));

        eventArgs.ForcefieldAppender.AppendSphericalForcefield(
            transform.position,
            (FalloffInnerRadius * localToWorldUniformScale),
            (FalloffOuterRadius * localToWorldUniformScale),
            IdleOutwardForceScalar);
    }
Esempio n. 4
0
    private void OnCollectingForcefields(
        object sender,
        CollectingForcefieldsEventArgs eventArgs)
    {
        float localToWorldUniformScale =
            (transform.localToWorldMatrix.GetScale().magnitude / Mathf.Sqrt(3.0f));

        eventArgs.ForcefieldAppender.AppendPlanarForcefield(
            transform.TransformPoint(LocalPosition),
            transform.TransformDirection(LocalPlaneNormal),
            (FalloffInnerRadius * localToWorldUniformScale),
            (FalloffOuterRadius * localToWorldUniformScale),
            IdleForceScalar);
    }
    private void OnCollectingForcefields(
        object sender,
        CollectingForcefieldsEventArgs eventArgs)
    {
        if ((trackedCamera != null) &&
            trackedCamera.isActiveAndEnabled)
        {
            float localToWorldUniformScale =
                (trackedCamera.transform.localToWorldMatrix.GetScale().magnitude / Mathf.Sqrt(3.0f));

            eventArgs.ForcefieldAppender.AppendSphericalForcefield(
                trackedCamera.transform.position,
                (FalloffInnerRadius * localToWorldUniformScale),
                (FalloffOuterRadius * localToWorldUniformScale),
                (-1.0f * IdleAttractionScalar));
        }
    }
    private void OnCollectingForcefields(
        object sender,
        CollectingForcefieldsEventArgs eventArgs)
    {
        var openVrSystem = OpenVR.System;

        if ((openVrSystem != null) &&
            (controllerManager != null))
        {
            foreach (GameObject controllerObject in controllerManager.objects)
            {
                SteamVR_TrackedObject trackedObject = controllerObject.GetComponent <SteamVR_TrackedObject>();

                if (trackedObject.index != SteamVR_TrackedObject.EIndex.None)
                {
                    var controllerDevice = SteamVR_Controller.Input((int)trackedObject.index);

                    if ((trackedObject != null) &&
                        trackedObject.isActiveAndEnabled &&
                        controllerDevice.valid)
                    {
                        float localToWorldUniformScale =
                            (trackedObject.transform.localToWorldMatrix.GetScale().magnitude / Mathf.Sqrt(3.0f));

                        bool  gripPressed     = controllerDevice.GetPress(EVRButtonId.k_EButton_Grip);
                        float triggerFraction = controllerDevice.GetAxis(EVRButtonId.k_EButton_SteamVR_Trigger).x;

                        eventArgs.ForcefieldAppender.AppendSphericalForcefield(
                            trackedObject.transform.position,
                            (AttractionFalloffInnerRadius * localToWorldUniformScale),
                            (AttractionFalloffOuterRadius * localToWorldUniformScale),
                            (-1.0f * (gripPressed ? GrippedAttractionScalar : IdleAttractionScalar)));

                        eventArgs.ForcefieldAppender.AppendThrustCapsuleForcefield(
                            trackedObject.transform.position,
                            (trackedObject.transform.position + (Mathf.Max(0.0001f, ThrustCoreLength) * trackedObject.transform.forward)),
                            (ThrustFalloffInnerRadius * localToWorldUniformScale),
                            (ThrustFalloffOuterRadius * localToWorldUniformScale),
                            Mathf.Lerp(IdleThrustScalar, TriggerPulledThrustScalar, triggerFraction));
                    }
                }
            }
        }
    }