64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using Mine2d.engine;
|
|
|
|
namespace Mine2d.game.frontend.renderer;
|
|
|
|
public class PlayerRenderer : IRenderer
|
|
{
|
|
private IntPtr playerTexture;
|
|
|
|
public void Render()
|
|
{
|
|
if (this.playerTexture == IntPtr.Zero)
|
|
{
|
|
this.playerTexture = Context.Get().TextureFactory.LoadTexture("character.character");
|
|
}
|
|
var ctx = Context.Get();
|
|
var camera = ctx.FrontendGameState.Camera;
|
|
var scale = ctx.FrontendGameState.Settings.GameScale;
|
|
var (width, height) = ctx.Window.GetSize();
|
|
foreach (var player in ctx.GameState.Players)
|
|
{
|
|
if (player.Name == ctx.FrontendGameState.PlayerName)
|
|
{
|
|
ctx.Renderer.SetColor(0, 0, 255);
|
|
}
|
|
else
|
|
{
|
|
ctx.Renderer.SetColor(255, 0, 0);
|
|
}
|
|
|
|
// ctx.Renderer.DrawRect(
|
|
// (player.Position.X - (int)camera.Position.X) * scale,
|
|
// (player.Position.Y - (int)camera.Position.Y) * scale - 28 * scale,
|
|
// 14 * scale,
|
|
// 28 * scale
|
|
// );
|
|
var y = player.PlayerMovementState.MovingRight ? 32 * 3 : 32 * 1;
|
|
var moving = player.PlayerMovementState.CurrentVelocity.X != 0;
|
|
var dt = (DateTime.Now - DateTime.MinValue).TotalMilliseconds;
|
|
var x = 0;
|
|
if(moving)
|
|
{
|
|
x = (int)((dt / 100) % 6) * 16;
|
|
y += 32;
|
|
}
|
|
if(!player.PlayerMovementState.IsGrounded)
|
|
{
|
|
x = 0;
|
|
y = player.PlayerMovementState.MovingRight ? 32 * 6 : 32 * 5;
|
|
}
|
|
ctx.Renderer.DrawTexture(
|
|
this.playerTexture,
|
|
width / 2,
|
|
(height / 2) - (32 * scale),
|
|
16 * scale,
|
|
32 * scale,
|
|
x,
|
|
y,
|
|
16,
|
|
32
|
|
);
|
|
}
|
|
}
|
|
}
|