public SandboxGame() { var deviceManager = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; _penumbra = new PenumbraComponent(this) { SpriteBatchTransformEnabled = false, AmbientColor = Color.Black }; Components.Add(_penumbra); _penumbraController = new PenumbraControllerComponent(this, _penumbra); Components.Add(_penumbraController); Scenarios = new ScenariosComponent(this, _penumbra, _penumbraController); Components.Add(Scenarios); var ui = new UIComponent(this, _penumbraController) { DrawOrder = int.MaxValue }; Components.Add(ui); _camera = new CameraMovementComponent(this); Components.Add(_camera); Components.Add(new FpsGarbageComponent(this)); // There's a bug when trying to change resolution during window resize. // https://github.com/mono/MonoGame/issues/3572 deviceManager.PreferredBackBufferWidth = 1280; deviceManager.PreferredBackBufferHeight = 720; Window.AllowUserResizing = false; IsMouseVisible = true; }
public bool Execute(ISceneSnapshot snapshot, IContextState context) { var entity = context.GetEntityManager().GetEntity(snapshot.CurrentCameraTag); var state = entity.GetComponent <OrthographicCameraComponent>().GetState(); var delta = InputState.Delta; var data = new MovementData { End = InputState.CurrentPosition }; entity.UpdateComponent(CameraMovementComponent.CreateZoom(state, data, delta, 0.001f)); return(true); }
public bool Execute(ISceneSnapshot snapshot, IContextState context) { var p1 = InputState.ButtonsStates[GeneralMouseButtons.Left].PointV2; var manager = context.GetEntityManager(); var camera = manager.GetEntity(snapshot.CurrentCameraTag); var world = manager.GetEntity(snapshot.WorldTag); world.UpdateComponent(CaptureTargetUnderMouseComponent.Create(p1)); camera.AddComponent(CameraMovementComponent.ChangeRotationCenter( camera.GetComponent <OrthographicCameraComponent>().GetState(), new MovementData { Begin = p1 })); return(true); }
public bool Execute(ISceneSnapshot snapshot, IContextState context) { var entity = context.GetEntityManager().GetEntity(snapshot.CurrentCameraTag); var state = entity.GetComponent <OrthographicCameraComponent>().GetState(); var p11 = InputState.ButtonsStates[GeneralMouseButtons.Right].PointV2; var p2 = InputState.CurrentPosition; var data = new MovementData { Begin = p11, End = p2 }; //var any = entity.GetComponents<CameraMovementComponent>(); //if (any.Any()) {//get prev state... means manipulate is continuing // state = any.Single().State; //} entity.UpdateComponent(CameraMovementComponent.CreateRotate(state, data, sensitivity)); return(true); }
public bool Execute(ISceneSnapshot snapshot, IContextState context) { var entity = context.GetEntityManager().GetEntity(snapshot.CurrentCameraTag); if (!entity.TryGetComponent(out OrthographicCameraComponent ccom)) { return(false); } var p11 = InputState.ButtonsStates[GeneralMouseButtons.Right].PointV2; var p2 = InputState.CurrentPosition; var data = new MovementData { Begin = p11, End = p2 }; var state = ccom.GetState(); entity.UpdateComponent(CameraMovementComponent.CreateRotate(state, data, sensitivity)); return(true); }
public bool Execute(ISceneSnapshot snapshot, IContextState context) { var entity = context.GetEntityManager().GetEntity(snapshot.CurrentCameraTag); var p1 = InputState.ButtonsStates[GeneralMouseButtons.Right].PointV2;// InputState.PrevPosition; var p2 = InputState.CurrentPosition; var data = new MovementData { Begin = p1, End = p2 }; var state = entity.GetComponent <OrthographicCameraComponent>().GetState(); if (entity.TryGetComponent <CameraMovementComponent>(out var movement)) { //get prev state... means manipulate is continuing state = movement.State; } entity.UpdateComponent(CameraMovementComponent.CreatePan(state, data)); return(true); }
protected virtual OrthographicCameraComponent HandleZooming(ISceneSnapshot snapshot, OrthographicCameraComponent camera, CameraMovementComponent component) { var changed = OrthographicCameraComponent.Clone(camera); float delta = component.Delta; var nscale = camera.Scale - (delta * component.SpeedValue); if (nscale > 0) { changed.Scale = nscale; } return(changed); }
protected virtual OrthographicCameraComponent HandleChangingRotateCenter(ISceneSnapshot snapshot, OrthographicCameraComponent camera, ref CameraMovementComponent component) { var world = ContextState.GetEntityManager().GetEntity(snapshot.WorldTag); if (world.TryGetComponents( out CaptureTargetUnderMouseComponent capture, out CollidedWithEntityByRayComponent collided)) { var changed = OrthographicCameraComponent.Clone(camera); changed.RotatePoint = collided.IntersectionPositionWorld; var begin = snapshot.Viewport.Vector3ToScreen(changed.Position, camera.GetState(), snapshot.Surface); var move = new Vector2(capture.ScreenPosition.X - begin.X, capture.ScreenPosition.Y - begin.Y); var PanK = (changed.Width * changed.Scale) / snapshot.Surface.Size.Width; var projectionMove = new Vector2(move.X * PanK, move.Y * PanK); var left = Vector3.Cross(changed.UpDirection, changed.LookDirection).Normalized(); var up = Vector3.Cross(changed.LookDirection, left).Normalized(); var panVector = left * projectionMove.X + up * projectionMove.Y; changed.Position += -panVector; world.RemoveComponents <CaptureTargetUnderMouseComponent, CollidedWithEntityByRayComponent>(); camera = changed; } return(camera); }
protected virtual OrthographicCameraComponent HandlePanning(ISceneSnapshot snapshot, OrthographicCameraComponent camera, CameraMovementComponent component) { var state = component.State; var data = component.MovementData; var changed = OrthographicCameraComponent.Clone(camera); var forward = state.LookDirection; var left = Vector3.Cross(state.UpDirection, forward).Normalized(); var up = Vector3.Cross(forward, left).Normalized(); var move = new Vector2(data.End.X - data.Begin.X, data.End.Y - data.Begin.Y); var PanK = (changed.Width * changed.Scale) / snapshot.Surface.Size.Width; var projectionMove = new Vector2(move.X * PanK, move.Y * PanK); var panVector = left * projectionMove.X + up * projectionMove.Y; changed.Position = state.Position + panVector; return(changed); }
protected virtual OrthographicCameraComponent HandleRotatingWithCursorReturningPosition(ISceneSnapshot snapshot, OrthographicCameraComponent camera, CameraMovementComponent component) { var state = component.State; var data = component.MovementData; var cursorPosition = snapshot.InputSnapshot.CurrentInputState.ButtonsStates[GeneralMouseButtons.Right] .CursorPoint.ToDrawingPoint(); var rotateAround = camera.RotatePoint; var delta = data.End - data.Begin; var relativeTarget = rotateAround - state.Target; var relativePosition = rotateAround - state.Position; var cUp = Vector3.Normalize(state.UpDirection); var up = state.UpDirection; var dir = Vector3.Normalize(state.LookDirection); var right = Vector3.Cross(dir, cUp); float d = -0.5f; d *= component.SpeedValue; var xangle = d * 1 * delta.X / 180 * (float)Math.PI; var yangle = d * delta.Y / 180 * (float)Math.PI; //System.Diagnostics.Trace.WriteLine($"up: {up}/{xangle}, right: {right}/{yangle}"); var q1 = Quaternion.CreateFromAxisAngle(up, xangle); var q2 = Quaternion.CreateFromAxisAngle(right, yangle); Quaternion q = q1 * q2; var m = Matrix4x4.CreateFromQuaternion(q); var newRelativeTarget = Vector3.Transform(relativeTarget, m); var newRelativePosition = Vector3.Transform(relativePosition, m); var newTarget = rotateAround - newRelativeTarget; var newPosition = rotateAround - newRelativePosition; var changed = OrthographicCameraComponent.Clone(camera); changed.UpDirection = Vector3.TransformNormal(cUp, m); changed.LookDirection = (newTarget - newPosition); changed.Position = newPosition; return(changed); }