public void OnPhysicsEvent(PhysicsEvent e)
        {
            if (e.type == PhysicsEvent.EXTERNAL_FORCE)
            {
                int     id       = e.uid;
                Vector2 force    = e.vector;
                bool    hasForce = !(force.x == 0 && force.y == 0);

                if (!_sharedData.externalVelocity.ContainsKey(id))
                {
                    if (hasForce)
                    {
                        _sharedData.externalVelocity[id] = force;
                    }
                }
                else
                {
                    if (hasForce)
                    {
                        _sharedData.externalVelocity[id] = force;
                    }
                    else
                    {
                        _sharedData.externalVelocity.Remove(id);
                    }
                }
            }
            else if (e.type == PhysicsEvent.MOVE_BY)
            {
                this.gameObject.transform.Translate(e.vector);
            }
        }
 private void DispatchPhysicsEvent(GameObject toObj, Vector2 force)
 {
     PhysicsEvent e = new PhysicsEvent(PhysicsEvent.EXTERNAL_FORCE, gameObject.GetInstanceID(), force);
     toObj.SendMessage("OnPhysicsEvent", e, SendMessageOptions.DontRequireReceiver);
 }
 private void DispatchPhysicsEvent(GameObject toObj, Vector2 force)
 {
     PhysicsEvent e = new PhysicsEvent(PhysicsEvent.MOVE_BY, gameObject.GetInstanceID(), force);
     foreach (GameObject go in _collisionObjects) {
         go.SendMessage("OnPhysicsEvent", e, SendMessageOptions.DontRequireReceiver);
     }
     // toObj.SendMessage("OnPhysicsEvent", e, SendMessageOptions.DontRequireReceiver);
 }