private static void TryToApplyForce(float force, Collider collider, ForceType type, float3 origin) { // if there is no physicsable interface - don't do anything else IPhysicsObject pObject = collider.GetComponent <IPhysicsObject>(); if (pObject == null) { return; } switch (type) { case ForceType.Impulse: pObject.AddImpulseForce(force, origin); break; case ForceType.Force: pObject.AddForce(force); break; case ForceType.Freeze: Debug.LogError("Force: Freeze type is not implemented."); break; } }
/// <summary> /// Generate and apply force to the object /// </summary> /// <param name="component">Object to apply forces</param> /// <param name="secondElapsed">Seconds since last update</param> public void UpdateForce(IPhysicsObject component, float secondElapsed) { Vector3 force = component.Position - other.Position; //Calculate magnitude of the force float magnitude = force.Length(); //l magnitude = (magnitude - restLength) * springConstant; //|l-l0| force.Normalize(); force *= -magnitude; component.AddForce(force); }
/// <summary> /// Generate and apply force to the object /// </summary> /// <param name="component">Object to apply forces</param> /// <param name="secondElapsed">Seconds since last update</param> public void UpdateForce(IPhysicsObject component, float secondElapsed) { Vector3 force = component.Velocity; if (force != Vector3.Zero) { float dragCoeff = force.Length(); dragCoeff = k1 * dragCoeff + k2 * dragCoeff * dragCoeff; force.Normalize(); force *= -dragCoeff; component.AddForce(force); } }
public void ApplyTo(IPhysicsObject obj) { obj.AddForce(force); }
/// <summary> /// Generate and apply force to the object /// </summary> /// <param name="component">Object to apply forces</param> /// <param name="secondElapsed">Seconds since last update</param> public void UpdateForce(IPhysicsObject component, float secondElapsed) { //if has finite mass component.AddForce(gravity * component.Mass); }
public void AddForce(Force f) { physicsObject.AddForce(f); }