Shader galore
This commit is contained in:
parent
519b7518ff
commit
07685fcd9c
62 changed files with 496 additions and 266 deletions
|
@ -4,7 +4,9 @@ using Microsoft.AspNetCore.SignalR.Client;
|
|||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
using MonoGame.Extended;
|
||||
using Myra;
|
||||
using Myra.Graphics2D;
|
||||
using Myra.Graphics2D.Brushes;
|
||||
using Myra.Graphics2D.TextureAtlases;
|
||||
using Myra.Graphics2D.UI;
|
||||
|
@ -39,6 +41,7 @@ namespace Sledgemapper
|
|||
private Texture2D _comment;
|
||||
private readonly Session _sessionData;
|
||||
private AuthenticateResponse _authResponse;
|
||||
private RenderTarget2D rendertarget;
|
||||
private MainWidget _mainWidget;
|
||||
private bool _showCellNumbers;
|
||||
private readonly Settings _settings;
|
||||
|
@ -89,9 +92,28 @@ namespace Sledgemapper
|
|||
ExceptionlessClient.Default.SubmitEvent(new Event { Message = "Initialize", Type = "AppLifecycle", Source = _settings.MachineName });
|
||||
IsMouseVisible = true;
|
||||
Window.AllowUserResizing = true;
|
||||
Window.ClientSizeChanged += OnClientSizeChanged;
|
||||
|
||||
base.Initialize();
|
||||
}
|
||||
|
||||
private void OnClientSizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
rendertarget?.Dispose();
|
||||
try
|
||||
{
|
||||
|
||||
// rendertarget = new RenderTarget2D(GraphicsDevice, _graphics.PreferredBackBufferWidth, _graphics.PreferredBackBufferHeight, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 0, RenderTargetUsage.PreserveContents);
|
||||
rendertarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
System.Console.WriteLine("rendertarget dispose exception");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void AddItemToToolGrid(Grid grid, EventHandler eventAction, string folder)
|
||||
{
|
||||
var tilesFolderContent = Content.LoadContentFolder<Texture2D>(folder);
|
||||
|
@ -114,7 +136,13 @@ namespace Sledgemapper
|
|||
protected override void LoadContent()
|
||||
{
|
||||
_spriteBatch = new SpriteBatch(GraphicsDevice);
|
||||
outlineShader = Content.Load<Effect>("shaders/OutlineShader");
|
||||
// outlineShader.Parameters["Thickness"].SetValue((float)_settings.Thickness);
|
||||
// outlineShader.Parameters["shadow"].SetValue(1);
|
||||
// outlineShader.Parameters["ScreenSize"].SetValue(
|
||||
// new Vector2(GraphicsDevice.Viewport.Bounds.Width, GraphicsDevice.Viewport.Bounds.Height));
|
||||
MyraEnvironment.Game = this;
|
||||
rendertarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
||||
|
||||
_mainWidget = new MainWidget();
|
||||
|
||||
|
@ -137,6 +165,7 @@ namespace Sledgemapper
|
|||
_mainWidget.BtnToolbarRoom.Click += OnBtnToolbarRoomClicked;
|
||||
_mainWidget.BtnToolbarTile.Click += OnBtnToolbarTileClicked;
|
||||
_mainWidget.BtnToolbarWall.Click += OnBtnToolbarWallClicked;
|
||||
_mainWidget.BtnToolbarDelete.Click += OnBtnToolbarDeleteClicked;
|
||||
|
||||
AddItemToToolGrid(_mainWidget.GridTiles, OnTileButtonClicked, "tiles");
|
||||
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls");
|
||||
|
@ -149,6 +178,11 @@ namespace Sledgemapper
|
|||
_desktop.Root = _mainWidget;
|
||||
}
|
||||
|
||||
private void OnBtnToolbarDeleteClicked(object sender, EventArgs e)
|
||||
{
|
||||
_state.InsertMode = InsertMode.NewDelete;
|
||||
}
|
||||
|
||||
private void OnBtnToolbarWallClicked(object sender, EventArgs e)
|
||||
{
|
||||
_state.InsertMode = InsertMode.NewWall;
|
||||
|
@ -272,7 +306,7 @@ namespace Sledgemapper
|
|||
_state.SelectOverlay(screenPosition);
|
||||
}
|
||||
|
||||
if (_state.InsertMode == InsertMode.NewLine || _state.InsertMode == InsertMode.NewRoom)
|
||||
if (_state.InsertMode == InsertMode.NewLine || _state.InsertMode == InsertMode.NewRoom || _state.InsertMode == InsertMode.NewDelete)
|
||||
{
|
||||
_state.SelectClosestSnapPoint(screenPosition);
|
||||
}
|
||||
|
@ -282,6 +316,16 @@ namespace Sledgemapper
|
|||
// CenterOnSelectedTile();
|
||||
// }
|
||||
|
||||
if (newState.IsKeyUp(Keys.Up) && (newState.IsKeyUp(Keys.Up) != oldState.IsKeyUp(Keys.Up)))
|
||||
{
|
||||
_settings.Thickness++;
|
||||
}
|
||||
|
||||
if (newState.IsKeyUp(Keys.Down) && (newState.IsKeyUp(Keys.Down) != oldState.IsKeyUp(Keys.Down)))
|
||||
{
|
||||
_settings.Threshold++;
|
||||
}
|
||||
|
||||
if (!newState.IsKeyDown(Keys.LeftControl) && mouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == oldMouseState.LeftButton)
|
||||
{
|
||||
_viewportCenter = new Vector3(_viewportCenter.X + mouseState.Position.X - oldMouseState.Position.X, _viewportCenter.Y + mouseState.Position.Y - oldMouseState.Position.Y, 0);
|
||||
|
@ -410,6 +454,31 @@ namespace Sledgemapper
|
|||
|
||||
}
|
||||
|
||||
|
||||
if (_state.InsertMode == InsertMode.NewDelete && newState.IsKeyDown(Keys.LeftControl)
|
||||
&& mouseState.LeftButton == ButtonState.Released
|
||||
&& mouseState.LeftButton != oldMouseState.LeftButton)
|
||||
{
|
||||
if (_state.LineStart is null)
|
||||
{
|
||||
_state.LineStart = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index = _state.SelectedSnapPoint.Index };
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var line = new Room
|
||||
{
|
||||
Start = new SnapPoint { X = _state.LineStart.X, Y = _state.LineStart.Y, Index = _state.LineStart.Index },
|
||||
End = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index = _state.SelectedSnapPoint.Index },
|
||||
Delete = true
|
||||
};
|
||||
_state.LineStart = null;
|
||||
_state.LineWidth = 1;
|
||||
_sessionData.NewRoom(line);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (_state.InsertMode == InsertMode.NewLine && _state.LineStart != null)
|
||||
{
|
||||
if (mouseState.ScrollWheelValue > oldMouseState.ScrollWheelValue)
|
||||
|
@ -527,23 +596,73 @@ namespace Sledgemapper
|
|||
{
|
||||
return;
|
||||
}
|
||||
GraphicsDevice.Clear(_settings.BackgroundColor);
|
||||
|
||||
var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1;
|
||||
var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1;
|
||||
|
||||
_spriteBatch.Begin(transformMatrix: Matrix.CreateTranslation(_viewportCenter));
|
||||
|
||||
DrawTiles();
|
||||
|
||||
GraphicsDevice.SetRenderTarget(rendertarget);
|
||||
GraphicsDevice.Clear(Color.Transparent);
|
||||
|
||||
DrawBorderLines();
|
||||
DrawBorderRooms();
|
||||
DrawInnerLines();
|
||||
DrawInnerRooms();
|
||||
DrawWalls();
|
||||
DrawOverlays();
|
||||
DrawNotes();
|
||||
_spriteBatch.Begin(
|
||||
transformMatrix: Matrix.CreateTranslation(_viewportCenter),
|
||||
blendState: BlendState.Opaque,
|
||||
sortMode: SpriteSortMode.Immediate);
|
||||
|
||||
// DrawTiles();
|
||||
|
||||
var items = new List<BaseMapEntity>();
|
||||
items.AddRange(_sessionData.Lines.Values);
|
||||
items.AddRange(_sessionData.Rooms.Values);
|
||||
|
||||
foreach (var item in items.OrderBy(t => t.Timestamp))
|
||||
{
|
||||
switch (item)
|
||||
{
|
||||
case Line l:
|
||||
DrawLine(l);
|
||||
break;
|
||||
|
||||
case Room room:
|
||||
if (room.Delete)
|
||||
{
|
||||
DrawDelete(room);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawRoom(room);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//DrawWalls();
|
||||
|
||||
_spriteBatch.End();
|
||||
|
||||
GraphicsDevice.SetRenderTarget(null);
|
||||
GraphicsDevice.Clear(_settings.BackgroundColor);
|
||||
|
||||
Vector2 texelSize = new Vector2((float)(1 / (double)rendertarget.Width), (float)(1 / (double)rendertarget.Height));
|
||||
outlineShader.Parameters["TexelSize"].SetValue(texelSize);
|
||||
outlineShader.Parameters["BorderSize"].SetValue(_state.TileSize / 8);
|
||||
|
||||
outlineShader.Parameters["R"].SetValue(_settings.OverlayTintColor.R / 255.0f);
|
||||
outlineShader.Parameters["G"].SetValue(_settings.OverlayTintColor.G / 255.0f);
|
||||
outlineShader.Parameters["B"].SetValue(_settings.OverlayTintColor.B / 255.0f);
|
||||
|
||||
_spriteBatch.Begin(
|
||||
effect: outlineShader,
|
||||
blendState: BlendState.AlphaBlend,
|
||||
sortMode: SpriteSortMode.Immediate);
|
||||
_spriteBatch.Draw(rendertarget, Vector2.Zero, null, Color.White);
|
||||
_spriteBatch.End();
|
||||
|
||||
_spriteBatch.Begin(
|
||||
transformMatrix: Matrix.CreateTranslation(_viewportCenter),
|
||||
sortMode: SpriteSortMode.Deferred);
|
||||
|
||||
//DrawOverlays();
|
||||
//DrawNotes();
|
||||
DrawGrid(visibleTilesX, visibleTilesY);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(_sessionData.SessionName))
|
||||
|
@ -711,7 +830,7 @@ DrawBorderLines();
|
|||
}
|
||||
}
|
||||
|
||||
if (_state.InsertMode == InsertMode.NewRoom && _state.SelectedSnapPoint != null)
|
||||
if ((_state.InsertMode == InsertMode.NewRoom || _state.InsertMode == InsertMode.NewDelete) && _state.SelectedSnapPoint != null)
|
||||
{
|
||||
var snapPoint = new Vector2(_state.SelectedSnapPoint.X * _state.TileSize, _state.SelectedSnapPoint.Y * _state.TileSize);
|
||||
|
||||
|
@ -807,7 +926,6 @@ DrawBorderLines();
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
_spriteBatch.End();
|
||||
|
||||
try
|
||||
|
@ -1075,10 +1193,6 @@ DrawBorderLines();
|
|||
whiteRectangle.SetData(new[] { _settings.OverlayTintColor });
|
||||
|
||||
_spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX - _borderWidth / 2, (int)posY - _borderWidth / 2, _state.TileSize + _borderWidth, _state.TileSize + _borderWidth), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
// _spriteBatch.DrawRectangle(new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+_borderWidth, _state.TileSize+_borderWidth), _settings.OverlayTintColor,1);
|
||||
|
||||
// _spriteBatch.Draw(content, new Vector2(posX, posY),
|
||||
// null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize) / content.Width, SpriteEffects.None, 0);
|
||||
}
|
||||
|
||||
//inner pass
|
||||
|
@ -1094,24 +1208,150 @@ DrawBorderLines();
|
|||
whiteRectangle.SetData(new[] { Color.White });
|
||||
|
||||
_spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
|
||||
// _spriteBatch.DrawRectangle(new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize), _settings.BackgroundColor,1);
|
||||
|
||||
// _spriteBatch.Draw(content, new Vector2(posX, posY),
|
||||
// null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize) / content.Width, SpriteEffects.None, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawBorderLines()
|
||||
private void DrawLine(Line tile)
|
||||
{
|
||||
// var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
// borderRectangle.SetData(new[] { _settings.OverlayTintColor });
|
||||
//inner pass
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
|
||||
// var innerRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
// innerRectangle.SetData(new[] { Color.White });
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
|
||||
// border pass
|
||||
foreach (var tile in _sessionData.Lines.Values)
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (tile.End.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
var length = (int)Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2));
|
||||
var height = (int)(_state.TileSize * tile.Width);
|
||||
if (length > 0)
|
||||
{
|
||||
var innerRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
innerRectangle.SetData(new[] { Color.White });
|
||||
var angle = Math.Atan2(posY - endposY, endposX - posX);
|
||||
var angleRad = -(float)angle;
|
||||
_spriteBatch.Draw(innerRectangle, new Rectangle(posX, posY, length, height), null, Color.White, angleRad, new Vector2(0, 0), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void DrawRoom(Room tile)
|
||||
{
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (tile.End.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (posX != endposX && posY != endposY)
|
||||
{
|
||||
|
||||
var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
borderRectangle.SetData(new[] { Color.White });
|
||||
if ((posX < endposX && posY < endposY))
|
||||
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
else if ((posX > endposX && posY > endposY))
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (endposY < posY)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, endposY, endposX - posX, posY - endposY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
if (endposX < posX)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(endposX, posY, posX - endposX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// _spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, length, height), null, Color.White, 0, new Vector2(0, _borderWidth / 2), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
Effect outlineShader; // Outline shader effect
|
||||
|
||||
private void DrawDelete()
|
||||
{
|
||||
|
||||
|
||||
//inner pass
|
||||
foreach (var tile in _sessionData.Rooms.Values.Where(r => r.Delete))
|
||||
{
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
|
||||
|
@ -1155,255 +1395,119 @@ DrawBorderLines();
|
|||
break;
|
||||
}
|
||||
|
||||
var length = (int)Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2));
|
||||
var height = (int)(_state.TileSize * tile.Width) + _borderWidth;
|
||||
if (length > 0)
|
||||
{
|
||||
|
||||
var borderRectangle = new Texture2D(GraphicsDevice, length, height);
|
||||
borderRectangle.SetData(Enumerable.Range(0, length * height).Select(i => _settings.OverlayTintColor).ToArray());
|
||||
var angle = Math.Atan2(posY - endposY, endposX - posX);
|
||||
var angleRad = -(float)angle;
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, length, height), null, Color.White, angleRad, new Vector2(0, _borderWidth / 2), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void DrawInnerLines()
|
||||
{
|
||||
//inner pass
|
||||
foreach (var tile in _sessionData.Lines.Values)
|
||||
{
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (tile.End.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
var length = (int)Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2));
|
||||
var height = (int)(_state.TileSize * tile.Width);
|
||||
if (length > 0)
|
||||
{
|
||||
var innerRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
innerRectangle.SetData(new[] { Color.White });
|
||||
var angle = Math.Atan2(posY - endposY, endposX - posX);
|
||||
var angleRad = -(float)angle;
|
||||
_spriteBatch.Draw(innerRectangle, new Rectangle(posX, posY, length, height), null, Color.White, angleRad, new Vector2(0, 0), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawBorderRooms()
|
||||
{
|
||||
// var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
// borderRectangle.SetData(new[] { _settings.OverlayTintColor });
|
||||
|
||||
// var innerRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
// innerRectangle.SetData(new[] { Color.White });
|
||||
|
||||
// border pass
|
||||
foreach (var tile in _sessionData.Rooms.Values)
|
||||
{
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (tile.End.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
// posX-=_borderWidth/2;
|
||||
// posY-=_borderWidth/2;
|
||||
if (posX != endposX && posY != endposY)
|
||||
{
|
||||
|
||||
var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
borderRectangle.SetData(new [] { _settings.OverlayTintColor });
|
||||
if ( (posX < endposX && posY < endposY))
|
||||
|
||||
borderRectangle.SetData(new[] { Color.Transparent });
|
||||
if ((posX < endposX && posY < endposY))
|
||||
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
else if ((posX > endposX && posY > endposY))
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (endposY < posY)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX-_borderWidth/2, posY-_borderWidth/2, endposX - posX+_borderWidth, endposY - posY+_borderWidth), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
else if ((posX > endposX && posY > endposY) )
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX+_borderWidth/2, posY+_borderWidth/2, endposX - posX-_borderWidth, endposY - posY-_borderWidth), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, endposY, endposX - posX, posY - endposY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
else
|
||||
if (endposX < posX)
|
||||
{
|
||||
if (endposY < posY)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX-_borderWidth/2, endposY-_borderWidth/2, endposX - posX+_borderWidth, posY - endposY+_borderWidth), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
if (endposX < posX)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(endposX-_borderWidth/2, posY-_borderWidth/2, posX - endposX+_borderWidth, endposY - posY+_borderWidth), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(endposX, posY, posX - endposX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// _spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, length, height), null, Color.White, 0, new Vector2(0, _borderWidth / 2), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void DrawInnerRooms()
|
||||
private void DrawDelete(Room tile)
|
||||
{
|
||||
|
||||
|
||||
|
||||
//inner pass
|
||||
foreach (var tile in _sessionData.Rooms.Values)
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
var posX = tile.Start.X * _state.TileSize;
|
||||
var posY = tile.Start.Y * _state.TileSize;
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
var endposX = tile.End.X * _state.TileSize;
|
||||
var endposY = tile.End.Y * _state.TileSize;
|
||||
switch (tile.End.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (posX != endposX && posY != endposY)
|
||||
{
|
||||
|
||||
var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
borderRectangle.SetData(new[] { Color.Transparent });
|
||||
if ((posX < endposX && posY < endposY))
|
||||
|
||||
switch (tile.Start.Index)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
posX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
posY += _state.TileSize / 2;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
posX += _state.TileSize / 2;
|
||||
posY += _state.TileSize / 2;
|
||||
break;
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
else if ((posX > endposX && posY > endposY))
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
switch (tile.End.Index)
|
||||
else
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
endposX += _state.TileSize / 2;
|
||||
break;
|
||||
case 3:
|
||||
endposY += _state.TileSize / 2;
|
||||
if (endposY < posY)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, endposY, endposX - posX, posY - endposY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
break;
|
||||
case 4:
|
||||
endposX += _state.TileSize / 2;
|
||||
endposY += _state.TileSize / 2;
|
||||
break;
|
||||
if (endposX < posX)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(endposX, posY, posX - endposX, endposY - posY), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (posX != endposX && posY != endposY)
|
||||
{
|
||||
|
||||
var borderRectangle = new Texture2D(GraphicsDevice, 1, 1);
|
||||
borderRectangle.SetData(new [] {Color.White });
|
||||
if ( (posX < endposX && posY < endposY))
|
||||
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX , posY , endposX - posX , endposY - posY ), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
else if ((posX > endposX && posY > endposY) )
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX , posY , endposX - posX , endposY - posY ), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (endposY < posY)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(posX, endposY, endposX - posX , posY - endposY ), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
|
||||
if (endposX < posX)
|
||||
{
|
||||
_spriteBatch.Draw(borderRectangle, new Rectangle(endposX , posY , posX - endposX , endposY - posY ), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// _spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, length, height), null, Color.White, 0, new Vector2(0, _borderWidth / 2), SpriteEffects.None, 1);
|
||||
}
|
||||
// _spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, length, height), null, Color.White, 0, new Vector2(0, _borderWidth / 2), SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue