public static void MouseButton(Input.MouseButton button) { if (button == Input.MouseButton.Left) { ClickLeftMouseButton(); } else if (button == Input.MouseButton.Middle) { ClickMiddelMouseButton(); } else { ClickRightMouseButton(); } }
private void HitAction(Input.MouseButton button, Input.KeyAction action) { if (action == Input.KeyAction.Press) { var screenSize = Application.ScreenSize; var pos = Input.MousePosition; Console.WriteLine(pos); var camera = this.Entity.Scene.ActiveCamera; var ray = camera.GetViewRay(new Vector2(2.0f * (float)pos.X / (float)screenSize.X - 1.0f, -2.0f * (float)pos.Y / (float)screenSize.Y + 1.0f)); float dist = Utils.SegmentToRayDistance(new Segment(capsuleA, capsuleB), ray); Console.WriteLine($"Capsule pressed: {dist <= capsuleRadius}"); // Console.WriteLine($"Dir: {this.Transform.Rotation * Vector3.Forward}"); // Console.WriteLine($"Casted ray: {ray}"); } }
private void ArrowPressAction(Input.MouseButton button, Input.KeyAction action) { if (action == Input.KeyAction.Press) { var ray = this.Entity.Scene.ActiveCamera.GetViewRay(new Vector2(2.0f, -2.0f) * Input.MousePosition / (Vector2)Application.ScreenSize + new Vector2(-1.0f, 1.0f)); Transform minTransform = null; float distance; float minDistance = float.PositiveInfinity; if (HittestArrow(this.arrowX, ray, out distance)) { if (minDistance > distance) { minDistance = distance; minTransform = arrowX; } } if (HittestArrow(this.arrowY, ray, out distance)) { if (minDistance > distance) { minDistance = distance; minTransform = arrowY; } } if (HittestArrow(this.arrowZ, ray, out distance)) { if (minDistance > distance) { minDistance = distance; minTransform = arrowZ; } } if (minTransform != null) { this.arrowDir = minTransform.GlobalRotation * Vector3.Up; Vector3 cameraDir = (this.Entity.Scene.ActiveCamera.Entity.Transform.GlobalPosition - this.Transform.GlobalPosition).Normalized; Vector3 localUp = Vector3.CrossProduct(arrowDir, cameraDir).Normalized; Vector3 planeNormal = Vector3.CrossProduct(arrowDir, localUp); // Console.WriteLine($"Arrow dir {arrowDir}"); // Console.WriteLine($"Plane normal {planeNormal}"); // Console.WriteLine($"Local up {localUp}"); if (Utils.RayPlaneIntersection(new Plane(this.Transform.GlobalPosition, planeNormal), ray, out distance)) { this.initialRayIntersection = ray.GetPoint(distance); this.initialPosition = this.Transform.GlobalPosition; this.initialRotation = this.Transform.GlobalRotation; this.initialScale = this.Transform.Scale.X; if (Input.IsKeyPressed(Input.Key.LeftShift)) { this.rotate = true; } else if (Input.IsKeyPressed(Input.Key.LeftAlt)) { this.scale = true; } else { this.move = true; } } } } if (action == Input.KeyAction.Release) { move = false; rotate = false; scale = false; transform = null; } }
public static bool IsMouseDown(Input.MouseButton button) { return(isMouseDown(instance_, button)); }
extern static bool isMouseDown(IntPtr instance, Input.MouseButton button);
private void LeftMouseAction(Input.MouseButton button, Input.KeyAction action) { if (action == Input.KeyAction.Press) { lastMousePosition = Input.MousePosition; } if (action == Input.KeyAction.Release) { var pos = Input.MousePosition; var screenSize = Application.ScreenSize; if ((this.lastMousePosition - pos).Length < 10.0f) { var ray = camera.GetViewRay(new Vector2(2.0f * (float)pos.X / (float)screenSize.X - 1.0f, -2.0f * (float)pos.Y / (float)screenSize.Y + 1.0f)); float closestDistance = float.PositiveInfinity; Collider closestCollider = null; var scene = this.Entity.Scene; for (int i = 0; i < scene.EntitiesCount; ++i) { var entity = scene.GetEntity(i); var collider = entity.GetComponent <Collider>(); if (collider == null) { continue; } float distance = 0.0f; if (collider.RayCast(ray, out distance)) { if (closestDistance > distance) { closestDistance = distance; closestCollider = collider; } } } if (closestCollider != null) { Console.WriteLine($"Pressed at {closestCollider.Entity.Name}"); var arrows = scene.FindEntity("Arrows"); arrows.Transform.Position = closestCollider.Entity.Transform.GlobalPosition; arrows.Transform.Rotation = closestCollider.Entity.Transform.GlobalRotation; arrows.GetComponent <ArrowsController>().SetTransform(closestCollider.Entity.Transform); } else { var arrows = scene.FindEntity("Arrows"); var cameraRay = camera.GetViewRay(Application.NormalizeScreenPoint(Input.MousePosition)); arrows.Transform.GlobalPosition = cameraRay.Origin + cameraRay.Direction * 3.0f; arrows.GetComponent <ArrowsController>().SetTransform(null); Console.WriteLine("No collider found"); } } } }