diff --git a/Tiles/Game.cs b/Tiles/Game.cs index 7521903..4ce1245 100644 --- a/Tiles/Game.cs +++ b/Tiles/Game.cs @@ -13,14 +13,16 @@ public class Game private int _screenHeight; private Dictionary _tiles = new(); - private Dictionary _worldGrid = new(); + private Dictionary<(int x, int y), string> _worldGrid = new(); private Vector2 _playerPosition; private float _playerSpeed = 2f; + private Vector2 _pointerPosition = Vector2.Zero; + private Camera2D _camera; - private string _currentSelectedTile = "air"; + private string _currentSelectedTile = "dirt"; private int _currentSelectedIndex = 0; public Game(int screenWidth, int screenHeight) @@ -37,7 +39,7 @@ public class Game Target = _playerPosition, Offset = new Vector2(_screenWidth / 2, _screenHeight / 2), Rotation = 0f, - Zoom = 5f + Zoom = 4f }; SetupTiles(); @@ -55,6 +57,7 @@ public class Game DrawWorld(); DrawPlayer(); + DrawPointer(); DrawDebug(); Raylib.EndMode2D(); @@ -74,21 +77,23 @@ public class Game _currentSelectedIndex = (_currentSelectedIndex + 1) % _tiles.Count; _currentSelectedTile = _tiles.Keys.ElementAt(_currentSelectedIndex); } - if (Raylib.IsKeyReleased(KeyboardKey.Left)) { - _currentSelectedIndex = (_currentSelectedIndex - 1) % _tiles.Count; + _currentSelectedIndex = (_currentSelectedIndex - 1 + _tiles.Count) % _tiles.Count; _currentSelectedTile = _tiles.Keys.ElementAt(_currentSelectedIndex); } - if (Raylib.IsKeyReleased(KeyboardKey.Space)) + if (Raylib.IsMouseButtonDown(MouseButton.Left)) { - Random random = new(); - var tile = _tiles.Keys.ElementAt(random.Next(_tiles.Keys.Count)); - SetTile(GetGridPositionFromGlobalPosition((int)_playerPosition.X, (int)_playerPosition.Y), _currentSelectedTile); + SetTile((int)_pointerPosition.X, (int)_pointerPosition.Y, _currentSelectedTile); + } + if (Raylib.IsMouseButtonDown(MouseButton.Right)) + { + SetTile((int)_pointerPosition.X, (int)_pointerPosition.Y, "air"); } - if (Raylib.IsKeyReleased(KeyboardKey.Zero)) _currentSelectedTile = "air"; + if (Raylib.IsKeyReleased(KeyboardKey.Up)) _playerSpeed += 1f; + if (Raylib.IsKeyReleased(KeyboardKey.Down)) _playerSpeed -= 1f; } private void SetupTiles() @@ -112,7 +117,7 @@ public class Game { for (int y = startY; y <= endY; y++) { - Vector2 position = new(x, y); + (int x, int y) position = new(x, y); if (_worldGrid.TryGetValue(position, out var tileType) && tileType != "air") { Raylib.DrawTexture(_tiles[tileType].Texture, x * _tileSize, y * _tileSize, Color.White); @@ -124,9 +129,39 @@ public class Game private void DrawPlayer() { - Raylib.DrawRectangle((int)_playerPosition.X, (int)_playerPosition.Y, _tileSize, _tileSize, new(255,255,0,100)); + Raylib.DrawRectangle((int)_playerPosition.X, (int)_playerPosition.Y, 16, 32, new(0,0,100,255)); } + private void DrawPointer() + { + // Get the mouse position in screen space + Vector2 mousePosition = Raylib.GetMousePosition(); + + // Convert screen space to world space using the camera transformation + Vector2 worldPosition = Raylib.GetScreenToWorld2D(mousePosition, _camera); + + // Calculate the pointer's grid coordinates based on the world position + Vector2 gridPosition = new Vector2( + (int)(worldPosition.X / _tileSize), + (int)(worldPosition.Y / _tileSize) + ); + + // Update _pointerPosition to reflect top-left corner of that tile + _pointerPosition = new Vector2( + gridPosition.X, + gridPosition.Y + ); + + // Draw a semi-transparent tile over the current grid tile + Raylib.DrawRectangle( + (int)_pointerPosition.X*_tileSize, + (int)_pointerPosition.Y*_tileSize, + _tileSize, + _tileSize, + new Color(255, 255, 0, 80) + ); + } + private void DrawDebug() { int textSize = 10; @@ -135,30 +170,19 @@ public class Game int textPositionX = (int)(_camera.Target.X - _screenWidth / 2 / _camera.Zoom) + 10; int textPositionY = (int)(_camera.Target.Y - _screenHeight / 2 / _camera.Zoom) + 10; - Raylib.DrawText(_currentSelectedTile, textPositionX, textPositionY, textSize, Color.White); - Raylib.DrawText("Global: " + _playerPosition.ToString(), textPositionX, textPositionY + (textSize*2), textSize, Color.White); - Raylib.DrawText("Grid: " + GetGridPositionFromGlobalPosition((int)_playerPosition.X, (int)_playerPosition.Y).ToString().ToUpper(), + Raylib.DrawText("FPS: " + Raylib.GetFPS(), textPositionX, textPositionY, textSize, Color.White); + Raylib.DrawText(_currentSelectedTile, textPositionX, textPositionY + (textSize*2), textSize, Color.White); + Raylib.DrawText("Coords: " + GetGridPositionFromGlobalPosition((int)_playerPosition.X, (int)_playerPosition.Y).ToString().ToUpper(), textPositionX, textPositionY + (textSize * 3), textSize, Color.White); - Raylib.DrawText("FPS: " + Raylib.GetFPS(), textPositionX, textPositionY + (textSize*4), textSize, Color.White); + Raylib.DrawText("Speed: " + _playerSpeed, textPositionX, textPositionY + (textSize*4), textSize, Color.White); + Raylib.DrawText("Pointer: " + _pointerPosition, textPositionX, textPositionY + (textSize*5), textSize, Color.White); } - - // private void GenerateWorld() - // { - // for (int x = 0; x < _worldWidth; x++) - // { - // for (int y = 0; y < _worldHeight; y++) - // { - // _worldGrid.Add(new(x, y), "dirt"); - // } - // } - // } - private void GenerateWorld() { int totalHeight = _worldHeight; - int grassHeight = (int)(totalHeight * 0.05); + int grassHeight = (int)(totalHeight * 0.01); int dirtHeight = (int)(totalHeight * 0.10); int airHeight = (int)(totalHeight * 0.50); int rockHeight = totalHeight - (airHeight + grassHeight + dirtHeight); @@ -178,35 +202,31 @@ public class Game else tileType = "rock"; - _worldGrid.Add(new(x, y), tileType); + SetTile(x, y, tileType); } } - - _worldGrid[new(0,72)] = "air"; } private Vector2 GetGridPositionFromGlobalPosition(int x, int y) { int gridX = x / _tileSize; int gridY = y / _tileSize; - - // Check if the calculated grid position is within the bounds of the world grid + if (gridX >= 0 && gridX < _worldWidth && gridY >= 0 && gridY < _worldHeight) { return new Vector2(gridX, gridY); } - - // Return (0, 0) as a failsafe if outside the world grid + return new Vector2(0, 0); } - private void SetTile(Vector2 position, string tileType) + private void SetTile(int x, int y, string tileType) { - _worldGrid[position] = tileType; + _worldGrid[(x,y)] = tileType; } private Vector2 GetGlobalPositionFromGrid(int x, int y) { - return new Vector2(x * _tileSize, y * _tileSize); + return new(x * _tileSize, y * _tileSize); } } \ No newline at end of file diff --git a/Tiles/Tile.cs b/Tiles/Tile.cs index f4c2f52..c8ee61f 100644 --- a/Tiles/Tile.cs +++ b/Tiles/Tile.cs @@ -7,9 +7,18 @@ public class Tile public string Name { get; private set; } = string.Empty; public Image Image { get; private set; } public Texture2D Texture { get; private set; } - public bool Transparent { get; private set; } + // public static Tile GenerateTileFromJson() + // { + // + // } + // + // public static void GenerateTileJson() + // { + // + // } + public Tile(string name, string pathToImage, bool transparent = false) { Name = name; diff --git a/Tiles/bin/Debug/net8.0/Tiles.dll b/Tiles/bin/Debug/net8.0/Tiles.dll index e81e2e2..4cbeb67 100644 Binary files a/Tiles/bin/Debug/net8.0/Tiles.dll and b/Tiles/bin/Debug/net8.0/Tiles.dll differ diff --git a/Tiles/bin/Debug/net8.0/Tiles.pdb b/Tiles/bin/Debug/net8.0/Tiles.pdb index 7979f56..c5d764c 100644 Binary files a/Tiles/bin/Debug/net8.0/Tiles.pdb and b/Tiles/bin/Debug/net8.0/Tiles.pdb differ diff --git a/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfo.cs b/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfo.cs index 28b7a6c..bcf3764 100644 --- a/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfo.cs +++ b/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Tiles")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+75228367d0d87d3758b20be7fd09e3038af1f1c7")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6684d62ffbd0721e0f81217b6e1b3cb98446390d")] [assembly: System.Reflection.AssemblyProductAttribute("Tiles")] [assembly: System.Reflection.AssemblyTitleAttribute("Tiles")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfoInputs.cache b/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfoInputs.cache index f4205c3..58259a2 100644 --- a/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfoInputs.cache +++ b/Tiles/obj/Debug/net8.0/Tiles.AssemblyInfoInputs.cache @@ -1 +1 @@ -cae709149bdcf00c3bc3e20eb638da90c936807ebc10f2db91589fe9edf764da +b89132a91ec091559cc8bb94b85559caa7664e4ff5e5cd825e0f6a40705633fb diff --git a/Tiles/obj/Debug/net8.0/Tiles.dll b/Tiles/obj/Debug/net8.0/Tiles.dll index e81e2e2..4cbeb67 100644 Binary files a/Tiles/obj/Debug/net8.0/Tiles.dll and b/Tiles/obj/Debug/net8.0/Tiles.dll differ diff --git a/Tiles/obj/Debug/net8.0/Tiles.pdb b/Tiles/obj/Debug/net8.0/Tiles.pdb index 7979f56..c5d764c 100644 Binary files a/Tiles/obj/Debug/net8.0/Tiles.pdb and b/Tiles/obj/Debug/net8.0/Tiles.pdb differ diff --git a/Tiles/obj/Debug/net8.0/ref/Tiles.dll b/Tiles/obj/Debug/net8.0/ref/Tiles.dll index a073dd2..9e87990 100644 Binary files a/Tiles/obj/Debug/net8.0/ref/Tiles.dll and b/Tiles/obj/Debug/net8.0/ref/Tiles.dll differ diff --git a/Tiles/obj/Debug/net8.0/refint/Tiles.dll b/Tiles/obj/Debug/net8.0/refint/Tiles.dll index a073dd2..9e87990 100644 Binary files a/Tiles/obj/Debug/net8.0/refint/Tiles.dll and b/Tiles/obj/Debug/net8.0/refint/Tiles.dll differ