More solid grid to pixel conversion
This commit is contained in:
@@ -8,8 +8,8 @@ namespace DepthsBelow.Component
|
|||||||
{
|
{
|
||||||
public class GridTransform : Component
|
public class GridTransform : Component
|
||||||
{
|
{
|
||||||
public Vector2 Position;
|
public Point Position;
|
||||||
public float X
|
public int X
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,7 @@ namespace DepthsBelow.Component
|
|||||||
Position.X = value;
|
Position.X = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public float Y
|
public int Y
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -34,7 +34,12 @@ namespace DepthsBelow.Component
|
|||||||
|
|
||||||
public GridTransform(Entity parent) : base(parent)
|
public GridTransform(Entity parent) : base(parent)
|
||||||
{
|
{
|
||||||
Position = Vector2.Zero;
|
Position = Point.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector2 ToScreen()
|
||||||
|
{
|
||||||
|
return Grid.GridToScreen(Position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,5 +41,10 @@ namespace DepthsBelow.Component
|
|||||||
Rotation = 0.0f;
|
Rotation = 0.0f;
|
||||||
Origin = Vector2.Zero;
|
Origin = Vector2.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Point ToGrid()
|
||||||
|
{
|
||||||
|
return Grid.ScreenToGrid(Position);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Microsoft.Xna.Framework;
|
using System;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
@@ -6,13 +7,17 @@ namespace DepthsBelow
|
|||||||
{
|
{
|
||||||
public const int TileSize = 32;
|
public const int TileSize = 32;
|
||||||
|
|
||||||
public static Vector2 GridToScreen(Vector2 gridPos)
|
public static Vector2 GridToScreen(Point gridPos)
|
||||||
{
|
{
|
||||||
return gridPos * TileSize;
|
return new Vector2(gridPos.X * TileSize, gridPos.Y * TileSize);
|
||||||
}
|
}
|
||||||
public static Vector2 ScreenToGrid(Vector2 screenPos)
|
|
||||||
{
|
public static Point ScreenToGrid(Vector2 screenPos)
|
||||||
return screenPos / TileSize;
|
{
|
||||||
|
return new Point(
|
||||||
|
(int)Math.Floor(screenPos.X / TileSize),
|
||||||
|
(int)Math.Floor(screenPos.Y / TileSize)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ namespace DepthsBelow
|
|||||||
MouseState lastMouseState;
|
MouseState lastMouseState;
|
||||||
Rectangle selectionRectangle;
|
Rectangle selectionRectangle;
|
||||||
Texture2D selectionTexture;
|
Texture2D selectionTexture;
|
||||||
|
|
||||||
Rectangle gridRectangle;
|
Rectangle gridRectangle;
|
||||||
Texture2D gridTexture;
|
Texture2D gridTexture;
|
||||||
|
|
||||||
@@ -25,6 +24,7 @@ namespace DepthsBelow
|
|||||||
this.core = core;
|
this.core = core;
|
||||||
|
|
||||||
selectionRectangle = Rectangle.Empty;
|
selectionRectangle = Rectangle.Empty;
|
||||||
|
gridRectangle = Rectangle.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadContent()
|
public void LoadContent()
|
||||||
@@ -41,6 +41,7 @@ namespace DepthsBelow
|
|||||||
MouseState ms = Mouse.GetState();
|
MouseState ms = Mouse.GetState();
|
||||||
KeyboardState ks = Keyboard.GetState();
|
KeyboardState ks = Keyboard.GetState();
|
||||||
|
|
||||||
|
// Selection rectangle
|
||||||
if (ms.LeftButton == ButtonState.Pressed)
|
if (ms.LeftButton == ButtonState.Pressed)
|
||||||
{
|
{
|
||||||
if (selectionRectangle == Rectangle.Empty)
|
if (selectionRectangle == Rectangle.Empty)
|
||||||
@@ -53,7 +54,6 @@ namespace DepthsBelow
|
|||||||
selectionRectangle.Height = ms.Y - selectionRectangle.Y + (int)core.camera.Position.Y;
|
selectionRectangle.Height = ms.Y - selectionRectangle.Y + (int)core.camera.Position.Y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ms.LeftButton == ButtonState.Released && selectionRectangle != Rectangle.Empty)
|
if (ms.LeftButton == ButtonState.Released && selectionRectangle != Rectangle.Empty)
|
||||||
{
|
{
|
||||||
if (!ks.IsKeyDown(Keys.LeftControl))
|
if (!ks.IsKeyDown(Keys.LeftControl))
|
||||||
@@ -67,9 +67,8 @@ namespace DepthsBelow
|
|||||||
selectionRectangle = Rectangle.Empty;
|
selectionRectangle = Rectangle.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2 currentGrid = Grid.ScreenToGrid(new Vector2(ms.X + core.camera.Position.X - Grid.TileSize / 2, ms.Y + core.camera.Position.Y - Grid.TileSize / 2));
|
// Grid highlighting
|
||||||
currentGrid.X = Convert.ToInt32(currentGrid.X);
|
Point currentGrid = Grid.ScreenToGrid(new Vector2(ms.X + core.camera.Position.X, ms.Y + core.camera.Position.Y));
|
||||||
currentGrid.Y = Convert.ToInt32(currentGrid.Y);
|
|
||||||
Vector2 currentScreen = Grid.GridToScreen(currentGrid);
|
Vector2 currentScreen = Grid.GridToScreen(currentGrid);
|
||||||
gridRectangle = new Rectangle((int)currentScreen.X, (int)currentScreen.Y, Grid.TileSize, Grid.TileSize);
|
gridRectangle = new Rectangle((int)currentScreen.X, (int)currentScreen.Y, Grid.TileSize, Grid.TileSize);
|
||||||
|
|
||||||
@@ -78,8 +77,8 @@ namespace DepthsBelow
|
|||||||
|
|
||||||
public void Draw(SpriteBatch spriteBatch)
|
public void Draw(SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
spriteBatch.Draw(gridTexture, gridRectangle, Color.Yellow * 0.3f);
|
|
||||||
spriteBatch.Draw(selectionTexture, selectionRectangle, Color.Red * 0.5f);
|
spriteBatch.Draw(selectionTexture, selectionRectangle, Color.Red * 0.5f);
|
||||||
|
spriteBatch.Draw(gridTexture, gridRectangle, Color.Yellow * 0.3f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,13 +71,13 @@ namespace DepthsBelow
|
|||||||
lastKeyboardState = ks;
|
lastKeyboardState = ks;
|
||||||
|
|
||||||
int speed = 2;
|
int speed = 2;
|
||||||
if (pixelTransform.X < gridTransform.X * 32)
|
if (pixelTransform.X < gridTransform.ToScreen().X)
|
||||||
pixelTransform.X += speed;
|
pixelTransform.X += speed;
|
||||||
else if (pixelTransform.X > gridTransform.X * 32)
|
else if (pixelTransform.X > gridTransform.ToScreen().X)
|
||||||
pixelTransform.X -= speed;
|
pixelTransform.X -= speed;
|
||||||
else if (pixelTransform.Y < gridTransform.Y * 32)
|
else if (pixelTransform.Y < gridTransform.ToScreen().Y)
|
||||||
pixelTransform.Y += speed;
|
pixelTransform.Y += speed;
|
||||||
else if (pixelTransform.Y > gridTransform.Y * 32)
|
else if (pixelTransform.Y > gridTransform.ToScreen().Y)
|
||||||
pixelTransform.Y -= speed;
|
pixelTransform.Y -= speed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user