win condition
parent
b2198f448b
commit
5eb92804f4
|
@ -0,0 +1,16 @@
|
||||||
|
using Encompass;
|
||||||
|
|
||||||
|
namespace PongFE.Components
|
||||||
|
{
|
||||||
|
public struct BallParametersComponent : IComponent
|
||||||
|
{
|
||||||
|
public int Speed { get; }
|
||||||
|
public double Delay { get; }
|
||||||
|
|
||||||
|
public BallParametersComponent(int speed, double delay)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
Delay = delay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,16 +0,0 @@
|
||||||
using Encompass;
|
|
||||||
|
|
||||||
namespace PongFE.Components
|
|
||||||
{
|
|
||||||
public struct SpawnBallAfterDestroyComponent : IComponent
|
|
||||||
{
|
|
||||||
public float Speed { get; }
|
|
||||||
public float Seconds { get; }
|
|
||||||
|
|
||||||
public SpawnBallAfterDestroyComponent(float speed, float seconds)
|
|
||||||
{
|
|
||||||
Speed = speed;
|
|
||||||
Seconds = seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
using Encompass;
|
||||||
|
using SpriteFontPlus;
|
||||||
|
|
||||||
|
namespace PongFE.Components
|
||||||
|
{
|
||||||
|
public struct UITextComponent : IComponent
|
||||||
|
{
|
||||||
|
public DynamicSpriteFont Font { get; }
|
||||||
|
public string Text { get; }
|
||||||
|
|
||||||
|
public UITextComponent(DynamicSpriteFont font, string text)
|
||||||
|
{
|
||||||
|
Font = font;
|
||||||
|
Text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,35 +5,16 @@ using PongFE.Messages;
|
||||||
namespace PongFE.Engines
|
namespace PongFE.Engines
|
||||||
{
|
{
|
||||||
[Reads(
|
[Reads(
|
||||||
typeof(SpawnBallAfterDestroyComponent),
|
|
||||||
typeof(IncreaseScoreAfterDestroyComponent)
|
typeof(IncreaseScoreAfterDestroyComponent)
|
||||||
)]
|
)]
|
||||||
[Receives(typeof(DestroyMessage))]
|
[Receives(typeof(DestroyMessage))]
|
||||||
[Sends(
|
[Sends(typeof(ScoreMessage))]
|
||||||
typeof(BallSpawnMessage),
|
|
||||||
typeof(ScoreMessage)
|
|
||||||
)]
|
|
||||||
public class DestroyEngine : Engine
|
public class DestroyEngine : Engine
|
||||||
{
|
{
|
||||||
public override void Update(double dt)
|
public override void Update(double dt)
|
||||||
{
|
{
|
||||||
foreach (ref readonly var message in ReadMessages<DestroyMessage>())
|
foreach (ref readonly var message in ReadMessages<DestroyMessage>())
|
||||||
{
|
{
|
||||||
if (HasComponent<SpawnBallAfterDestroyComponent>(message.Entity))
|
|
||||||
{
|
|
||||||
ref readonly var respawnComponent = ref GetComponent<SpawnBallAfterDestroyComponent>(message.Entity);
|
|
||||||
|
|
||||||
SendMessage(
|
|
||||||
new BallSpawnMessage(
|
|
||||||
new MoonTools.Structs.Position2D(640, 360),
|
|
||||||
respawnComponent.Speed,
|
|
||||||
16,
|
|
||||||
16
|
|
||||||
),
|
|
||||||
respawnComponent.Seconds
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (HasComponent<IncreaseScoreAfterDestroyComponent>(message.Entity))
|
if (HasComponent<IncreaseScoreAfterDestroyComponent>(message.Entity))
|
||||||
{
|
{
|
||||||
SendMessage(new ScoreMessage(message.DestroyedBy));
|
SendMessage(new ScoreMessage(message.DestroyedBy));
|
||||||
|
|
|
@ -1,22 +1,39 @@
|
||||||
using Encompass;
|
using Encompass;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
using MoonTools.Structs;
|
||||||
using PongFE.Components;
|
using PongFE.Components;
|
||||||
using PongFE.Enums;
|
using PongFE.Enums;
|
||||||
using PongFE.Messages;
|
using PongFE.Messages;
|
||||||
|
using SpriteFontPlus;
|
||||||
|
|
||||||
namespace PongFE.Engines
|
namespace PongFE.Engines
|
||||||
{
|
{
|
||||||
[Reads(typeof(GameStateComponent), typeof(PlayAreaComponent))]
|
[Reads(
|
||||||
|
typeof(PositionComponent),
|
||||||
|
typeof(GameStateComponent),
|
||||||
|
typeof(PlayAreaComponent),
|
||||||
|
typeof(UITextComponent)
|
||||||
|
)]
|
||||||
[Receives(typeof(ChangeGameStateMessage))]
|
[Receives(typeof(ChangeGameStateMessage))]
|
||||||
[Sends(
|
[Sends(
|
||||||
typeof(BallSpawnMessage),
|
typeof(BallSpawnMessage),
|
||||||
typeof(PaddleSpawnMessage),
|
typeof(PaddleSpawnMessage),
|
||||||
typeof(BoundarySpawnMessage),
|
typeof(BoundarySpawnMessage),
|
||||||
typeof(GoalBoundarySpawnMessage)
|
typeof(GoalBoundarySpawnMessage),
|
||||||
|
typeof(UITextSpawnMessage)
|
||||||
)]
|
)]
|
||||||
[Writes(typeof(GameStateComponent))]
|
[Writes(typeof(GameStateComponent))]
|
||||||
public class GameStateEngine : Engine
|
public class GameStateEngine : Engine
|
||||||
{
|
{
|
||||||
|
private DynamicSpriteFont TitleFont { get; }
|
||||||
|
private DynamicSpriteFont InstructionFont { get; }
|
||||||
|
|
||||||
|
public GameStateEngine(DynamicSpriteFont titleFont, DynamicSpriteFont instructionFont)
|
||||||
|
{
|
||||||
|
TitleFont = titleFont;
|
||||||
|
InstructionFont = instructionFont;
|
||||||
|
}
|
||||||
|
|
||||||
public override void Update(double dt)
|
public override void Update(double dt)
|
||||||
{
|
{
|
||||||
ref readonly var gameStateEntity = ref ReadEntity<GameStateComponent>();
|
ref readonly var gameStateEntity = ref ReadEntity<GameStateComponent>();
|
||||||
|
@ -42,15 +59,12 @@ namespace PongFE.Engines
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gameStateComponent.GameState == GameState.Game)
|
if (changeGameStateMessage.GameState == GameState.Title)
|
||||||
{
|
{
|
||||||
if (changeGameStateMessage.GameState == GameState.Title)
|
EndGame();
|
||||||
{
|
StartTitle();
|
||||||
EndGame();
|
|
||||||
StartTitle();
|
|
||||||
|
|
||||||
SetComponent(gameStateEntity, new GameStateComponent(GameState.Title));
|
SetComponent(gameStateEntity, new GameStateComponent(GameState.Title));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,12 +151,36 @@ namespace PongFE.Engines
|
||||||
|
|
||||||
private void StartTitle()
|
private void StartTitle()
|
||||||
{
|
{
|
||||||
|
ref readonly var playAreaComponent = ref ReadComponent<PlayAreaComponent>();
|
||||||
|
|
||||||
|
var titleDimensions = TitleFont.MeasureString("PongFE");
|
||||||
|
var titlePosition = new Position2D(
|
||||||
|
(playAreaComponent.Width - titleDimensions.X) / 2,
|
||||||
|
(playAreaComponent.Height - titleDimensions.Y) / 4
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessage(new UITextSpawnMessage(
|
||||||
|
titlePosition,
|
||||||
|
TitleFont,
|
||||||
|
"PongFE"
|
||||||
|
));
|
||||||
|
|
||||||
|
var instructionDimensions = InstructionFont.MeasureString("Press Enter to begin");
|
||||||
|
var instructionPosition = new Position2D(
|
||||||
|
(playAreaComponent.Width - instructionDimensions.X) / 2,
|
||||||
|
playAreaComponent.Height * 2 / 3
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessage(new UITextSpawnMessage(
|
||||||
|
instructionPosition,
|
||||||
|
InstructionFont,
|
||||||
|
"Press Enter to play"
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EndTitle()
|
private void EndTitle()
|
||||||
{
|
{
|
||||||
|
DestroyAllWith<UITextComponent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
using Encompass;
|
||||||
|
using PongFE.Components;
|
||||||
|
using PongFE.Enums;
|
||||||
|
using PongFE.Messages;
|
||||||
|
using SpriteFontPlus;
|
||||||
|
|
||||||
|
namespace PongFE.Engines
|
||||||
|
{
|
||||||
|
[Reads(typeof(PlayAreaComponent))]
|
||||||
|
[Receives(typeof(GameWinMessage))]
|
||||||
|
[Sends(typeof(UITextSpawnMessage), typeof(ChangeGameStateMessage))]
|
||||||
|
public class GameWinEngine : Engine
|
||||||
|
{
|
||||||
|
public DynamicSpriteFont Font { get; }
|
||||||
|
private readonly string _playerOneWinText = "Player 1 Wins!";
|
||||||
|
private readonly string _playerTwoWinText = "Player 2 Wins!";
|
||||||
|
|
||||||
|
public GameWinEngine(DynamicSpriteFont font)
|
||||||
|
{
|
||||||
|
Font = font;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(double dt)
|
||||||
|
{
|
||||||
|
if (SomeMessage<GameWinMessage>())
|
||||||
|
{
|
||||||
|
ref readonly var gameWinMessage = ref ReadMessage<GameWinMessage>();
|
||||||
|
ref readonly var playAreaComponent = ref ReadComponent<PlayAreaComponent>();
|
||||||
|
|
||||||
|
string winText;
|
||||||
|
if (gameWinMessage.PlayerIndex == PlayerIndex.One)
|
||||||
|
{
|
||||||
|
winText = _playerOneWinText;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
winText = _playerTwoWinText;
|
||||||
|
}
|
||||||
|
|
||||||
|
var textDimensions = Font.MeasureString(winText);
|
||||||
|
|
||||||
|
SendMessage(new UITextSpawnMessage(
|
||||||
|
new MoonTools.Structs.Position2D(
|
||||||
|
(playAreaComponent.Width - textDimensions.X) / 2,
|
||||||
|
playAreaComponent.Height / 4
|
||||||
|
),
|
||||||
|
Font,
|
||||||
|
winText
|
||||||
|
));
|
||||||
|
|
||||||
|
SendMessage(new ChangeGameStateMessage(GameState.Title), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,8 +4,13 @@ using PongFE.Messages;
|
||||||
|
|
||||||
namespace PongFE.Engines
|
namespace PongFE.Engines
|
||||||
{
|
{
|
||||||
[Reads(typeof(ScoreComponent))]
|
[Reads(
|
||||||
|
typeof(ScoreComponent),
|
||||||
|
typeof(PlayerComponent),
|
||||||
|
typeof(BallParametersComponent)
|
||||||
|
)]
|
||||||
[Receives(typeof(ScoreMessage))]
|
[Receives(typeof(ScoreMessage))]
|
||||||
|
[Sends(typeof(GameWinMessage), typeof(BallSpawnMessage))]
|
||||||
[Writes(typeof(ScoreComponent))]
|
[Writes(typeof(ScoreComponent))]
|
||||||
public class ScoreEngine : Engine
|
public class ScoreEngine : Engine
|
||||||
{
|
{
|
||||||
|
@ -17,6 +22,26 @@ namespace PongFE.Engines
|
||||||
{
|
{
|
||||||
ref readonly var scoreComponent = ref GetComponent<ScoreComponent>(scoreMessage.Entity);
|
ref readonly var scoreComponent = ref GetComponent<ScoreComponent>(scoreMessage.Entity);
|
||||||
SetComponent(scoreMessage.Entity, new ScoreComponent(scoreComponent.Score + 1));
|
SetComponent(scoreMessage.Entity, new ScoreComponent(scoreComponent.Score + 1));
|
||||||
|
|
||||||
|
if (scoreComponent.Score + 1 >= 2)
|
||||||
|
{
|
||||||
|
ref readonly var playerComponent = ref GetComponent<PlayerComponent>(scoreMessage.Entity);
|
||||||
|
SendMessage(new GameWinMessage(playerComponent.PlayerIndex));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ref readonly var ballParametersComponent = ref ReadComponent<BallParametersComponent>();
|
||||||
|
|
||||||
|
SendMessage(
|
||||||
|
new BallSpawnMessage(
|
||||||
|
new MoonTools.Structs.Position2D(640, (int)MathHelper.RandomFloat(20, 700)),
|
||||||
|
ballParametersComponent.Speed,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
),
|
||||||
|
ballParametersComponent.Delay
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ namespace PongFE.Spawners
|
||||||
AddComponent(ball, new BounceResponseComponent());
|
AddComponent(ball, new BounceResponseComponent());
|
||||||
AddComponent(ball, new CanBeTrackedComponent());
|
AddComponent(ball, new CanBeTrackedComponent());
|
||||||
AddComponent(ball, new CanBeDestroyedComponent());
|
AddComponent(ball, new CanBeDestroyedComponent());
|
||||||
AddComponent(ball, new SpawnBallAfterDestroyComponent(message.Speed, 0.5f));
|
|
||||||
AddComponent(ball, new IncreaseScoreAfterDestroyComponent());
|
AddComponent(ball, new IncreaseScoreAfterDestroyComponent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
using Encompass;
|
||||||
|
using PongFE.Components;
|
||||||
|
using PongFE.Messages;
|
||||||
|
|
||||||
|
namespace PongFE.Spawners
|
||||||
|
{
|
||||||
|
public class UITextSpawner : Spawner<UITextSpawnMessage>
|
||||||
|
{
|
||||||
|
protected override void Spawn(UITextSpawnMessage message)
|
||||||
|
{
|
||||||
|
var entity = CreateEntity();
|
||||||
|
|
||||||
|
AddComponent(entity, new PositionComponent(message.Position));
|
||||||
|
AddComponent(entity, new UITextComponent(message.Font, message.Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,6 +26,7 @@ namespace PongFE.Enums
|
||||||
|
|
||||||
public enum GameState
|
public enum GameState
|
||||||
{
|
{
|
||||||
|
Init,
|
||||||
Title,
|
Title,
|
||||||
Game
|
Game
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
using Encompass;
|
||||||
|
using PongFE.Enums;
|
||||||
|
|
||||||
|
namespace PongFE.Messages
|
||||||
|
{
|
||||||
|
public struct GameWinMessage : IMessage
|
||||||
|
{
|
||||||
|
public PlayerIndex PlayerIndex { get; }
|
||||||
|
|
||||||
|
public GameWinMessage(PlayerIndex playerIndex)
|
||||||
|
{
|
||||||
|
PlayerIndex = playerIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
using Encompass;
|
||||||
|
using MoonTools.Structs;
|
||||||
|
using SpriteFontPlus;
|
||||||
|
|
||||||
|
namespace PongFE.Messages
|
||||||
|
{
|
||||||
|
public struct UITextSpawnMessage : IMessage
|
||||||
|
{
|
||||||
|
public Position2D Position { get; }
|
||||||
|
public string Text { get; }
|
||||||
|
public DynamicSpriteFont Font { get; }
|
||||||
|
|
||||||
|
public UITextSpawnMessage(Position2D position, DynamicSpriteFont font, string text)
|
||||||
|
{
|
||||||
|
Position = position;
|
||||||
|
Font = font;
|
||||||
|
Text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -69,7 +69,7 @@ namespace PongFE
|
||||||
48
|
48
|
||||||
);
|
);
|
||||||
|
|
||||||
WorldBuilder.AddEngine(new GameStateEngine());
|
WorldBuilder.AddEngine(new GameStateEngine(ScoreFont, InstructionFont));
|
||||||
WorldBuilder.AddEngine(new InputEngine());
|
WorldBuilder.AddEngine(new InputEngine());
|
||||||
WorldBuilder.AddEngine(new PaddleMovementEngine());
|
WorldBuilder.AddEngine(new PaddleMovementEngine());
|
||||||
WorldBuilder.AddEngine(new VelocityEngine());
|
WorldBuilder.AddEngine(new VelocityEngine());
|
||||||
|
@ -82,23 +82,29 @@ namespace PongFE
|
||||||
WorldBuilder.AddEngine(new UpdatePositionEngine());
|
WorldBuilder.AddEngine(new UpdatePositionEngine());
|
||||||
WorldBuilder.AddEngine(new UpdateVelocityEngine());
|
WorldBuilder.AddEngine(new UpdateVelocityEngine());
|
||||||
WorldBuilder.AddEngine(new ComputerControlEngine());
|
WorldBuilder.AddEngine(new ComputerControlEngine());
|
||||||
|
WorldBuilder.AddEngine(new GameWinEngine(ScoreFont));
|
||||||
|
|
||||||
WorldBuilder.AddEngine(new BallSpawner(WhitePixel));
|
WorldBuilder.AddEngine(new BallSpawner(WhitePixel));
|
||||||
WorldBuilder.AddEngine(new BoundarySpawner());
|
WorldBuilder.AddEngine(new BoundarySpawner());
|
||||||
WorldBuilder.AddEngine(new GoalBoundarySpawner());
|
WorldBuilder.AddEngine(new GoalBoundarySpawner());
|
||||||
WorldBuilder.AddEngine(new PaddleSpawner(WhitePixel));
|
WorldBuilder.AddEngine(new PaddleSpawner(WhitePixel));
|
||||||
|
WorldBuilder.AddEngine(new UITextSpawner());
|
||||||
|
|
||||||
WorldBuilder.AddOrderedRenderer(new Texture2DRenderer(SpriteBatch));
|
WorldBuilder.AddOrderedRenderer(new Texture2DRenderer(SpriteBatch));
|
||||||
WorldBuilder.AddGeneralRenderer(new CenterLineRenderer(SpriteBatch, WhitePixel), 0);
|
WorldBuilder.AddGeneralRenderer(new CenterLineRenderer(SpriteBatch, WhitePixel), 0);
|
||||||
WorldBuilder.AddGeneralRenderer(new ScoreRenderer(SpriteBatch, ScoreFont), 0);
|
WorldBuilder.AddGeneralRenderer(new ScoreRenderer(SpriteBatch, ScoreFont), 0);
|
||||||
WorldBuilder.AddGeneralRenderer(new TitleRenderer(SpriteBatch, ScoreFont, InstructionFont), 0);
|
WorldBuilder.AddGeneralRenderer(new UITextRenderer(SpriteBatch), 0);
|
||||||
|
|
||||||
var playAreaEntity = WorldBuilder.CreateEntity();
|
var playAreaEntity = WorldBuilder.CreateEntity();
|
||||||
WorldBuilder.SetComponent(playAreaEntity, new PlayAreaComponent(PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT));
|
WorldBuilder.SetComponent(playAreaEntity, new PlayAreaComponent(PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT));
|
||||||
|
|
||||||
var gameStateEntity = WorldBuilder.CreateEntity();
|
var gameStateEntity = WorldBuilder.CreateEntity();
|
||||||
WorldBuilder.SetComponent(gameStateEntity, new GameStateComponent(GameState.Title));
|
WorldBuilder.SetComponent(gameStateEntity, new GameStateComponent(GameState.Init));
|
||||||
|
|
||||||
|
var ballParametersEntity = WorldBuilder.CreateEntity();
|
||||||
|
WorldBuilder.SetComponent(ballParametersEntity, new BallParametersComponent(500, 0.5));
|
||||||
|
|
||||||
|
WorldBuilder.SendMessage(new ChangeGameStateMessage(GameState.Title));
|
||||||
World = WorldBuilder.Build();
|
World = WorldBuilder.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
using Encompass;
|
|
||||||
using Microsoft.Xna.Framework;
|
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
|
||||||
using PongFE.Components;
|
|
||||||
using PongFE.Enums;
|
|
||||||
using SpriteFontPlus;
|
|
||||||
|
|
||||||
namespace PongFE.Renderers
|
|
||||||
{
|
|
||||||
public class TitleRenderer : GeneralRenderer
|
|
||||||
{
|
|
||||||
private SpriteBatch SpriteBatch { get; }
|
|
||||||
private DynamicSpriteFont TitleFont { get; }
|
|
||||||
private DynamicSpriteFont InstructionFont { get; }
|
|
||||||
|
|
||||||
public TitleRenderer(SpriteBatch spriteBatch, DynamicSpriteFont titleFont, DynamicSpriteFont instructionFont)
|
|
||||||
{
|
|
||||||
SpriteBatch = spriteBatch;
|
|
||||||
TitleFont = titleFont;
|
|
||||||
InstructionFont = instructionFont;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Render()
|
|
||||||
{
|
|
||||||
ref readonly var gameStateComponent = ref ReadComponent<GameStateComponent>();
|
|
||||||
ref readonly var playAreaComponent = ref ReadComponent<PlayAreaComponent>();
|
|
||||||
|
|
||||||
if (gameStateComponent.GameState == GameState.Title)
|
|
||||||
{
|
|
||||||
var titleDimensions = TitleFont.MeasureString("PongFE");
|
|
||||||
var titlePosition = new Vector2(
|
|
||||||
(playAreaComponent.Width - titleDimensions.X) / 2,
|
|
||||||
(playAreaComponent.Height - titleDimensions.Y) / 4
|
|
||||||
);
|
|
||||||
|
|
||||||
var instructionDimensions = InstructionFont.MeasureString("Press Enter to begin");
|
|
||||||
var instructionPosition = new Vector2(
|
|
||||||
(playAreaComponent.Width - instructionDimensions.X) / 2,
|
|
||||||
playAreaComponent.Height * 2 / 3
|
|
||||||
);
|
|
||||||
|
|
||||||
SpriteBatch.DrawString(TitleFont, "PongFE", titlePosition, Color.White);
|
|
||||||
SpriteBatch.DrawString(InstructionFont, "Press Enter to begin", instructionPosition, Color.White);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
using Encompass;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using PongFE.Components;
|
||||||
|
using PongFE.Extensions;
|
||||||
|
using SpriteFontPlus;
|
||||||
|
|
||||||
|
namespace PongFE.Renderers
|
||||||
|
{
|
||||||
|
public class UITextRenderer : GeneralRenderer
|
||||||
|
{
|
||||||
|
private SpriteBatch SpriteBatch { get; }
|
||||||
|
|
||||||
|
public UITextRenderer(SpriteBatch spriteBatch)
|
||||||
|
{
|
||||||
|
SpriteBatch = spriteBatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Render()
|
||||||
|
{
|
||||||
|
foreach (ref readonly var entity in ReadEntities<UITextComponent>())
|
||||||
|
{
|
||||||
|
ref readonly var uiTextComponent = ref GetComponent<UITextComponent>(entity);
|
||||||
|
ref readonly var positionComponent = ref GetComponent<PositionComponent>(entity);
|
||||||
|
|
||||||
|
SpriteBatch.DrawString(
|
||||||
|
uiTextComponent.Font,
|
||||||
|
uiTextComponent.Text,
|
||||||
|
positionComponent.Position.ToXNAVector(),
|
||||||
|
Color.White
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
Subproject commit 59014c7a9e7c3c90b902c8025d907a33a0ffb75c
|
Subproject commit b4a5a4c66adb1fe268954acdfb6839bd21189b1d
|
Loading…
Reference in New Issue