working shader
This commit is contained in:
parent
07685fcd9c
commit
be8e56cf27
3 changed files with 32 additions and 202 deletions
|
@ -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<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);
|
||||
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<BaseMapEntity>();
|
||||
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<BaseMapEntity>(_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<Texture2D>($"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<Texture2D>($"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<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;
|
||||
}
|
||||
|
||||
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<Texture2D>($"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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue