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); }
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); }
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)); } } } } }