refactoring

This commit is contained in:
Michele 2020-11-08 23:48:15 +00:00
parent 9c100531ef
commit 92f333a4c4
26 changed files with 860 additions and 491 deletions

View file

@ -37,7 +37,6 @@ namespace Sledgemapper
private string _session;
private KeyboardState oldState;
private MouseState oldMouseState;
private Vector3 _viewportCenter = new Vector3(0, 0, 0);
private SpriteFont font;
private Dictionary<string, SpriteFont> _fonts;
@ -61,7 +60,7 @@ namespace Sledgemapper
Window.AllowUserResizing = true;
Players = new List<Player>();
connection = new HubConnectionBuilder()
// .WithAutomaticReconnect()
.WithAutomaticReconnect()
.WithUrl("http://localhost:5000/SledgemapperHub")
@ -72,25 +71,22 @@ namespace Sledgemapper
//if (myConfigurationService.VerifySslCertificate == false)
//{
httpClientHandler.ServerCertificateCustomValidationCallback =
(message, certificate, chain, sslPolicyErrors) => true;
httpClientHandler.ServerCertificateCustomValidationCallback =
(message, certificate, chain, sslPolicyErrors) => true;
//}
_api = RestService.For<IMapApi>(
new HttpClient(httpClientHandler)
{
BaseAddress = new Uri ("http://localhost:5000")
}
);
_api = RestService.For<IMapApi>(
new HttpClient(httpClientHandler)
{
BaseAddress = new Uri("http://localhost:5000")
}
);
connection.On<SessionData>("UpdateMap", (map) =>
{
_sessionData.Map = map.Map;
_sessionData.Walls = map.Walls;
_sessionData.Overlays = map.Overlays;
});
connection.On<Player>("PlayerUpdate", (player) =>
@ -104,38 +100,37 @@ namespace Sledgemapper
connection.On<Tile>("DeleteTile", (tile) =>
{
_sessionData.Map.Remove(tile.ToString(), out var rtile);
_sessionData.Map.Remove(tile.ToString(), out var _);
});
connection.On<Wall>("DeleteWall", (tile) =>
{
_sessionData.Walls.Remove(tile.ToString(), out var rtile);
_sessionData.Walls.Remove(tile.ToString(), out var _);
});
connection.On<Overlay>("DeleteOverlay", (tile) =>
{
_sessionData.Overlays.Remove(tile.ToString(), out var rtile);
_sessionData.Overlays.Remove(tile.ToString(), out var _);
});
connection.On<Tile>("NewTile", (tile) =>
{
_sessionData.Map.Remove(tile.ToString(), out var rtile);
_sessionData.Map.Remove(tile.ToString(), out var _);
_sessionData.Map.TryAdd(tile.ToString(), tile);
});
connection.On<Wall>("NewWall", (tile) =>
{
_sessionData.Walls.Remove(tile.ToString(), out var rtile);
_sessionData.Walls.Remove(tile.ToString(), out var _);
_sessionData.Walls.TryAdd(tile.ToString(), tile);
});
connection.On<Overlay>("NewOverlay", (tile) =>
{
_sessionData.Overlays.Remove(tile.ToString(), out var rtile);
_sessionData.Overlays.Remove(tile.ToString(), out var _);
_sessionData.Overlays.TryAdd(tile.ToString(), tile);
});
connection.On<Player>("NewPlayer", (player) =>
{
var p = Players.FirstOrDefault(m => m.ConnectionId == player.ConnectionId);
@ -166,229 +161,11 @@ namespace Sledgemapper
var menuConnectJoin = new MenuItem("_connect_join", "Join");
var menuConnectSync = new MenuItem("_connect_sync", "Sync");
menuConnectSync.Selected += async (s, e) =>
{
await connection?.InvokeAsync("Sync", _session, _sessionData);
};
menuFileLoad.Selected += (s, e) =>
{
FileDialog dialog = new FileDialog(FileDialogMode.OpenFile)
{
Filter = "*.map"
//Folder = @"D:\Temp"
};
dialog.Closed += (s, a) =>
{
if (!dialog.Result)
{
// "Cancel" or Escape
return;
}
using (StreamReader file = File.OpenText(dialog.FilePath))
{
JsonSerializer serializer = new JsonSerializer();
_sessionData = (SessionData)serializer.Deserialize(file, typeof(SessionData));
}
// "Ok" or Enter
// ...
};
dialog.ShowModal(_desktop);
};
menuFileSave.Selected += (s, e) =>
{
FileDialog dialog = new FileDialog(FileDialogMode.SaveFile)
{
Filter = "*.map"
//Folder = @"D:\Temp"
};
dialog.Closed += (s, a) =>
{
if (!dialog.Result)
{
// "Cancel" or Escape
return;
}
using (StreamWriter file = File.CreateText(dialog.FilePath))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, _sessionData);
}
// "Ok" or Enter
// ...
};
dialog.ShowModal(_desktop);
};
menuConnectNew.Selected += (s, e) =>
{
Window window = new Window
{
Title = "New mapping session"
};
var content = new VerticalStackPanel();
var grid = new Grid
{
Width = 200,
ShowGridLines = false,
ColumnSpacing = 8,
RowSpacing = 3,
};
// Set partitioning configuration
grid.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
grid.ColumnsProportions.Add(new Proportion(ProportionType.Fill));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
var sessionNameLabel = new Label { Text = "Session Name:" };
var initialsLabel = new Label { Text = "Initials:", GridRow = 1 };
var textbox = new TextBox { GridColumn = 1 };
var initialsTextbox = new TextBox { GridColumn = 1, GridRow = 1 };
TextButton button = new TextButton
{
Text = "Start",
HorizontalAlignment = HorizontalAlignment.Center
};
grid.Widgets.Add(textbox);
grid.Widgets.Add(initialsTextbox);
grid.Widgets.Add(sessionNameLabel);
grid.Widgets.Add(initialsLabel);
content.Widgets.Add(grid);
button.Click += async (s, e) =>
{
if (string.IsNullOrWhiteSpace(textbox.Text))
{
return;
}
if (connection.State != HubConnectionState.Connected)
{ await connection.StartAsync(); }
var successful = false;
try
{
var session = await connection?.InvokeAsync<SessionData>("NewSession", textbox.Text, initialsTextbox.Text);
if (session != null)
{
session.RaiseTileAddedEvent += TileAddedEvent;
session.RaiseOverlayAddedEvent += OverlayAddedEvent;
Players = session.Players;
}
successful = session != null;
}
catch (Exception ex)
{
}
if (successful)
{
_session = textbox.Text;
window.Close();
}
};
content.Widgets.Add(button);
window.Content = content;
window.Closed += (s, a) =>
{
// Called when window is closed
};
window.ShowModal(_desktop);
};
menuConnectJoin.Selected += (s, e) =>
{
Window window = new Window
{
Title = "Join mapping session"
};
var content = new VerticalStackPanel();
var grid = new Grid
{
Width = 200,
ShowGridLines = false,
ColumnSpacing = 8,
RowSpacing = 3,
};
// Set partitioning configuration
grid.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
grid.ColumnsProportions.Add(new Proportion(ProportionType.Fill));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
var sessionNameLabel = new Label { Text = "Session Name:" };
var initialsLabel = new Label { Text = "Initials:", GridRow = 1 };
var textbox = new TextBox { GridColumn = 1 };
var initialsTextbox = new TextBox { GridColumn = 1, GridRow = 1 };
TextButton button = new TextButton
{
Text = "Start",
HorizontalAlignment = HorizontalAlignment.Center
};
grid.Widgets.Add(textbox);
grid.Widgets.Add(initialsTextbox);
grid.Widgets.Add(sessionNameLabel);
grid.Widgets.Add(initialsLabel);
content.Widgets.Add(grid);
// var content = new VerticalStackPanel();
// var textbox = new TextBox();
// TextButton button = new TextButton
// {
// Text = "Start",
// HorizontalAlignment = HorizontalAlignment.Center
// };
button.Click += async (s, e) =>
{
if (string.IsNullOrWhiteSpace(textbox.Text))
{
return;
}
if (connection.State != HubConnectionState.Connected)
{ await connection.StartAsync(); }
var successful = false;
try
{
var result = await connection?.InvokeAsync<SessionData>("JoinSession", textbox.Text, initialsTextbox.Text);
if (result != null)
{
_sessionData.Map = result.Map;
_sessionData.Walls = result.Walls;
_sessionData.Overlays = result.Overlays;
Players = result.Players;
}
successful = result != null; ;
}
catch { }
if (successful)
{
_session = textbox.Text;
window.Close();
}
};
//content.Widgets.Add(textbox);
content.Widgets.Add(button);
window.Content = content;
window.Closed += (s, a) =>
{
// Called when window is closed
};
window.ShowModal(_desktop);
};
menuConnectSync.Selected += OnMenuConnectSyncSelected;
menuFileLoad.Selected += OnMenuFileLoadSelected;
menuFileSave.Selected += OnMenuFileSaveSelected;
menuConnectNew.Selected += OnMenuConnectNewSelected;
menuConnectJoin.Selected += OnMenuConnectJoinSelected;
menuConnect.Items.Add(menuConnectNew);
menuConnect.Items.Add(menuConnectJoin);
@ -402,7 +179,214 @@ namespace Sledgemapper
return menu;
}
private void OnMenuConnectJoinSelected(object sender, EventArgs e)
{
Window window = new Window
{
Title = "Join mapping session"
};
var content = new VerticalStackPanel();
var grid = new Grid
{
Width = 200,
ShowGridLines = false,
ColumnSpacing = 8,
RowSpacing = 3,
};
// Set partitioning configuration
grid.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
grid.ColumnsProportions.Add(new Proportion(ProportionType.Fill));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
var sessionNameLabel = new Label { Text = "Session Name:" };
var initialsLabel = new Label { Text = "Initials:", GridRow = 1 };
var textbox = new TextBox { GridColumn = 1 };
var initialsTextbox = new TextBox { GridColumn = 1, GridRow = 1 };
TextButton button = new TextButton
{
Text = "Start",
HorizontalAlignment = HorizontalAlignment.Center
};
grid.Widgets.Add(textbox);
grid.Widgets.Add(initialsTextbox);
grid.Widgets.Add(sessionNameLabel);
grid.Widgets.Add(initialsLabel);
content.Widgets.Add(grid);
button.Click += async (s, e) =>
{
if (string.IsNullOrWhiteSpace(textbox.Text))
{
return;
}
if (connection.State != HubConnectionState.Connected)
{ await connection.StartAsync(); }
var successful = false;
try
{
var result = await connection?.InvokeAsync<SessionData>("JoinSession", textbox.Text, initialsTextbox.Text);
if (result != null)
{
_sessionData.Map = result.Map;
_sessionData.Walls = result.Walls;
_sessionData.Overlays = result.Overlays;
Players = result.Players;
}
successful = result != null; ;
}
catch { }
if (successful)
{
_session = textbox.Text;
window.Close();
}
};
content.Widgets.Add(button);
window.Content = content;
window.ShowModal(_desktop);
}
private void OnMenuConnectNewSelected(object sender, EventArgs e)
{
Window window = new Window
{
Title = "New mapping session"
};
var content = new VerticalStackPanel();
var grid = new Grid
{
Width = 200,
ShowGridLines = false,
ColumnSpacing = 8,
RowSpacing = 3,
};
// Set partitioning configuration
grid.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
grid.ColumnsProportions.Add(new Proportion(ProportionType.Fill));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
var sessionNameLabel = new Label { Text = "Session Name:" };
var initialsLabel = new Label { Text = "Initials:", GridRow = 1 };
var textbox = new TextBox { GridColumn = 1 };
var initialsTextbox = new TextBox { GridColumn = 1, GridRow = 1 };
TextButton button = new TextButton
{
Text = "Start",
HorizontalAlignment = HorizontalAlignment.Center
};
grid.Widgets.Add(textbox);
grid.Widgets.Add(initialsTextbox);
grid.Widgets.Add(sessionNameLabel);
grid.Widgets.Add(initialsLabel);
content.Widgets.Add(grid);
button.Click += async (s, e) =>
{
if (string.IsNullOrWhiteSpace(textbox.Text))
{
return;
}
if (connection.State != HubConnectionState.Connected)
{ await connection.StartAsync(); }
var successful = false;
try
{
var session = await connection?.InvokeAsync<SessionData>("NewSession", textbox.Text, initialsTextbox.Text);
if (session != null)
{
_sessionData = session;
session.TileAdded += OnTileAdded;
session.OverlayAdded += OnOverlayAdded;
session.WallAdded += OnWallAdded;
session.TileDeleted += OnTileDeleted;
session.WallDeleted += OnWallDeleted;
session.OverlayDeleted += OnOverlayDeleted;
Players = session.Players;
}
successful = session != null;
}
catch (Exception ex)
{
}
if (successful)
{
_session = textbox.Text;
window.Close();
}
};
content.Widgets.Add(button);
window.Content = content;
window.Closed += (s, a) =>
{
// Called when window is closed
};
window.ShowModal(_desktop);
}
private void OnMenuFileSaveSelected(object sender, EventArgs e)
{
FileDialog dialog = new FileDialog(FileDialogMode.SaveFile)
{
Filter = "*.map"
};
dialog.Closed += (s, a) =>
{
if (!dialog.Result)
{
return;
}
using (StreamWriter file = File.CreateText(dialog.FilePath))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, _sessionData);
}
};
dialog.ShowModal(_desktop);
}
private void OnMenuFileLoadSelected(object sender, EventArgs e)
{
FileDialog dialog = new FileDialog(FileDialogMode.OpenFile)
{
Filter = "*.map"
};
dialog.Closed += (s, a) =>
{
if (!dialog.Result)
{
return;
}
using (StreamReader file = File.OpenText(dialog.FilePath))
{
JsonSerializer serializer = new JsonSerializer();
_sessionData = (SessionData)serializer.Deserialize(file, typeof(SessionData));
}
};
dialog.ShowModal(_desktop);
}
private async void OnMenuConnectSyncSelected(object sender, EventArgs e)
{
await connection?.InvokeAsync("Sync", _session, _sessionData);
}
protected override void LoadContent()
{
@ -521,7 +505,6 @@ namespace Sledgemapper
_fonts = Content.LoadContentFolder<SpriteFont>("fonts");
// Add it to the desktop
// _desktop = new Desktop();
_desktop.Root = mainPanel;
@ -580,15 +563,15 @@ namespace Sledgemapper
_selectedTile.Y = _hoveredTile.Y;
connection?.SendAsync("UpdatePosition", _session, _selectedTile);
SetTile(_currentTileId);
_sessionData.NewTile(_selectedTile, _currentTileId);
break;
case InsertMode.Wall:
_sessionData.NewWall(_selectedWall, _currentWallId);
SetWall(_currentWallId);
break;
case InsertMode.Overlay:
SetOverlay(_currentOverlayId);
_sessionData.NewOverlay(_selectedOverlay, _currentOverlayId);
break;
}
}
@ -622,25 +605,19 @@ namespace Sledgemapper
case InsertMode.Tile:
_selectedTile.X = _hoveredTile.X;
_selectedTile.Y = _hoveredTile.Y;
DeleteTile();
_sessionData.DeleteTile(_selectedTile);
break;
case InsertMode.Wall:
DeleteWall();
_sessionData.DeleteWall(_selectedWall);
break;
case InsertMode.Overlay:
DeleteOverlay();
_sessionData.DeleteOverlay(_selectedOverlay);
break;
}
}
foreach (var key in newState.GetPressedKeys())
{
switch (key)
{
case Keys.Left:
@ -932,83 +909,30 @@ namespace Sledgemapper
_selectedOverlay.Intersection = false;
}
private void SetTile(string tileId)
{
_sessionData.NewTile(_selectedTile, tileId);
}
private void TileAddedEvent(object sender, TileAddedEventArgs e)
{
_api.NewTile(e.Tile, _session);
}
private void SetOverlay(string tileId)
{
_sessionData.NewOverlay(_selectedOverlay, tileId);
}
private void OverlayAddedEvent(object sender, OverlayAddedEventArgs e)
private void OnOverlayAdded(object sender, OverlayAddedEventArgs e)
{
_api.NewOverlay(e.Overlay, _session);
}
private void DeleteWall()
private void OnTileAdded(object sender, TileAddedEventArgs e)
{
var tileExist = _sessionData.Walls.TryGetValue(_selectedWall.ToString(), out var wall);
if (tileExist)
{
//var wall = _sessionData.Walls.First(m => m.X == _selectedWall.X && m.Y == _selectedWall.Y && m.Rotation == _selectedWall.Rotation);
//var index = _sessionData.Walls.IndexOf(wall);
_sessionData.Walls.TryRemove(wall.ToString(), out var rwall);
connection?.InvokeAsync("DeleteWall", _session, wall);
}
_api.NewTile(e.Tile, _session);
}
private void DeleteOverlay()
private void OnWallAdded(object sender, WallAddedEventArgs e)
{
var tileExist = _sessionData.Overlays.TryGetValue(_selectedOverlay.ToString(), out var overlay);
if (tileExist)
{
//var wall = _sessionData.Overlays.First(m => m.X == _selectedOverlay.X && m.Y == _selectedOverlay.Y && m.Intersection == _selectedOverlay.Intersection);
//var index = _sessionData.Overlays.IndexOf(wall);
_sessionData.Overlays.TryRemove(overlay.ToString(), out var roverlay);
connection?.InvokeAsync("DeleteOverlay", _session, overlay);
}
_api.NewWall(e.Wall, _session);
}
private void DeleteTile()
private void OnOverlayDeleted(object sender, OverlayDeletedEventArgs e)
{
var tileExist = _sessionData.Map.TryGetValue(_selectedTile.ToString(), out var tile);
if (tileExist)
{
// var tile = _sessionData.Map.First(m => m.X == _selectedTile.X && m.Y == _selectedTile.Y);
// var index = _sessionData.Map.IndexOf(tile);
_sessionData.Map.TryRemove(tile.ToString(), out var rtile);
connection?.InvokeAsync("DeleteTile", _session, tile);
}
_api.DeleteOverlay(e.Overlay, _session);
}
private void SetWall(string wallId)
private void OnTileDeleted(object sender, TileDeletedEventArgs e)
{
var tileExist = _sessionData.Walls.TryGetValue(_selectedWall.ToString(), out var wall);
if (tileExist)
{
// var wall = _sessionData.Walls.First(m => m.X == _selectedWall.X && m.Y == _selectedWall.Y && m.Rotation == _selectedWall.Rotation);
// var index = _sessionData.Walls.IndexOf(wall);
_sessionData.Walls.TryRemove(wall.ToString(), out var rwall);
var newWall = new Wall { X = _selectedWall.X, Y = _selectedWall.Y, ID = wallId, Rotation = _selectedWall.Rotation };
_sessionData.Walls.TryAdd(newWall.ToString(), newWall);
connection?.InvokeAsync("NewWall", _session, newWall);
}
else
{
var newWall = new Wall { X = _selectedWall.X, Y = _selectedWall.Y, ID = wallId, Rotation = _selectedWall.Rotation };
_sessionData.Walls.TryAdd(newWall.ToString(), newWall);
connection?.InvokeAsync("NewWall", _session, newWall);
//connection?.InvokeAsync("SendMessage", $"{_selectedTile.X}:{_selectedTile.Y}", tileId.ToString(), _session);
}
_api.DeleteTile(e.Tile, _session);
}
private void OnWallDeleted(object sender, WallDeletedEventArgs e)
{
_api.DeleteWall(e.Wall, _session);
}
}
}