public bool Handle(IPhysicsEventContext context, IEventEngine <IPhysicsEventContext> eventEngine, Event @event) { foreach (var child in _node.Children.Select(x => x.UntypedValue).OfType <IEventListener <IPhysicsEventContext> >()) { if (child.Handle(context, eventEngine, @event)) { return(true); } } return(false); }
/// <summary> /// Handles physics events from an event engine. This implementation propagates events through the /// component hierarchy to components that implement <see cref="ICollidableComponent"/>. /// </summary> /// <param name="context">The current game context.</param> /// <param name="eventEngine">The event engine from which the event was fired.</param> /// <param name="event">The physics event that is to be handled.</param> /// <returns>Whether or not the event was consumed.</returns> public virtual bool Handle(IPhysicsEventContext context, IEventEngine <IPhysicsEventContext> eventEngine, Event @event) { if (_hasCollidableComponentDescendants) { var physicsCollisionBeginEvent = @event as PhysicsCollisionBeginEvent; var physicsCollisionEndEvent = @event as PhysicsCollisionEndEvent; if (physicsCollisionBeginEvent == null && physicsCollisionEndEvent == null) { return(false); } if (physicsCollisionBeginEvent != null) { CollisionBegin( physicsCollisionBeginEvent.GameContext, physicsCollisionBeginEvent.ServerContext, physicsCollisionBeginEvent.UpdateContext, physicsCollisionBeginEvent.Owner1, physicsCollisionBeginEvent.Owner2, physicsCollisionBeginEvent.Body1, physicsCollisionBeginEvent.Body2); } if (physicsCollisionEndEvent != null) { CollisionEnd( physicsCollisionEndEvent.GameContext, physicsCollisionEndEvent.ServerContext, physicsCollisionEndEvent.UpdateContext, physicsCollisionEndEvent.Owner1, physicsCollisionEndEvent.Owner2, physicsCollisionEndEvent.Body1, physicsCollisionEndEvent.Body2); } } return(false); }