more ui refactorin

This commit is contained in:
Michele Scandura 2020-11-10 16:44:13 +00:00
parent e009ef07b0
commit 9d4fd1e6c0
6 changed files with 374 additions and 159 deletions

View file

@ -33,6 +33,7 @@ namespace Sledgemapper
private Dictionary<string, SpriteFont> _fonts;
private Session _sessionData;
private AuthenticateResponse _authResponse;
private MainWidget _mainWidget;
public Sledgemapper()
{
@ -53,122 +54,49 @@ namespace Sledgemapper
base.Initialize();
}
private void AddItemToToolGrid(Grid grid, EventHandler eventAction, string folder)
{
var tilesFolderContent = Content.LoadContentFolder<Texture2D>(folder);
var indexX = 0;
var indexY = 0;
foreach (var item in tilesFolderContent)
{
var tileButton = new ImageButton { Image = new TextureRegion(item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 };
tileButton.Click += eventAction;
grid.Widgets.Add(tileButton);
indexY++;
if (indexY == 4)
{
indexY = 0;
indexX++;
}
}
}
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
MyraEnvironment.Game = this;
var mainPanel = new VerticalStackPanel();
_mainWidget = new MainWidget();
var menu = BuildMenu();
mainPanel.Widgets.Add(menu);
_mainWidget.MenuConnectSync.Selected += OnMenuConnectSyncSelected;
_mainWidget.MenuFileLoad.Selected += OnMenuFileLoadSelected;
_mainWidget.MenuFileSave.Selected += OnMenuFileSaveSelected;
_mainWidget.MenuConnectLogin.Selected += OnMenuConnectLoginSelected;
_mainWidget.MenuConnectNew.Selected += OnMenuConnectNewSelected;
_mainWidget.MenuConnectJoin.Selected += OnMenuConnectJoinSelected;
_mainWidget.MenuConnectNew.Enabled = false;
_mainWidget.MenuConnectJoin.Enabled = false;
_mainWidget.MenuConnectSync.Enabled = false;
var sidePanel = new VerticalStackPanel { Layout2d = new Layout2D("this.w=200;this.h=W.h"), Background = new SolidBrush(Color.DarkGray) };
var tileScrollView = new ScrollViewer { Layout2d = new Layout2D("this.w=200;this.h=W.h/3") };
var tileGrid = new Grid { ColumnSpacing = 3, RowSpacing = 3, Layout2d = new Layout2D("this.w=200"), Background = new SolidBrush(Color.DarkGray) };
tileScrollView.Content = tileGrid;
sidePanel.Widgets.Add(tileScrollView);
var wallScrollView = new ScrollViewer { Layout2d = new Layout2D("this.w=200;this.h=W.h/3") };
var wallGrid = new Grid { ColumnSpacing = 3, RowSpacing = 3, Layout2d = new Layout2D("this.w=200"), Background = new SolidBrush(Color.DarkGray) };
wallScrollView.Content = wallGrid;
sidePanel.Widgets.Add(wallScrollView);
var overlayScrollView = new ScrollViewer { Layout2d = new Layout2D("this.w=200;this.h=W.h/3") };
var overlayGrid = new Grid { ColumnSpacing = 3, RowSpacing = 3, Layout2d = new Layout2D("this.w=200"), Background = new SolidBrush(Color.DarkGray) };
overlayScrollView.Content = overlayGrid;
sidePanel.Widgets.Add(overlayScrollView);
mainPanel.Widgets.Add(sidePanel);
var tilesFolderContent = Content.LoadContentFolder<Texture2D>("tiles");
var indexX = 0;
var indexY = 0;
foreach (var item in tilesFolderContent)
{
var tileButton = new ImageButton { Image = new TextureRegion(item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 };
tileButton.Click += (s, e) =>
{
_state._currentTileId = ((ImageButton)s).Id;
ClearSelection(wallGrid);
ClearSelection(tileGrid);
ClearSelection(overlayGrid);
((ImageButton)s).Border = new SolidBrush(Color.Red);
((ImageButton)s).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Tile;
};
tileGrid.Widgets.Add(tileButton);
indexY++;
if (indexY == 4)
{
indexY = 0;
indexX++;
}
}
var wallsFolderContent = Content.LoadContentFolder<Texture2D>("walls");
indexX = 0;
indexY = 0;
foreach (var item in wallsFolderContent)
{
var wallButton = new ImageButton { Image = new TextureRegion(item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 };
wallButton.Click += (s, e) =>
{
_state._currentWallId = ((ImageButton)s).Id;
ClearSelection(wallGrid);
ClearSelection(tileGrid);
ClearSelection(overlayGrid);
((ImageButton)s).Border = new SolidBrush(Color.Red);
((ImageButton)s).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Wall;
};
wallGrid.Widgets.Add(wallButton);
indexY++;
if (indexY == 4)
{
indexY = 0;
indexX++;
}
}
var overlayFolderContent = Content.LoadContentFolder<Texture2D>("overlays");
indexX = 0;
indexY = 0;
foreach (var item in overlayFolderContent)
{
var overlayButton = new ImageButton { Image = new TextureRegion(item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 };
overlayButton.Click += (s, e) =>
{
_state._currentOverlayId = ((ImageButton)s).Id;
ClearSelection(wallGrid);
ClearSelection(tileGrid);
ClearSelection(overlayGrid);
((ImageButton)s).Border = new SolidBrush(Color.Red);
((ImageButton)s).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Overlay;
};
overlayGrid.Widgets.Add(overlayButton);
indexY++;
if (indexY == 4)
{
indexY = 0;
indexX++;
}
}
AddItemToToolGrid(_mainWidget.GridTiles, OnTileButtonClicked, "tiles");
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls");
AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, "overlays");
_fonts = Content.LoadContentFolder<SpriteFont>("fonts");
_desktop.Root = mainPanel;
_desktop.Root = _mainWidget;
}
protected override void Update(GameTime gameTime)
@ -310,7 +238,7 @@ namespace Sledgemapper
{
return;
}
GraphicsDevice.Clear(Color.DarkGray);
GraphicsDevice.Clear(new Color(24,118,157));
var visibleTilesX = GraphicsDevice.Viewport.Width / _state._tileSize + 1;
var visibleTilesY = GraphicsDevice.Viewport.Height / _state._tileSize + 1;
@ -324,7 +252,7 @@ namespace Sledgemapper
if (string.IsNullOrWhiteSpace(_sessionData.SessionName))
{
_spriteBatch.DrawRectangle(new Rectangle(_state._selectedTile.X * _state._tileSize, _state._selectedTile.Y * _state._tileSize, _state._tileSize - 1, _state._tileSize - 1), Color.Red, 2);
_spriteBatch.DrawRectangle(new Rectangle((_state._selectedTile.X * _state._tileSize)-2,(_state._selectedTile.Y * _state._tileSize)-2, _state._tileSize + 3, _state._tileSize + 3), Color.Red, 2);
}
DrawPlayers();
@ -347,46 +275,6 @@ namespace Sledgemapper
base.Draw(gameTime);
}
private HorizontalMenu BuildMenu()
{
var menu = new HorizontalMenu();
var menuFile = new MenuItem("_file", "File");
var menuFileLoad = new MenuItem("_file_load", "Load");
var menuFileSave = new MenuItem("_file_save", "Save");
var menuConnect = new MenuItem("_connect", "Connect");
var menuConnectLogin = new MenuItem("_connect_login", "Login");
var menuConnectNew = new MenuItem("_connect_new", "New");
var menuConnectJoin = new MenuItem("_connect_join", "Join");
var menuConnectSync = new MenuItem("_connect_sync", "Sync");
menuConnectSync.Selected += OnMenuConnectSyncSelected;
menuFileLoad.Selected += OnMenuFileLoadSelected;
menuFileSave.Selected += OnMenuFileSaveSelected;
menuConnectLogin.Selected += OnMenuConnectLoginSelected;
menuConnectNew.Selected += OnMenuConnectNewSelected;
menuConnectJoin.Selected += OnMenuConnectJoinSelected;
menuConnect.Items.Add(menuConnectLogin);
menuConnect.Items.Add(menuConnectNew);
menuConnect.Items.Add(menuConnectJoin);
menuConnect.Items.Add(menuConnectSync);
menu.Items.Add(menuConnect);
menuFile.Items.Add(menuFileLoad);
menuFile.Items.Add(menuFileSave);
menu.Items.Add(menuFile);
menu.Items.Add(menuConnect);
return menu;
}
private void ClearSelection(Grid grid)
{
foreach (var widget in grid.Widgets)
{
widget.Border = null;
}
}
private void DrawGrid(int visibleTilesX, int visibleTilesY)
{
for (var i = -1; i < visibleTilesX + 2; i++)
@ -404,7 +292,7 @@ namespace Sledgemapper
posX1, posY1,
posX2,
posY2,
Color.Black);
Color.GhostWhite);
}
for (var i = -1; i < visibleTilesY + 2; i++)
@ -421,7 +309,7 @@ namespace Sledgemapper
_spriteBatch.DrawLine(posX1, posY1,
posX2,
posY2,
Color.Black);
Color.GhostWhite);
}
}
@ -652,6 +540,9 @@ namespace Sledgemapper
if (successful)
{
_mainWidget.MenuConnectNew.Enabled = true;
_mainWidget.MenuConnectJoin.Enabled = true;
_mainWidget.MenuConnectSync.Enabled = true;
localWindow.Close();
}
}
@ -717,10 +608,40 @@ namespace Sledgemapper
}
if (successful)
{
_mainWidget.MenuConnectNew.Enabled = true;
_mainWidget.MenuConnectJoin.Enabled = true;
_mainWidget.MenuConnectSync.Enabled = true;
localWindow.Close();
}
}
private void OnOverlayButtonClicked(object sender, EventArgs e)
{
_state._currentOverlayId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Overlay;
}
private void OnTileButtonClicked(object sender, EventArgs e)
{
_state._currentTileId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Tile;
}
private void OnWallButtonClicked(object sender, EventArgs e)
{
_state._currentWallId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Wall;
}
private void OnMenuConnectJoinSelected(object sender, EventArgs e)
{
Window window = new Window
@ -796,8 +717,6 @@ namespace Sledgemapper
window.Content = content;
window.ShowModal(_desktop);
}
private void OnMenuFileSaveSelected(object sender, EventArgs e)
@ -858,15 +777,9 @@ namespace Sledgemapper
var valid = !string.IsNullOrWhiteSpace(textBox.Text);
if (!valid)
{
textBox.Background = new SolidBrush(Color.Red);
textBox.Background = new SolidBrush(Color.PaleVioletRed);
}
return valid;
}
}
public enum TileAction
{
Add,
Delete
}
}