diff --git a/Sledgemapper/Content/shaders/OutlineShader.fx b/Sledgemapper/Content/shaders/OutlineShader.fx index 03b8d15..4f9f5ad 100644 --- a/Sledgemapper/Content/shaders/OutlineShader.fx +++ b/Sledgemapper/Content/shaders/OutlineShader.fx @@ -7,60 +7,46 @@ #define PS_SHADERMODEL ps_4_0_level_9_1 #endif float2 TexelSize; // should be (1f/textureSize.X, 1f/textureSize.Y) -int shadow; int BorderSize; float R; float G; float B; -Texture2D SpriteTexture; sampler2D SpriteTextureSampler = sampler_state { Texture = ; }; + struct VertexShaderOutput { float4 Color : COLOR0; float2 TextureCoordinates : TEXCOORD0; }; -sampler ColorMapSampler = sampler_state -{ - Texture = ; - MinFilter = Linear; - MagFilter = Linear; - MipFilter = Linear; - AddressU = Clamp; - AddressV = Clamp; -}; - - float4 MainPS(VertexShaderOutput input) : COLOR { -float4 color = tex2D(ColorMapSampler, input.TextureCoordinates); -float2 offsetX = float2(TexelSize.x, 0); -float2 offsetY = { 0, TexelSize.y }; + float4 color = tex2D(SpriteTextureSampler, input.TextureCoordinates); + + if (color.a > 0) + { + return color; + } -float2 offsetd1 = { TexelSize.x, TexelSize.y }; -float2 offsetd2 = { -TexelSize.x, -TexelSize.y }; -float2 offsetd3 = { TexelSize.x, -TexelSize.y }; -float2 offsetd4 = { -TexelSize.x, TexelSize.y }; + float2 offsetX = float2(TexelSize.x, 0); + float2 offsetY = float2( 0, TexelSize.y ); -if (color.a == 0) -{ - for (int i = 1; i < 16; i++) + for (int i = 1; i < 10; i++) { if (i<=BorderSize) { - float4 c1 = tex2D(ColorMapSampler, input.TextureCoordinates + offsetX*i); - float4 c2 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetX*i); - float4 c3 = tex2D(ColorMapSampler, input.TextureCoordinates + offsetY*i); - float4 c4 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetY*i); - - float4 d1 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetd1*i); - float4 d2 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetd2*i); - float4 d3 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetd3*i); - float4 d4 = tex2D(ColorMapSampler, input.TextureCoordinates - offsetd4*i); + float4 c1 = tex2D(SpriteTextureSampler, input.TextureCoordinates + offsetX*i); + float4 c2 = tex2D(SpriteTextureSampler, input.TextureCoordinates - offsetX*i); + float4 c3 = tex2D(SpriteTextureSampler, input.TextureCoordinates + offsetY*i); + float4 c4 = tex2D(SpriteTextureSampler, input.TextureCoordinates - offsetY*i); + float4 d1 = tex2D(SpriteTextureSampler, input.TextureCoordinates - (offsetX+offsetY)*i); + float4 d2 = tex2D(SpriteTextureSampler, input.TextureCoordinates + (offsetX+offsetY)*i); + float4 d3 = tex2D(SpriteTextureSampler, input.TextureCoordinates - (offsetX-offsetY)*i); + float4 d4 = tex2D(SpriteTextureSampler, input.TextureCoordinates - (-offsetX+offsetY)*i); if (color.a != c1.a || color.a != c2.a|| color.a != c3.a|| color.a != c4.a || color.a != d1.a @@ -76,9 +62,6 @@ if (color.a == 0) } } } - return color; -} - return color; } diff --git a/Sledgemapper/Settings.cs b/Sledgemapper/Settings.cs index 46ab8cb..343f071 100644 --- a/Sledgemapper/Settings.cs +++ b/Sledgemapper/Settings.cs @@ -11,8 +11,6 @@ namespace Sledgemapper public Color GridColor { get; set; } public Color NoteColor { get; set; } public string MachineName { get; set; } - public int Thickness { get; internal set; } - public int Threshold { get; internal set; } public Settings() { diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index be128b5..68fcb6e 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -6,7 +6,6 @@ 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; @@ -79,7 +78,6 @@ namespace Sledgemapper _mainWidget.lblConnectionStatus.Text = "Reconnecting"; await Task.Yield(); } - private async Task OnHubReconnected(string arg) { ExceptionlessClient.Default.SubmitEvent(new Event { Message = "Hub reconnected", Type = "SignalR Client Events", Source = _settings.MachineName }); @@ -103,8 +101,8 @@ namespace Sledgemapper 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); + rendertarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, true, SurfaceFormat.Alpha8, DepthFormat.Depth16, 0, RenderTargetUsage.DiscardContents); + //rendertarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height); } catch @@ -137,12 +135,8 @@ namespace Sledgemapper { _spriteBatch = new SpriteBatch(GraphicsDevice); outlineShader = Content.Load("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); + rendertarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, true, SurfaceFormat.Alpha8, DepthFormat.Depth16, 0, RenderTargetUsage.DiscardContents); _mainWidget = new MainWidget(); @@ -167,7 +161,6 @@ namespace Sledgemapper _mainWidget.BtnToolbarWall.Click += OnBtnToolbarWallClicked; _mainWidget.BtnToolbarDelete.Click += OnBtnToolbarDeleteClicked; - AddItemToToolGrid(_mainWidget.GridTiles, OnTileButtonClicked, "tiles"); AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls"); AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, "overlays"); @@ -191,7 +184,6 @@ namespace Sledgemapper private void OnBtnToolbarTileClicked(object sender, EventArgs e) { _state.InsertMode = InsertMode.NewTile; - } private void OnBtnToolbarRoomClicked(object sender, EventArgs e) @@ -279,7 +271,6 @@ namespace Sledgemapper if (IsActive && GraphicsDevice.Viewport.Bounds.Contains(Mouse.GetState().Position) && !_desktop.IsMouseOverGUI && !_desktop.HasModalWidget) { - var mouseState = Mouse.GetState(); var screenPosition = new Point(mouseState.Position.X - (int)_viewportCenter.X, mouseState.Position.Y - (int)_viewportCenter.Y); @@ -311,21 +302,6 @@ namespace Sledgemapper _state.SelectClosestSnapPoint(screenPosition); } - // if (newState.IsKeyDown(Keys.LeftControl) && newState.IsKeyDown(Keys.C) && !oldState.IsKeyDown(Keys.C)) - // { - // 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); @@ -372,7 +348,6 @@ namespace Sledgemapper viewNoteButton.Click += OnContextMenuViewNoteClick; deleteNoteButton.Click += OnContextMenuDeleteNoteClick; - popup.AddChild(viewNoteButton); popup.AddChild(deleteNoteButton); } @@ -393,7 +368,6 @@ namespace Sledgemapper _sessionData.NewTile(_state.SelectedTile, _state.CurrentTileId); break; - case InsertMode.Wall: _sessionData.NewWall(_state.SelectedWall, _state.CurrentWallId); @@ -425,10 +399,7 @@ namespace Sledgemapper _state.LineStart = null; _state.LineWidth = 1; _sessionData.NewLine(line); - - } - } if (_state.InsertMode == InsertMode.NewRoom && newState.IsKeyDown(Keys.LeftControl) @@ -599,22 +570,17 @@ namespace Sledgemapper var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1; var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1; - GraphicsDevice.SetRenderTarget(rendertarget); - GraphicsDevice.Clear(Color.Transparent); - _spriteBatch.Begin( + _spriteBatch.Begin(depthStencilState: DepthStencilState.None, transformMatrix: Matrix.CreateTranslation(_viewportCenter), blendState: BlendState.Opaque, - sortMode: SpriteSortMode.Immediate); - // DrawTiles(); + sortMode: SpriteSortMode.Deferred); - var items = new List(); - items.AddRange(_sessionData.Lines.Values); - items.AddRange(_sessionData.Rooms.Values); + GraphicsDevice.Clear(Color.Transparent); - foreach (var item in items.OrderBy(t => t.Timestamp)) + foreach (var item in _sessionData.Lines.Values.Union(_sessionData.Rooms.Values).OrderBy(t => t.Timestamp)) { switch (item) { @@ -640,7 +606,6 @@ namespace Sledgemapper _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); @@ -651,9 +616,10 @@ namespace Sledgemapper outlineShader.Parameters["B"].SetValue(_settings.OverlayTintColor.B / 255.0f); _spriteBatch.Begin( - effect: outlineShader, + effect: outlineShader, blendState: BlendState.AlphaBlend, - sortMode: SpriteSortMode.Immediate); + sortMode: SpriteSortMode.Deferred); + GraphicsDevice.Clear(_settings.BackgroundColor); _spriteBatch.Draw(rendertarget, Vector2.Zero, null, Color.White); _spriteBatch.End(); @@ -661,8 +627,8 @@ namespace Sledgemapper transformMatrix: Matrix.CreateTranslation(_viewportCenter), sortMode: SpriteSortMode.Deferred); - //DrawOverlays(); - //DrawNotes(); + DrawOverlays(); + DrawNotes(); DrawGrid(visibleTilesX, visibleTilesY); if (string.IsNullOrWhiteSpace(_sessionData.SessionName)) @@ -820,11 +786,9 @@ namespace Sledgemapper if (l > 0) { var whiteRectangle = new Texture2D(GraphicsDevice, (int)l, (int)(_state.TileSize * _state.LineWidth)); - // whiteRectangle.SetData(new[] { new Color(Color.Red, 80) }); whiteRectangle.SetData(Enumerable.Range(0, (int)l * ((int)(_state.TileSize * _state.LineWidth))).Select(i => new Color(Color.Red, 80)).ToArray()); - _spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize * _state.LineWidth)), null, Color.White, angleRad, new Vector2(0, 0), SpriteEffects.None, 1); } } @@ -850,17 +814,12 @@ namespace Sledgemapper break; } - _spriteBatch.DrawCircle(snapPoint, _state.TileSize / 5f, 100, Color.Red, 2); + _spriteBatch.DrawCircle(snapPoint, _state.TileSize / 6f, 50, Color.Red, 2); //line preview if (_state.LineStart != null) { - - // border pass - - // var content = Content.Load($"tiles/{tile.ID}"); - var posX = _state.LineStart.X * _state.TileSize; var posY = _state.LineStart.Y * _state.TileSize; @@ -1210,12 +1169,8 @@ namespace Sledgemapper _spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1); } } - private void DrawLine(Line tile) { - //inner pass - // var content = Content.Load($"tiles/{tile.ID}"); - var posX = tile.Start.X * _state.TileSize; var posY = tile.Start.Y * _state.TileSize; @@ -1268,7 +1223,7 @@ namespace Sledgemapper } } - + private void DrawRoom(Room tile) { var posX = tile.Start.X * _state.TileSize; @@ -1338,105 +1293,12 @@ namespace Sledgemapper _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($"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; - } - - if (posX != endposX && posY != endposY) - { - - var borderRectangle = new Texture2D(GraphicsDevice, 1, 1); - 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, 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); - } - } - } - private void DrawDelete(Room tile) { - - - //inner pass - // var content = Content.Load($"tiles/{tile.ID}"); - var posX = tile.Start.X * _state.TileSize; var posY = tile.Start.Y * _state.TileSize; @@ -1504,10 +1366,6 @@ namespace Sledgemapper _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); } } @@ -1899,15 +1757,6 @@ namespace Sledgemapper _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;