initial paddle drawing

main
Evan Hemsley 2020-07-11 18:25:43 -07:00
parent b4993eaeb8
commit f1cb6fe9ec
11 changed files with 115 additions and 2 deletions

2
.gitignore vendored
View File

@ -3,6 +3,8 @@
## ##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
fnalibs/
# User-specific files # User-specific files
*.rsuser *.rsuser
*.suo *.suo

3
.gitmodules vendored
View File

@ -4,3 +4,6 @@
[submodule "encompass-cs"] [submodule "encompass-cs"]
path = encompass-cs path = encompass-cs
url = https://gitea.moonside.games/MoonsideGames/encompass-cs.git url = https://gitea.moonside.games/MoonsideGames/encompass-cs.git
[submodule "MoonTools.Structs"]
path = MoonTools.Structs
url = git@gitea.moonside.games:MoonsideGames/MoonTools.Structs.git

1
MoonTools.Structs Submodule

@ -0,0 +1 @@
Subproject commit a3a5803961d5f172a2376f7b0451ba21bd5842b6

View File

@ -0,0 +1,15 @@
using Encompass;
using MoonTools.Structs;
namespace PongFE.Components
{
public struct PositionComponent : IComponent
{
public Position2D Position { get; }
public PositionComponent(Position2D position)
{
Position = position;
}
}
}

View File

@ -0,0 +1,17 @@
using Encompass;
using Microsoft.Xna.Framework.Graphics;
namespace PongFE.Components
{
public struct Texture2DComponent : IComponent, IDrawableComponent
{
public Texture2D Texture { get; }
public int Layer { get; }
public Texture2DComponent(Texture2D texture, int layer)
{
Texture = texture;
Layer = layer;
}
}
}

View File

@ -0,0 +1,12 @@
using MoonTools.Structs;
namespace PongFE.Extensions
{
public static class Position2DExtensions
{
public static Microsoft.Xna.Framework.Vector2 ToXNAVector(this Position2D position)
{
return new Microsoft.Xna.Framework.Vector2(position.X, position.Y);
}
}
}

View File

@ -25,6 +25,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\FNA\FNA.Core.csproj"/> <ProjectReference Include="..\FNA\FNA.Core.csproj"/>
<ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" /> <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" />
<ProjectReference Include="..\MoonTools.Structs\Structs\Structs.csproj" />
</ItemGroup> </ItemGroup>
<Import Project="..\build\CopyFNALibs.targets"/> <Import Project="..\build\CopyFNALibs.targets"/>
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" /> <Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />

View File

@ -28,6 +28,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\FNA\FNA.csproj"/> <ProjectReference Include="..\FNA\FNA.csproj"/>
<ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" /> <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" />
<ProjectReference Include="..\MoonTools.Structs\Structs\Structs.csproj" />
</ItemGroup> </ItemGroup>
<Import Project="..\build\CopyFNALibs.targets"/> <Import Project="..\build\CopyFNALibs.targets"/>
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" /> <Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />

View File

@ -1,6 +1,8 @@
using Encompass; using Encompass;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using PongFE.Components;
using PongFE.Renderers;
namespace PongFE namespace PongFE
{ {
@ -11,6 +13,10 @@ namespace PongFE
WorldBuilder WorldBuilder { get; } = new WorldBuilder(); WorldBuilder WorldBuilder { get; } = new WorldBuilder();
World World { get; set; } World World { get; set; }
SpriteBatch SpriteBatch { get; set; }
Texture2D WhitePixel { get; set; }
RenderTarget2D PaddleTexture { get; set; }
public PongFEGame() public PongFEGame()
{ {
graphics = new GraphicsDeviceManager(this); graphics = new GraphicsDeviceManager(this);
@ -25,6 +31,24 @@ namespace PongFE
protected override void LoadContent() protected override void LoadContent()
{ {
SpriteBatch = new SpriteBatch(GraphicsDevice);
WhitePixel = new Texture2D(GraphicsDevice, 1, 1);
WhitePixel.SetData(new Color[] { Color.White });
PaddleTexture = new RenderTarget2D(GraphicsDevice, 20, 80);
GraphicsDevice.SetRenderTarget(PaddleTexture);
SpriteBatch.Begin();
SpriteBatch.Draw(WhitePixel, new Rectangle(0, 0, 20, 80), Color.White);
SpriteBatch.End();
GraphicsDevice.SetRenderTarget(null);
WorldBuilder.AddOrderedRenderer(new Texture2DRenderer(SpriteBatch));
var paddle = WorldBuilder.CreateEntity();
WorldBuilder.SetComponent(paddle, new PositionComponent(new MoonTools.Structs.Position2D(5, 5)));
WorldBuilder.SetComponent(paddle, new Texture2DComponent(PaddleTexture, 0));
World = WorldBuilder.Build(); World = WorldBuilder.Build();
} }
@ -42,9 +66,11 @@ namespace PongFE
protected override void Draw(GameTime gameTime) protected override void Draw(GameTime gameTime)
{ {
GraphicsDevice.Clear(Color.CornflowerBlue); GraphicsDevice.Clear(Color.Black);
SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);
World.Draw(); World.Draw();
SpriteBatch.End();
base.Draw(gameTime); base.Draw(gameTime);
} }

View File

@ -28,7 +28,7 @@ namespace PongFE
} }
// https://github.com/FNA-XNA/FNA/wiki/7:-FNA-Environment-Variables#fna_graphics_enable_highdpi // https://github.com/FNA-XNA/FNA/wiki/7:-FNA-Environment-Variables#fna_graphics_enable_highdpi
// NOTE: from documentation: // NOTE: from documentation:
// Lastly, when packaging for macOS, be sure this is in your app bundle's Info.plist: // Lastly, when packaging for macOS, be sure this is in your app bundle's Info.plist:
// <key>NSHighResolutionCapable</key> // <key>NSHighResolutionCapable</key>
// <string>True</string> // <string>True</string>

View File

@ -0,0 +1,35 @@
using Encompass;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using PongFE.Components;
using PongFE.Extensions;
namespace PongFE.Renderers
{
public class Texture2DRenderer : OrderedRenderer<Texture2DComponent>
{
private readonly SpriteBatch _spriteBatch;
public Texture2DRenderer(SpriteBatch spriteBatch)
{
_spriteBatch = spriteBatch;
}
public override void Render(Entity entity, in Texture2DComponent textureComponent)
{
ref readonly var positionComponent = ref GetComponent<PositionComponent>(entity);
_spriteBatch.Draw(
textureComponent.Texture,
positionComponent.Position.Truncated().ToXNAVector(),
null,
Color.White,
0,
Vector2.Zero,
Vector2.One,
SpriteEffects.None,
0
);
}
}
}