chore: Added Back Graphics
This commit is contained in:
parent
8f6b48eb88
commit
7c18ccf4c2
2
Engine
2
Engine
|
@ -1 +1 @@
|
||||||
Subproject commit 39e553ebbf61f398a3ed9a96b20f6819a197cd86
|
Subproject commit d08495afbb7ca9f1afa2c8edcdaf0786bf095e9d
|
|
@ -8,4 +8,8 @@ public static class EngineConverter
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static EngineTime ToEngineTime(this GameTime gameTime) => new(gameTime.TotalGameTime, gameTime.ElapsedGameTime);
|
public static EngineTime ToEngineTime(this GameTime gameTime) => new(gameTime.TotalGameTime, gameTime.ElapsedGameTime);
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static Vector2D ToVector2D(this Vector2 vector) => new(vector.X, vector.Y);
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static Vector2 ToVector2(this Vector2D vector) => new(vector.X, vector.Y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ using Pong.Behaviours;
|
||||||
|
|
||||||
using Syntriax.Engine.Core;
|
using Syntriax.Engine.Core;
|
||||||
using Syntriax.Engine.Core.Abstract;
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
using Syntriax.Engine.Graphics.TwoDimensional;
|
||||||
using Syntriax.Engine.Physics2D;
|
using Syntriax.Engine.Physics2D;
|
||||||
using Syntriax.Engine.Physics2D.Primitives;
|
using Syntriax.Engine.Physics2D.Primitives;
|
||||||
|
|
||||||
|
@ -18,8 +19,8 @@ public class Game1 : Game
|
||||||
private PhysicsEngine2D engine;
|
private PhysicsEngine2D engine;
|
||||||
private SpriteBatch _spriteBatch = null!;
|
private SpriteBatch _spriteBatch = null!;
|
||||||
public static GameManager gameManager = null!;
|
public static GameManager gameManager = null!;
|
||||||
// public static Sprite spriteBox = null!;
|
public static Sprite spriteBox = null!;
|
||||||
private MonoGameCameraBehaviour cameraBehaviour;
|
private MonoGameCameraBehaviour cameraBehaviour = null!;
|
||||||
|
|
||||||
|
|
||||||
public Game1()
|
public Game1()
|
||||||
|
@ -50,8 +51,8 @@ public class Game1 : Game
|
||||||
{
|
{
|
||||||
_spriteBatch = new SpriteBatch(GraphicsDevice);
|
_spriteBatch = new SpriteBatch(GraphicsDevice);
|
||||||
|
|
||||||
// spriteBox = new Sprite() { Texture2D = Content.Load<Texture2D>("Sprites/Pixel") };
|
spriteBox = new Sprite() { Texture2D = Content.Load<Texture2D>("Sprites/Pixel") };
|
||||||
// Sprite spriteBall = new Sprite() { Texture2D = Content.Load<Texture2D>("Sprites/Circle") };
|
Sprite spriteBall = new Sprite() { Texture2D = Content.Load<Texture2D>("Sprites/Circle") };
|
||||||
|
|
||||||
IGameObject gameObjectCamera = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject gameObjectCamera = gameManager.InstantiateGameObject<GameObject>();
|
||||||
gameObjectCamera.Name = "Camera";
|
gameObjectCamera.Name = "Camera";
|
||||||
|
@ -67,7 +68,7 @@ public class Game1 : Game
|
||||||
gameObjectBall.Transform.Scale = new Vector2D(1f / 51.2f, 1f / 51.2f);
|
gameObjectBall.Transform.Scale = new Vector2D(1f / 51.2f, 1f / 51.2f);
|
||||||
engine.AddRigidBody(gameObjectBall.BehaviourController.AddBehaviour<RigidBody2D>());
|
engine.AddRigidBody(gameObjectBall.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||||
gameObjectBall.BehaviourController.AddBehaviour<MovementBallBehaviour>(new Vector2D(.1f, .1f), 500f);
|
gameObjectBall.BehaviourController.AddBehaviour<MovementBallBehaviour>(new Vector2D(.1f, .1f), 500f);
|
||||||
// gameObjectBall.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBall);
|
gameObjectBall.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBall);
|
||||||
gameObjectBall.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * 512f * .5f, Vector2D.One * 512f * .5f);
|
gameObjectBall.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * 512f * .5f, Vector2D.One * 512f * .5f);
|
||||||
// gameObjectBall = gameManager.InstantiateGameObject<GameObject>();
|
// gameObjectBall = gameManager.InstantiateGameObject<GameObject>();
|
||||||
// gameObjectBall.Name = "Ball";
|
// gameObjectBall.Name = "Ball";
|
||||||
|
@ -102,26 +103,26 @@ public class Game1 : Game
|
||||||
IGameObject goPlayAreaTop = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject goPlayAreaTop = gameManager.InstantiateGameObject<GameObject>();
|
||||||
goPlayAreaTop.Transform.Position = new Vector2D(0f, 288f + 20f);
|
goPlayAreaTop.Transform.Position = new Vector2D(0f, 288f + 20f);
|
||||||
goPlayAreaTop.Transform.Scale = new Vector2D(10240f, 40f);
|
goPlayAreaTop.Transform.Scale = new Vector2D(10240f, 40f);
|
||||||
// goPlayAreaTop.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
goPlayAreaTop.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
||||||
// goPlayAreaTop.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
// goPlayAreaTop.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
||||||
engine.AddRigidBody(goPlayAreaTop.BehaviourController.AddBehaviour<RigidBody2D>());
|
engine.AddRigidBody(goPlayAreaTop.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||||
IGameObject goPlayAreaBottom = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject goPlayAreaBottom = gameManager.InstantiateGameObject<GameObject>();
|
||||||
goPlayAreaBottom.Transform.Position = new Vector2D(0f, -(288f + 20f));
|
goPlayAreaBottom.Transform.Position = new Vector2D(0f, -(288f + 20f));
|
||||||
goPlayAreaBottom.Transform.Scale = new Vector2D(10240f, 40f);
|
goPlayAreaBottom.Transform.Scale = new Vector2D(10240f, 40f);
|
||||||
// goPlayAreaBottom.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
goPlayAreaBottom.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
||||||
// goPlayAreaBottom.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
// goPlayAreaBottom.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
||||||
engine.AddRigidBody(goPlayAreaBottom.BehaviourController.AddBehaviour<RigidBody2D>());
|
engine.AddRigidBody(goPlayAreaBottom.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||||
|
|
||||||
IGameObject goPlayAreaRight = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject goPlayAreaRight = gameManager.InstantiateGameObject<GameObject>();
|
||||||
goPlayAreaRight.Transform.Position = new Vector2D(512f + 20f, 0f);
|
goPlayAreaRight.Transform.Position = new Vector2D(512f + 20f, 0f);
|
||||||
goPlayAreaRight.Transform.Scale = new Vector2D(40f, 5760f);
|
goPlayAreaRight.Transform.Scale = new Vector2D(40f, 5760f);
|
||||||
// goPlayAreaRight.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
goPlayAreaRight.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
||||||
// goPlayAreaRight.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
// goPlayAreaRight.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
||||||
engine.AddRigidBody(goPlayAreaRight.BehaviourController.AddBehaviour<RigidBody2D>());
|
engine.AddRigidBody(goPlayAreaRight.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||||
IGameObject goPlayAreaLeft = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject goPlayAreaLeft = gameManager.InstantiateGameObject<GameObject>();
|
||||||
goPlayAreaLeft.Transform.Position = new Vector2D(-(512f + 20f), 0f);
|
goPlayAreaLeft.Transform.Position = new Vector2D(-(512f + 20f), 0f);
|
||||||
goPlayAreaLeft.Transform.Scale = new Vector2D(40f, 5760f);
|
goPlayAreaLeft.Transform.Scale = new Vector2D(40f, 5760f);
|
||||||
// goPlayAreaLeft.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
goPlayAreaLeft.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
||||||
// goPlayAreaLeft.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
// goPlayAreaLeft.BehaviourController.AddBehaviour<Collider2DAABBBehaviour>().AABBLocal = new AABB(-Vector2D.One * .5f, Vector2D.One * .5f);
|
||||||
engine.AddRigidBody(goPlayAreaLeft.BehaviourController.AddBehaviour<RigidBody2D>());
|
engine.AddRigidBody(goPlayAreaLeft.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||||
|
|
||||||
|
@ -227,7 +228,16 @@ public class Game1 : Game
|
||||||
// TODO: Add your drawing code here
|
// TODO: Add your drawing code here
|
||||||
gameManager.PreDraw();
|
gameManager.PreDraw();
|
||||||
gameManager.Camera.Update();
|
gameManager.Camera.Update();
|
||||||
// gameManager.Draw(_spriteBatch);
|
|
||||||
|
_spriteBatch.Begin(SpriteSortMode.Deferred, transformMatrix: cameraBehaviour.MatrixTransform);
|
||||||
|
foreach (IGameObject gameObject in gameManager)
|
||||||
|
{
|
||||||
|
if (!gameObject.BehaviourController.TryGetBehaviour(out IDisplayable? displayable))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
displayable.Draw(_spriteBatch);
|
||||||
|
}
|
||||||
|
_spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="ISprite"/> field.
|
||||||
|
/// </summary>
|
||||||
|
public interface IAssignableSprite : IAssignable
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Callback triggered when the <see cref="ISprite"/> value has has been assigned a new value.
|
||||||
|
/// </summary>
|
||||||
|
Action<IAssignableSprite>? OnSpriteAssigned { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="ISprite" />
|
||||||
|
ISprite Sprite { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Assign a value to the <see cref="ISprite"/> field of this object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sprite">New <see cref="ISprite"/> to assign.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
|
||||||
|
/// </returns>
|
||||||
|
bool Assign(ISprite sprite);
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
|
// TODO Probably gonna have to rethink this
|
||||||
|
public interface ISprite
|
||||||
|
{
|
||||||
|
Action<ISprite>? OnTextureChanged { get; set; }
|
||||||
|
|
||||||
|
Texture2D Texture2D { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core;
|
||||||
|
|
||||||
|
public class Sprite : ISprite
|
||||||
|
{
|
||||||
|
public Action<ISprite>? OnTextureChanged { get; set; }
|
||||||
|
|
||||||
|
private Texture2D _texture = null!;
|
||||||
|
|
||||||
|
public Texture2D Texture2D
|
||||||
|
{
|
||||||
|
get => _texture;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_texture == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_texture = value;
|
||||||
|
OnTextureChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
|
public interface IDisplayable
|
||||||
|
{
|
||||||
|
public void Draw(SpriteBatch spriteBatch);
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Graphics.TwoDimensional.Abstract;
|
||||||
|
public interface IDisplayableSprite : IDisplayable, IAssignableSprite
|
||||||
|
{
|
||||||
|
Action<IDisplayableSprite>? OnSpriteEffectsChanged { get; set; }
|
||||||
|
Action<IDisplayableSprite>? OnOriginChanged { get; set; }
|
||||||
|
Action<IDisplayableSprite>? OnColorChanged { get; set; }
|
||||||
|
Action<IDisplayableSprite>? OnDepthChanged { get; set; }
|
||||||
|
|
||||||
|
SpriteEffects SpriteEffects { get; set; }
|
||||||
|
Vector2 Origin { get; set; }
|
||||||
|
Color Color { get; set; }
|
||||||
|
float Depth { get; set; }
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
using Syntriax.Engine.Graphics.TwoDimensional.Abstract;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Graphics.TwoDimensional;
|
||||||
|
|
||||||
|
public class DisplayableSpriteBehaviour : Behaviour, IDisplayableSprite, IAssignableSprite
|
||||||
|
{
|
||||||
|
public Action<IAssignableSprite>? OnSpriteAssigned { get; set; } = null;
|
||||||
|
public Action<IDisplayableSprite>? OnSpriteEffectsChanged { get; set; } = null;
|
||||||
|
public Action<IDisplayableSprite>? OnOriginChanged { get; set; } = null;
|
||||||
|
public Action<IDisplayableSprite>? OnColorChanged { get; set; } = null;
|
||||||
|
public Action<IDisplayableSprite>? OnDepthChanged { get; set; } = null;
|
||||||
|
|
||||||
|
private ISprite _sprite = null!;
|
||||||
|
private Color _color = Color.White;
|
||||||
|
private float _depth = 0f;
|
||||||
|
private SpriteEffects _spriteEffects = SpriteEffects.None;
|
||||||
|
private Vector2 _origin = Vector2.One * .5f;
|
||||||
|
|
||||||
|
|
||||||
|
public ISprite Sprite => _sprite;
|
||||||
|
|
||||||
|
public SpriteEffects SpriteEffects
|
||||||
|
{
|
||||||
|
get => _spriteEffects;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_spriteEffects == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_spriteEffects = value;
|
||||||
|
OnSpriteEffectsChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector2 Origin
|
||||||
|
{
|
||||||
|
get => _origin;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_origin == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_origin = value;
|
||||||
|
OnOriginChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color Color
|
||||||
|
{
|
||||||
|
get => _color;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_color == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_color = value;
|
||||||
|
OnColorChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float Depth
|
||||||
|
{
|
||||||
|
get => _depth;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_depth == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_depth = value;
|
||||||
|
OnDepthChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Draw(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
if (!BehaviourController.GameObject.StateEnable.Enabled || !StateEnable.Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ITransform transform = BehaviourController.GameObject.Transform;
|
||||||
|
Vector2D position = transform.Position;
|
||||||
|
Vector2D scale = transform.Scale;
|
||||||
|
|
||||||
|
Rectangle rectangle = new((int)position.X, -(int)position.Y, (int)(Sprite.Texture2D.Width * scale.X), (int)(Sprite.Texture2D.Height * scale.Y));
|
||||||
|
|
||||||
|
spriteBatch.Draw(Sprite.Texture2D, rectangle, null, Color, transform.Rotation, new Vector2(Sprite.Texture2D.Width, Sprite.Texture2D.Height) * Origin, SpriteEffects, Depth);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Assign(ISprite sprite)
|
||||||
|
{
|
||||||
|
_sprite = sprite;
|
||||||
|
OnSpriteAssigned?.Invoke(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DisplayableSpriteBehaviour() => OnUnassigned += OnUnassign;
|
||||||
|
public DisplayableSpriteBehaviour(
|
||||||
|
Color? color = null,
|
||||||
|
float? depth = null,
|
||||||
|
SpriteEffects? spriteEffects = null,
|
||||||
|
Vector2? origin = null)
|
||||||
|
{
|
||||||
|
OnUnassigned += OnUnassign;
|
||||||
|
|
||||||
|
_color = color ?? _color;
|
||||||
|
_depth = depth ?? _depth;
|
||||||
|
_spriteEffects = spriteEffects ?? _spriteEffects;
|
||||||
|
_origin = origin ?? _origin;
|
||||||
|
}
|
||||||
|
private void OnUnassign(IAssignable assignable) => _sprite = null!;
|
||||||
|
}
|
Loading…
Reference in New Issue