コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }