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 ); } } }