コード例 #1
0
        private void OnPointerMoved(EnginePointerMovedEventArgs args)
        {
            if (!ColliderTypes.HasFlag(ColliderType.Pointer))
            {
                return;
            }

            var mousePoint = args.Arguments.GetCurrentPoint(args.Sender as UIElement).Position.ToVector2();
            var point      = Entity.GetBehavior <TransformBehavior>().Position.XZ();
            var collides   = false;

            switch (Shape)
            {
            case SimpleGeometry.Circle:
                collides = (point - mousePoint).Length() <= Size.Width / 2;
                break;

            case SimpleGeometry.Square:
                var minX = point.X - (Size.Width / 2);
                var maxX = point.X + (Size.Width / 2);
                var minY = point.Y - (Size.Height / 2);
                var maxY = point.Y - (Size.Height / 2);
                collides = mousePoint.X >= minX && mousePoint.X <= maxX && mousePoint.Y >= minY &&
                           mousePoint.Y <= maxY;
                break;
            }
            if (collides)
            {
                _collisionEventSubject.OnNext(new CollisionEventArgs(Engine.Current, ColliderType.Pointer, mousePoint));
            }
        }
コード例 #2
0
        private void StorePointerPosition(EnginePointerMovedEventArgs args)
        {
            var coordinateSystem = Engine.CurrentLevel.RootEntity.GetImplementation <ICoordinateSystem>(); // TODO this might be better positioned inside the engine?!
            var mousePosition    = coordinateSystem.TransformToWorld3D(args.Arguments.GetCurrentPoint(args.Sender).Position.ToVector2());

            _lastMousePosition = mousePosition;
        }
コード例 #3
0
 private void OnPointerMoved(EnginePointerMovedEventArgs args)
 {
     LastMouseScreenPosition = args.Arguments.GetCurrentPoint(args.Sender).RawPosition.ToVector2();
 }
コード例 #4
0
 private static MouseMoveOverEngineEventArgs CreateMouseMoveOverEventArgs(Entity entity, MouseInteractionFeature feature, EnginePointerMovedEventArgs args)
 {
     return(new MouseMoveOverEngineEventArgs(Engine.Current, feature._lastMousePosition));
 }
コード例 #5
0
        private static bool IsMousePointerMovingOverEntity(Entity entity, MouseInteractionFeature feature, EnginePointerMovedEventArgs args)
        {
            var wasOver = feature._lastEntityStates[entity] == MousePointerOverEntityState.Over;

            return(IsLastMousePositionOverEntity(feature, entity) && wasOver);
        }