private void ColProxy_CollisionEvent(CollisionProxy colA, CollisionProxy colB) { if (OnCollisionEvent != null && colA.collider.executing && colB.collider.executing) { OnCollisionEvent.Invoke(colA.collider, colB.collider); } }
internal void Trigger(CollisionProxy source, Collider other) { CollisionProxy otherAsProxy = other.GetComponent <CollisionProxy>(); if (otherAsProxy) { CollisionHandler otherHandler = otherAsProxy as CollisionHandler; if (otherHandler == null) { otherHandler = other.GetComponentInParent <CollisionHandler>(); } if (otherHandler) { //Debug.Log(mask + " "+otherHandler.mask); switch (mask) { case CollisionMask.All: for (int i = 0; i < users.Length; i++) { users[i].OnTriggered(otherHandler); } break; case CollisionMask.OtherFactions: if (faction != null && otherHandler.faction != null && faction.faction != otherHandler.faction.faction) { for (int i = 0; i < users.Length; i++) { users[i].OnTriggered(otherHandler); } } break; default: break; } } else { Debug.Log("Missing collision handler [2]", other.transform); } } else { Debug.Log("Missing collision handler/proxy [1]", other.transform); } }
public override bool Raycast(GameSystem.GameCore.SerializableMath.Vector3 startPoint, GameSystem.GameCore.SerializableMath.Vector3 endPoint, out GameSystem.GameCore.SerializableMath.Vector3[] hitPoint, out CollisionProxy[] hitObject, int mask = -1) { // transfer serializable math position to bullet math position BulletSharp.Math.Vector3 start = startPoint.ToBullet(), end = endPoint.ToBullet(); var callback = new AllHitsRayResultCallback(start, end); // set group mask filter callback.CollisionFilterMask = (short)mask; world.RayTest(start, end, callback); if (callback.HasHit) { hitPoint = callback.HitPointWorld.ToSerializableArray(); hitObject = callback.CollisionObjects.SelectToArray(colObj => (CollisionProxy)colObj.UserObject); } else { hitPoint = new GameSystem.GameCore.SerializableMath.Vector3[0]; hitObject = new CollisionProxy[0]; } return(callback.HasHit); }
public override void Update(TimeSpan deltaTime) { float second = (float)deltaTime.TotalSeconds; world.StepSimulation(second); // on collision events int numManifolds = world.Dispatcher.NumManifolds; for (int i = 0; i < numManifolds; i++) { PersistentManifold manifold = world.Dispatcher.GetManifoldByIndexInternal(i); CollisionProxy colA = (CollisionProxy)manifold.Body0.UserObject; CollisionProxy colB = (CollisionProxy)manifold.Body1.UserObject; // check if both are not null if (colA != null && colB != null) { // execute colA -> colB event try { colA.ExecuteCollision(colA, colB); } catch (Exception e) { LogError(string.Format("{0} {1}", e.Message, e.StackTrace)); } // execute colB -> colA event try { colB.ExecuteCollision(colB, colA); } catch (Exception e) { LogError(string.Format("{0} {1}", e.Message, e.StackTrace)); } } } }
private void ColProxy_CollisionEvent(CollisionProxy colA, CollisionProxy colB) { OnCollisionEvent.Invoke(colA.collider, colB.collider); }
public override void RemoveCollision(CollisionProxy colProxy) { world.RemoveCollisionObject((CollisionObject)colProxy.CollisionObject); }
public override void AddCollision(CollisionProxy colProxy, int layer = 1, int mask = -1) { world.AddCollisionObject((CollisionObject)colProxy.CollisionObject, (short)layer, (short)mask); }
public override bool Raycast(GameSystem.GameCore.SerializableMath.Vector3 startPoint, GameSystem.GameCore.SerializableMath.Vector3 endPoint, out GameSystem.GameCore.SerializableMath.Vector3 hitPoint, out CollisionProxy hitObject, int mask = -1) { // transfer serializable math position to bullet math position BulletSharp.Math.Vector3 start = startPoint.ToBullet(), end = endPoint.ToBullet(); var callback = new ClosestRayResultCallback(ref start, ref end); // set group mask filter callback.CollisionFilterMask = (short)mask; world.RayTest(start, end, callback); if (callback.HasHit) { hitPoint = callback.HitPointWorld.ToSerializable(); hitObject = (CollisionProxy)callback.CollisionObject.UserObject; } else { hitPoint = GameSystem.GameCore.SerializableMath.Vector3.Zero; hitObject = null; } return(callback.HasHit); }