feat: Applied ICamera2D
This commit is contained in:
parent
35933dfd14
commit
1fd8060857
2
Engine
2
Engine
|
@ -1 +1 @@
|
||||||
Subproject commit de336d0ee5323da3f8b5db3adc69b6afd2f1beff
|
Subproject commit 6c36d4d21d4f84a0ae986d4c75983235287dc413
|
|
@ -7,17 +7,17 @@ namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class CameraController : BehaviourOverride
|
public class CameraController : BehaviourOverride
|
||||||
{
|
{
|
||||||
private MonoGameCameraBehaviour cameraBehaviour = null!;
|
private MonoGameCamera2DBehaviour cameraBehaviour = null!;
|
||||||
private IButtonInputs<Keys> buttonInputs = null!;
|
private IButtonInputs<Keys> buttonInputs = null!;
|
||||||
|
|
||||||
private float defaultZoomLevel = 1f;
|
private float defaultZoomLevel = 1f;
|
||||||
|
|
||||||
protected override void OnFirstActiveFrame()
|
protected override void OnFirstActiveFrame()
|
||||||
{
|
{
|
||||||
if (BehaviourController.TryGetBehaviour(out MonoGameCameraBehaviour? foundCameraBehaviour))
|
if (BehaviourController.TryGetBehaviour(out MonoGameCamera2DBehaviour? foundCameraBehaviour))
|
||||||
cameraBehaviour = foundCameraBehaviour;
|
cameraBehaviour = foundCameraBehaviour;
|
||||||
|
|
||||||
cameraBehaviour ??= BehaviourController.AddBehaviour<MonoGameCameraBehaviour>();
|
cameraBehaviour ??= BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>();
|
||||||
|
|
||||||
if (BehaviourController.TryGetBehaviour(out IButtonInputs<Keys>? foundButtonInputs))
|
if (BehaviourController.TryGetBehaviour(out IButtonInputs<Keys>? foundButtonInputs))
|
||||||
buttonInputs = foundButtonInputs;
|
buttonInputs = foundButtonInputs;
|
||||||
|
@ -34,10 +34,19 @@ public class CameraController : BehaviourOverride
|
||||||
if (buttonInputs.IsPressed(Keys.J))
|
if (buttonInputs.IsPressed(Keys.J))
|
||||||
cameraBehaviour.Zoom -= Time.Elapsed.Nanoseconds * 0.00025f;
|
cameraBehaviour.Zoom -= Time.Elapsed.Nanoseconds * 0.00025f;
|
||||||
|
|
||||||
|
if (buttonInputs.IsPressed(Keys.NumPad8))
|
||||||
|
cameraBehaviour.BehaviourController.GameObject.Transform.Position += Vector2D.Up;
|
||||||
|
if (buttonInputs.IsPressed(Keys.NumPad2))
|
||||||
|
cameraBehaviour.BehaviourController.GameObject.Transform.Position -= Vector2D.Up;
|
||||||
|
if (buttonInputs.IsPressed(Keys.NumPad6))
|
||||||
|
cameraBehaviour.BehaviourController.GameObject.Transform.Position += Vector2D.Right;
|
||||||
|
if (buttonInputs.IsPressed(Keys.NumPad4))
|
||||||
|
cameraBehaviour.BehaviourController.GameObject.Transform.Position -= Vector2D.Right;
|
||||||
|
|
||||||
if (buttonInputs.IsPressed(Keys.Q))
|
if (buttonInputs.IsPressed(Keys.Q))
|
||||||
cameraBehaviour.BehaviourController.GameObject.Transform.Rotation += Time.Elapsed.Nanoseconds * 0.000025f;
|
cameraBehaviour.BehaviourController.GameObject.Transform.Rotation += Time.Elapsed.Nanoseconds * 0.0025f;
|
||||||
if (buttonInputs.IsPressed(Keys.E))
|
if (buttonInputs.IsPressed(Keys.E))
|
||||||
cameraBehaviour.BehaviourController.GameObject.Transform.Rotation -= Time.Elapsed.Nanoseconds * 0.000025f;
|
cameraBehaviour.BehaviourController.GameObject.Transform.Rotation -= Time.Elapsed.Nanoseconds * 0.0025f;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SwitchToFullScreen(IButtonInputs<Keys> inputs, Keys keys)
|
private void SwitchToFullScreen(IButtonInputs<Keys> inputs, Keys keys)
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
using Syntriax.Engine.Core;
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
namespace Pong.Behaviours;
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class MonoGameCameraBehaviour(GraphicsDeviceManager Graphics) : BehaviourOverride
|
public class MonoGameCamera2DBehaviour(GraphicsDeviceManager Graphics) : BehaviourOverride, ICamera2D
|
||||||
{
|
{
|
||||||
public System.Action<MonoGameCameraBehaviour>? OnMatrixTransformChanged { get; set; } = null;
|
public System.Action<MonoGameCamera2DBehaviour>? OnMatrixTransformChanged { get; set; } = null;
|
||||||
public System.Action<MonoGameCameraBehaviour>? OnViewportChanged { get; set; } = null;
|
public System.Action<MonoGameCamera2DBehaviour>? OnViewportChanged { get; set; } = null;
|
||||||
public System.Action<MonoGameCameraBehaviour>? OnZoomChanged { get; set; } = null;
|
public System.Action<MonoGameCamera2DBehaviour>? OnZoomChanged { get; set; } = null;
|
||||||
|
|
||||||
private Matrix _matrixTransform = Matrix.Identity;
|
private Matrix _matrixTransform = Matrix.Identity;
|
||||||
|
|
||||||
|
@ -70,6 +72,22 @@ public class MonoGameCameraBehaviour(GraphicsDeviceManager Graphics) : Behaviour
|
||||||
set => Transform.Rotation = value;
|
set => Transform.Rotation = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.Action<IAssignableTransform>? IAssignableTransform.OnTransformAssigned { get => GameObject.OnTransformAssigned; set => GameObject.OnTransformAssigned = value; }
|
||||||
|
ITransform IAssignableTransform.Transform => GameObject.Transform;
|
||||||
|
bool IAssignableTransform.Assign(ITransform transform) => GameObject.Assign(transform);
|
||||||
|
|
||||||
|
// TODO This causes delay since OnPreDraw calls assuming this is called in in Update
|
||||||
|
public Vector2D ScreenToWorldPosition(Vector2D screenPosition)
|
||||||
|
{
|
||||||
|
Vector2D worldPosition = Vector2.Transform(screenPosition.ToVector2(), Matrix.Invert(MatrixTransform)).ToVector2D();
|
||||||
|
return worldPosition.Scale(EngineConverter.screenScale);
|
||||||
|
}
|
||||||
|
public Vector2D WorldToScreenPosition(Vector2D worldPosition)
|
||||||
|
{
|
||||||
|
Vector2D screenPosition = Vector2.Transform(worldPosition.ToVector2(), MatrixTransform).ToVector2D();
|
||||||
|
return screenPosition.Scale(EngineConverter.screenScale);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnFirstActiveFrame()
|
protected override void OnFirstActiveFrame()
|
||||||
=> Viewport = Graphics.GraphicsDevice.Viewport;
|
=> Viewport = Graphics.GraphicsDevice.Viewport;
|
||||||
|
|
||||||
|
@ -77,7 +95,7 @@ public class MonoGameCameraBehaviour(GraphicsDeviceManager Graphics) : Behaviour
|
||||||
{
|
{
|
||||||
MatrixTransform =
|
MatrixTransform =
|
||||||
Matrix.CreateTranslation(new Vector3(-Position.X, Position.Y, 0f)) *
|
Matrix.CreateTranslation(new Vector3(-Position.X, Position.Y, 0f)) *
|
||||||
Matrix.CreateRotationZ(Rotation) *
|
Matrix.CreateRotationZ(Rotation * Math.DegreeToRadian) *
|
||||||
Matrix.CreateScale(Zoom) *
|
Matrix.CreateScale(Zoom) *
|
||||||
Matrix.CreateTranslation(new Vector3(_viewport.Width * .5f, _viewport.Height * .5f, 0f));
|
Matrix.CreateTranslation(new Vector3(_viewport.Width * .5f, _viewport.Height * .5f, 0f));
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ public class GamePong : Game
|
||||||
private GameManager gameManager = null!;
|
private GameManager gameManager = null!;
|
||||||
private BehaviourCacher<IDisplayableSprite> displayableCacher = null!;
|
private BehaviourCacher<IDisplayableSprite> displayableCacher = null!;
|
||||||
private BehaviourCacher<IDisplayableShape> displayableShapeCacher = null!;
|
private BehaviourCacher<IDisplayableShape> displayableShapeCacher = null!;
|
||||||
private MonoGameCameraBehaviour cameraBehaviour = null!;
|
private MonoGameCamera2DBehaviour cameraBehaviour = null!;
|
||||||
|
|
||||||
private PongManagerBehaviour pongManager = null!;
|
private PongManagerBehaviour pongManager = null!;
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ public class GamePong : Game
|
||||||
|
|
||||||
IGameObject gameObjectCamera = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Camera"); ;
|
IGameObject gameObjectCamera = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Camera"); ;
|
||||||
gameObjectCamera.BehaviourController.AddBehaviour<CameraController>();
|
gameObjectCamera.BehaviourController.AddBehaviour<CameraController>();
|
||||||
cameraBehaviour = gameObjectCamera.BehaviourController.AddBehaviour<MonoGameCameraBehaviour>(graphics);
|
cameraBehaviour = gameObjectCamera.BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>(graphics);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue