public static void ExcuteUserFixedUpdate(Fix64 time) { foreach (var pair in bodySortedList) { PBody2D body = pair.Value; body.Step(time); } }
public static void ReadNativeBody(PBody2D body2D) { if (!initialized) { Initialize(); } NativeParallel2D.GetTransform(body2D.IntPointer, ref body2D.position, ref body2D.angle); NativeParallel2D.GetVelocity(body2D.IntPointer, ref body2D.linearVelocity, ref body2D.angularVelocity); }
public static void ApplyAngularImpulse(PBody2D body, Fix64 impulse) { if (!initialized) { Initialize(); } NativeParallel2D.ApplyAngularImpulse(body.IntPointer, impulse); }
public static void ApplyLinearImpulseToCenter(PBody2D body, Fix64Vec2 impulse) { if (!initialized) { Initialize(); } NativeParallel2D.ApplyLinearImpulseToCenter(body.IntPointer, impulse); }
public static void ApplyTorque(PBody2D body, Fix64 torque) { if (!initialized) { Initialize(); } NativeParallel2D.ApplyTorque(body.IntPointer, torque); }
public static void ApplyForceToCenter(PBody2D body, Fix64Vec2 force) { if (!initialized) { Initialize(); } NativeParallel2D.ApplyForceToCenter(body.IntPointer, force); }
public static void UpdateBodyVelocity(PBody2D body, Fix64Vec2 linearVelocity, Fix64 angularVelocity) { if (!initialized) { Initialize(); } NativeParallel2D.UpdateBodyVelocity(body.IntPointer, linearVelocity, angularVelocity); }
public static void UpdateBodyTransForm(PBody2D body, Fix64Vec2 pos, Fix64 angle) { if (!initialized) { Initialize(); } NativeParallel2D.UpdateBodyTransform(body.IntPointer, pos, angle); }
//2D fixture public static PFixture2D AddFixture(PBody2D body2D, PShape2D shape2D, Fix64 density) { if (!initialized) { Initialize(); } IntPtr m_NativeObject = NativeParallel2D.AddFixtureToBody(body2D.IntPointer, shape2D.IntPointer, density); return(new PFixture2D(m_NativeObject)); }
static void ExportFromEngine() { ExportContacts(); PrepareContacts(); foreach (var pair in bodySortedList) { PBody2D body = pair.Value; body.ReadNative(); } }
public static void DestoryBody(PBody2D body2D, IParallelRigidbody2D rigidBody2D) { if (!initialized) { Initialize(); } if (bodySortedList.ContainsKey(body2D.BodyID)) { bodySortedList.Remove(body2D.BodyID); } NativeParallel2D.DestroyBody(internalWorld.IntPointer, body2D.IntPointer); }
public static void UpdateBodyProperties(PBody2D body, int bodyType, Fix64 linearDamping, Fix64 angularDamping, bool fixedRotation, Fix64 gravityScale) { if (!initialized) { Initialize(); } NativeParallel2D.UpdateBodyProperties(body.IntPointer, bodyType, linearDamping, angularDamping, fixedRotation, gravityScale); }
//============================== Unity Events ============================== void Awake() { ParallelPhysicsController2D pSettings = FindObjectOfType <ParallelPhysicsController2D>(); if (pSettings == null) { return; } pSettings.InitIfNecessary(); parallelFixedUpdates = GetComponents <IParallelFixedUpdate>(); parallelCollisions = GetComponents <IParallelCollision2D>(); parallelTriggers = GetComponents <IParallelTrigger2D>(); pTransform.ImportFromUnity(); colliders = GetComponentsInChildren <ParallelCollider2D>(); _body2D = Parallel2D.AddBody( (int)bodyType, (Fix64Vec2)pTransform.position, pTransform.rotation.GetZAngle(), linearDampling, angularDamping, fixedRotation, gravityScale, this); _bodyID = _body2D.BodyID; foreach (ParallelCollider2D collider in colliders) { collider.SetRootGameObject(gameObject); PShape2D shape = collider.CreateShape(gameObject); if (shape == null) { Debug.LogError("Failed to create collider shape"); continue; } PFixture2D fixture2D = Parallel2D.AddFixture(_body2D, shape, (Fix64)1); collider.ReceiveFixture(fixture2D); } }
//2D body public static PBody2D AddBody (int bodyType, Fix64Vec2 position, Fix64 angle, Fix64 linearDamping, Fix64 angularDamping, bool fixedRotation, Fix64 gravityScale, IParallelRigidbody2D rigidBody2D) { if (!initialized) { Initialize(); } UInt16 bodyID = 0; IntPtr m_NativeObject = NativeParallel2D.CreateBody( internalWorld.IntPointer, bodyType, position, angle, linearDamping, angularDamping, fixedRotation, gravityScale, ref bodyID); PBody2D body2D = new PBody2D(m_NativeObject, bodyID, rigidBody2D as ParallelRigidbody2D, bodyExportSize); bodySortedList[bodyID] = body2D; ReadNativeBody(body2D); return(body2D); }
public static void ExcuteUserCallbacks(Fix64 time) { //call contact exit callback PContact2DWrapper currentWrapper = _exitContactWrapperHead; for (int i = 0; i < _exitContactCount; i++) { PContact2D contact = currentWrapper.contact; PBody2D body1 = bodySortedList[contact.Body1ID]; PBody2D body2 = bodySortedList[contact.Body2ID]; if (contact.IsTrigger) { body1.RigidBody.OnParallelTriggerExit(body2.RigidBody); body2.RigidBody.OnParallelTriggerExit(body1.RigidBody); } else { _tempCollision.SetContact(contact, body2.RigidBody); body1.RigidBody.OnParallelCollisionExit(_tempCollision); _tempCollision.SetContact(contact, body1.RigidBody); body2.RigidBody.OnParallelCollisionExit(_tempCollision); } contact.state = ContactState.Inactive; currentWrapper = currentWrapper.next; } //call contact stay callback currentWrapper = _allContactWrapperHead; for (int i = 0; i < _allContactCount; i++) { PContact2D contact = currentWrapper.contact; if (contact.state == ContactState.Active) { PBody2D body1 = bodySortedList[contact.Body1ID]; PBody2D body2 = bodySortedList[contact.Body2ID]; if (contact.IsTrigger) { body1.RigidBody.OnParallelTriggerStay(body2.RigidBody); body2.RigidBody.OnParallelTriggerStay(body1.RigidBody); } else { _tempCollision.SetContact(contact, body2.RigidBody); body1.RigidBody.OnParallelCollisionStay(_tempCollision); _tempCollision.SetContact(contact, body1.RigidBody); body2.RigidBody.OnParallelCollisionStay(_tempCollision); } } currentWrapper = currentWrapper.next; } //call contact enter callback currentWrapper = _enterContactWrapperHead; for (int i = 0; i < _enterContactCount; i++) { PContact2D contact = currentWrapper.contact; PBody2D body1 = bodySortedList[contact.Body1ID]; PBody2D body2 = bodySortedList[contact.Body2ID]; if (contact.IsTrigger) { body1.RigidBody.OnParallelTriggerEnter(body2.RigidBody); body2.RigidBody.OnParallelTriggerEnter(body1.RigidBody); } else { _tempCollision.SetContact(contact, body2.RigidBody); body1.RigidBody.OnParallelCollisionEnter(_tempCollision); _tempCollision.SetContact(contact, body1.RigidBody); body2.RigidBody.OnParallelCollisionEnter(_tempCollision); } contact.state = ContactState.Active; currentWrapper = currentWrapper.next; } }