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)); } }
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; }
private void OnPointerMoved(EnginePointerMovedEventArgs args) { LastMouseScreenPosition = args.Arguments.GetCurrentPoint(args.Sender).RawPosition.ToVector2(); }
private static MouseMoveOverEngineEventArgs CreateMouseMoveOverEventArgs(Entity entity, MouseInteractionFeature feature, EnginePointerMovedEventArgs args) { return(new MouseMoveOverEngineEventArgs(Engine.Current, feature._lastMousePosition)); }
private static bool IsMousePointerMovingOverEntity(Entity entity, MouseInteractionFeature feature, EnginePointerMovedEventArgs args) { var wasOver = feature._lastEntityStates[entity] == MousePointerOverEntityState.Over; return(IsLastMousePositionOverEntity(feature, entity) && wasOver); }