players sync, full sync almost working

This commit is contained in:
Michele Scandura 2020-11-03 10:43:21 +00:00
parent d31d448182
commit abc24fe107
4 changed files with 25 additions and 13 deletions

View file

@ -97,8 +97,11 @@ namespace MyGame
connection.On<Player>("PlayerUpdate", (player) =>
{
var p = Players.First(m => m.ConnectionId == player.ConnectionId);
p.Position = player.Position;
var p = Players.FirstOrDefault(m => m.ConnectionId == player.ConnectionId);
if (p != null)
{
p.Position = player.Position;
}
});
connection.On<Tile>("DeleteTile", (tile) =>
@ -137,7 +140,16 @@ namespace MyGame
connection.On<Player>("NewPlayer", (player) =>
{
Players.Add(player);
var p = Players.FirstOrDefault(m => m.ConnectionId == player.ConnectionId);
if (p is null)
{
Players.Add(player);
}
else
{
p.Color = player.Color;
p.Position = player.Position;
}
});
base.Initialize();
@ -241,11 +253,11 @@ namespace MyGame
try
{
var session = await connection?.InvokeAsync<SessionData>("NewSession", textbox.Text);
if (session!=null)
if (session != null)
{
Players= session.Players;
Players = session.Players;
}
successful = session!=null;
successful = session != null;
}
catch { }
if (successful)
@ -604,7 +616,7 @@ Players= session.Players;
_spriteBatch.Begin(transformMatrix: Matrix.CreateTranslation(_viewportCenter));
for (var i = 0; i < visibleTilesX; i++)
for (var i = -1; i < visibleTilesX + 2; i++)
{
var posX1 = i * _tileSize - _viewportCenter.X;
var posY1 = -_viewportCenter.Y;
@ -622,7 +634,7 @@ Players= session.Players;
Color.Black);
}
for (var i = 0; i < visibleTilesY; i++)
for (var i = -1; i < visibleTilesY + 2; i++)
{
var posX1 = -_viewportCenter.X;
var posY1 = i * _tileSize - _viewportCenter.Y;

View file

@ -11,7 +11,7 @@
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/bin/Debug/net5.0/SignalRChat.dll",
"program": "${workspaceFolder}/SignalRChat/bin/Debug/net5.0/SignalRChat.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,

View file

@ -7,7 +7,7 @@
"type": "process",
"args": [
"build",
"${workspaceFolder}/SignalRChat.csproj",
"${workspaceFolder}/SignalRChat/SignalRChat.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
@ -19,7 +19,7 @@
"type": "process",
"args": [
"publish",
"${workspaceFolder}/SignalRChat.csproj",
"${workspaceFolder}/SignalRChat/SignalRChat.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
@ -32,7 +32,7 @@
"args": [
"watch",
"run",
"${workspaceFolder}/SignalRChat.csproj",
"${workspaceFolder}/SignalRChat/SignalRChat.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],

View file

@ -144,7 +144,6 @@ namespace SignalRChat.Hubs
var player = new Player { Position = new Tile { X = 0, Y = 0 }, ConnectionId = Context.ConnectionId, Color = session.Colors[0] };
session.Players.Add(player);
_sessions.Add(sessionName, session);
await Clients.Group(sessionName).SendAsync("NewPlayer", player);
await Groups.AddToGroupAsync(Context.ConnectionId, sessionName);
return session;
@ -157,6 +156,7 @@ namespace SignalRChat.Hubs
var session = _sessions[sessionName];
var player = new Player { Position = new Tile { X = 0, Y = 0 }, ConnectionId = Context.ConnectionId, Color = session.Colors[session.Players.Count] };
session.Players.Add(player);
await Clients.Group(sessionName).SendAsync("NewPlayer", player);
await Groups.AddToGroupAsync(Context.ConnectionId, sessionName);
return session;
}