format
This commit is contained in:
parent
ceeeb070e9
commit
f96e19b407
|
|
@ -10,13 +10,13 @@ class Context
|
|||
public static Context? instance { get; set; }
|
||||
|
||||
public Context(
|
||||
bool isHost,
|
||||
IBackend backend,
|
||||
IFrontend frontend,
|
||||
GameState gameState,
|
||||
FrontendGameState frontendGameState,
|
||||
Renderer renderer,
|
||||
Window window
|
||||
bool isHost,
|
||||
IBackend backend,
|
||||
IFrontend frontend,
|
||||
GameState gameState,
|
||||
FrontendGameState frontendGameState,
|
||||
Renderer renderer,
|
||||
Window window
|
||||
)
|
||||
{
|
||||
this.IsHost = isHost;
|
||||
|
|
|
|||
|
|
@ -4,30 +4,30 @@ class MultiPlayerGame : Game
|
|||
|
||||
public MultiPlayerGame(bool isHost)
|
||||
{
|
||||
var window = new Window("MultiPlayerGame", 1200, 800);
|
||||
var window = new Window("MultiPlayerGame" + (isHost ? " - host" : ""), 1200, 800);
|
||||
if (isHost)
|
||||
{
|
||||
this.ctx = new Context(
|
||||
isHost,
|
||||
new Backend(),
|
||||
new Frontend(),
|
||||
new GameState(),
|
||||
new FrontendGameState(),
|
||||
new Renderer(window),
|
||||
window
|
||||
);
|
||||
isHost,
|
||||
new Backend(),
|
||||
new Frontend(),
|
||||
new GameState(),
|
||||
new FrontendGameState(),
|
||||
new Renderer(window),
|
||||
window
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ctx = new Context(
|
||||
isHost,
|
||||
new RemoteBackend(),
|
||||
new Frontend(),
|
||||
new GameState(),
|
||||
new FrontendGameState(),
|
||||
new Renderer(window),
|
||||
window
|
||||
);
|
||||
isHost,
|
||||
new RemoteBackend(),
|
||||
new Frontend(),
|
||||
new GameState(),
|
||||
new FrontendGameState(),
|
||||
new Renderer(window),
|
||||
window
|
||||
);
|
||||
}
|
||||
ctx.Backend.Init();
|
||||
ctx.Frontend.Init();
|
||||
|
|
|
|||
|
|
@ -6,11 +6,9 @@ using WatsonTcp;
|
|||
class Backend : IBackend
|
||||
{
|
||||
private WatsonTcpServer server;
|
||||
private int nextId = 0;
|
||||
|
||||
public void Process(double dt)
|
||||
{
|
||||
nextId++;
|
||||
var ctx = Context.Get();
|
||||
ctx.GameState.PlayerPositions.ForEach(player =>
|
||||
{
|
||||
|
|
@ -24,20 +22,25 @@ class Backend : IBackend
|
|||
var gameState = Context.Get().GameState;
|
||||
if (packet is MovePacket movePacket)
|
||||
{
|
||||
if (gameState.PlayerPositions.Find(player => player.name == movePacket.playerName) is Player player)
|
||||
if (
|
||||
gameState.PlayerPositions.Find(player => player.name == movePacket.playerName)
|
||||
is Player player
|
||||
)
|
||||
{
|
||||
player.movement = movePacket.movement;
|
||||
player.movement = movePacket.movement * 4;
|
||||
}
|
||||
}
|
||||
if (packet is ConnectPacket connectPacket)
|
||||
{
|
||||
Console.WriteLine($"Player {connectPacket.playerName} connected");
|
||||
gameState.PlayerPositions.Add(new Player
|
||||
{
|
||||
name = connectPacket.playerName,
|
||||
position = new Vector2(50, 50),
|
||||
movement = new Vector2(0, 0)
|
||||
});
|
||||
gameState.PlayerPositions.Add(
|
||||
new Player
|
||||
{
|
||||
name = connectPacket.playerName,
|
||||
position = new Vector2(50, 50),
|
||||
movement = new Vector2(0, 0)
|
||||
}
|
||||
);
|
||||
}
|
||||
this.sendGameState();
|
||||
}
|
||||
|
|
@ -74,6 +77,7 @@ class Backend : IBackend
|
|||
|
||||
private void messageReceived(object? sender, MessageReceivedEventArgs args)
|
||||
{
|
||||
var time = DateTime.Now;
|
||||
Console.WriteLine("Message Received: " + args.IpPort);
|
||||
var packet = Converter.ParsePacket(args.Data);
|
||||
Console.WriteLine("Received packet: " + packet);
|
||||
|
|
@ -81,13 +85,16 @@ class Backend : IBackend
|
|||
{
|
||||
this.ProcessPacket(packet);
|
||||
}
|
||||
Console.WriteLine(DateTime.Now - time);
|
||||
}
|
||||
|
||||
private void sendGameState()
|
||||
{
|
||||
if (server == null) return;
|
||||
if (server == null)
|
||||
return;
|
||||
var clients = server.ListClients();
|
||||
if (clients.Count() == 0) return;
|
||||
if (clients.Count() == 0)
|
||||
return;
|
||||
var gameState = Context.Get().GameState;
|
||||
var json = JsonConvert.SerializeObject(gameState);
|
||||
var bytes = Encoding.UTF8.GetBytes(json);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,11 @@ class RemoteBackend : IBackend
|
|||
|
||||
public void Process(double dt)
|
||||
{
|
||||
|
||||
// var ctx = Context.Get();
|
||||
// ctx.GameState.PlayerPositions.ForEach(player =>
|
||||
// {
|
||||
// player.position += player.movement;
|
||||
// });
|
||||
}
|
||||
|
||||
public void ProcessPacket(ValueType packet)
|
||||
|
|
@ -19,6 +23,11 @@ class RemoteBackend : IBackend
|
|||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
Task.Run(this.Run);
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
client = new WatsonTcpClient("127.0.0.1", 42069);
|
||||
client.Events.MessageReceived += (sender, args) =>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
enum Sound
|
||||
{
|
||||
}
|
||||
enum Sound { }
|
||||
|
||||
class AudioPlayer
|
||||
{
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ class FontManager
|
|||
|
||||
public void RegisterFont(string name, string path, int fontSize)
|
||||
{
|
||||
if (fonts.ContainsKey(name)) return;
|
||||
if (fonts.ContainsKey(name))
|
||||
return;
|
||||
var res = resourceLoader.LoadToIntPtr(path);
|
||||
var sdlBuffer = SDL_RWFromConstMem(res.ptr, res.size);
|
||||
var font = TTF_OpenFontRW(sdlBuffer, 1, fontSize);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
abstract class Game
|
||||
{
|
||||
public const int TPS = 64;
|
||||
public const int TPS = 128;
|
||||
private Queue<int> fpsQueue = new Queue<int>();
|
||||
protected abstract void update(double dt);
|
||||
protected abstract void draw();
|
||||
|
|
|
|||
|
|
@ -9,7 +9,11 @@ class Renderer
|
|||
|
||||
public Renderer(Window window)
|
||||
{
|
||||
this.renderer = SDL_CreateRenderer(window.GetWindow(), -1, SDL_RendererFlags.SDL_RENDERER_ACCELERATED);
|
||||
this.renderer = SDL_CreateRenderer(
|
||||
window.GetWindow(),
|
||||
-1,
|
||||
SDL_RendererFlags.SDL_RENDERER_ACCELERATED
|
||||
);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
|
|
|
|||
|
|
@ -15,14 +15,16 @@ class ResourceLoader
|
|||
Console.WriteLine("Loading resource: " + resourceName);
|
||||
return File.ReadAllText(ToPath(resourceName));
|
||||
#endif
|
||||
using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}");
|
||||
using var stream = this.GetType()
|
||||
.Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}");
|
||||
using var reader = new StreamReader(stream!);
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
|
||||
public byte[] LoadBytes(string resourceName)
|
||||
{
|
||||
using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}");
|
||||
using var stream = this.GetType()
|
||||
.Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}");
|
||||
using var memoryStream = new MemoryStream();
|
||||
stream!.CopyTo(memoryStream);
|
||||
return memoryStream.ToArray();
|
||||
|
|
|
|||
|
|
@ -6,7 +6,14 @@ class Window
|
|||
|
||||
public Window(string title, int w, int h)
|
||||
{
|
||||
window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WindowFlags.SDL_WINDOW_VULKAN | SDL_WindowFlags.SDL_WINDOW_RESIZABLE);
|
||||
window = SDL_CreateWindow(
|
||||
title,
|
||||
SDL_WINDOWPOS_CENTERED,
|
||||
SDL_WINDOWPOS_CENTERED,
|
||||
w,
|
||||
h,
|
||||
SDL_WindowFlags.SDL_WINDOW_VULKAN | SDL_WindowFlags.SDL_WINDOW_RESIZABLE
|
||||
);
|
||||
}
|
||||
|
||||
public Window(string title, int x, int y, int w, int h, SDL_WindowFlags flags)
|
||||
|
|
@ -26,7 +33,8 @@ class Window
|
|||
|
||||
public (int width, int height) GetSize()
|
||||
{
|
||||
int w, h;
|
||||
int w,
|
||||
h;
|
||||
SDL_GetWindowSize(this.window, out w, out h);
|
||||
return (w, h);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@ class OnECSEvent : Attribute
|
|||
public EventPriority Priority = EventPriority.Normal;
|
||||
}
|
||||
|
||||
class OnTickEvent : OnECSEvent
|
||||
{
|
||||
}
|
||||
class OnTickEvent : OnECSEvent { }
|
||||
|
||||
struct TickEvent
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@ using static SDL2.SDL;
|
|||
|
||||
class Color
|
||||
{
|
||||
int r, g, b, a;
|
||||
int r,
|
||||
g,
|
||||
b,
|
||||
a;
|
||||
|
||||
public Color(int r, int g, int b, int a)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,6 +21,12 @@ class Frontend : IFrontend
|
|||
{
|
||||
System.Environment.Exit(0);
|
||||
}
|
||||
// Console.WriteLine("new key event");
|
||||
// Console.WriteLine(e.key.repeat);
|
||||
// Console.WriteLine(e.key.keysym.scancode);
|
||||
// Console.WriteLine(e.key.keysym.sym);
|
||||
// Console.WriteLine(e.key.keysym.unicode);
|
||||
// Console.WriteLine(e.type);
|
||||
if (e.type == SDL_EventType.SDL_KEYDOWN && e.key.repeat == 0)
|
||||
{
|
||||
var movementInput = ctx.FrontendGameState.movementInput;
|
||||
|
|
@ -63,9 +69,18 @@ class Frontend : IFrontend
|
|||
}
|
||||
ctx.FrontendGameState.movementInput = movementInput;
|
||||
}
|
||||
if (e.key.keysym.scancode is
|
||||
SDL_Scancode.SDL_SCANCODE_A or SDL_Scancode.SDL_SCANCODE_D or SDL_Scancode.SDL_SCANCODE_W or SDL_Scancode.SDL_SCANCODE_S)
|
||||
if (
|
||||
e.key.keysym.scancode
|
||||
is SDL_Scancode.SDL_SCANCODE_A
|
||||
or SDL_Scancode.SDL_SCANCODE_D
|
||||
or SDL_Scancode.SDL_SCANCODE_W
|
||||
or SDL_Scancode.SDL_SCANCODE_S
|
||||
&& e.key.repeat == 0
|
||||
&& e.type is SDL_EventType.SDL_KEYDOWN or SDL_EventType.SDL_KEYUP
|
||||
)
|
||||
{
|
||||
if (e.key.repeat == 1)
|
||||
continue;
|
||||
var movement = ctx.FrontendGameState.movementInput;
|
||||
if (movement.Length() > 0)
|
||||
movement = Vector2.Normalize(movement);
|
||||
|
|
|
|||
Loading…
Reference in New Issue