From 944f0ff7120bfeee9a1df3b422ec9e513f26076a Mon Sep 17 00:00:00 2001 From: Solargale Date: Thu, 25 Jun 2020 00:45:34 -0600 Subject: [PATCH] Made lucas the Main character and also added collision --- Collector/Content/man.png | Bin 1626 -> 7085 bytes Collector/Main.cs | 19 ++- Collector/Restrictions.cs | 7 +- Collector/src/Character/Collision.cs | 17 +++ Collector/src/Character/InputController.cs | 137 +++++++++--------- .../src/{Dimension => Character}/Inventory.cs | 0 Collector/src/Character/Player.cs | 35 +++-- Collector/src/Dimension/Autotiling.cs | 7 + Collector/src/Dimension/Chunks.cs | 43 ++++-- Collector/src/Dimension/Collision.cs | 18 --- Collector/src/Dimension/World.cs | 12 +- Collector/src/Dimension/WorldRenderer.cs | 8 +- 12 files changed, 167 insertions(+), 136 deletions(-) create mode 100644 Collector/src/Character/Collision.cs rename Collector/src/{Dimension => Character}/Inventory.cs (100%) create mode 100644 Collector/src/Dimension/Autotiling.cs delete mode 100644 Collector/src/Dimension/Collision.cs diff --git a/Collector/Content/man.png b/Collector/Content/man.png index aa2beb9f6e9c326b2a8d806264060f4ffb224ea3..c4364811e48d9a76cb85f513c4d9b3b762f783cc 100644 GIT binary patch literal 7085 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 literal 1626 zcmdUvYgZFj6ow}ft`!1O5D^GyUA3ZupjNp@!9b-_EEShP1BfCZMpmpK6(#~o#VF8v zsUQR!7GkXgM8H%bRD=XAM4%WEg+MR^Bqow@Ny22N6R=;}U(oYm*531;ea@QwytB`L zwTEnOW^V=nfO$x8;9da0VIe>_F~Xi>4NZChN83x@0n~ImOaOq<$032Fh>RQW-t?TT zTxS{3Gh3rUDcxCbRqf zN7^Z#b_=jp@@wRFgti$t5)XPDhIyjGDdA?|mX1L(6ot)F2WQ(FQV02RH_#aD3#|A& z%!M40i`~Mf_*#uirBdO(#5slUg;s%pILl?A_oy!WW75GwVKxQflUkYEdpeM*lTakz5O(BaU83h%PaK*FG$vYMokJ z8ama^24D?%&Q5(0zDdM$l3n@!JVe8rFSVyW{~%p(^IZMa z!%re2uov6Fes_^~k4yE&HfQYSI;13@KA6Vi-Vbye#OqnfxbS4F0TdtBR6M!yo#dBT)QU`U(a^sC#$QjPZl}uZY2K01PJiEYrVX?V)W%7VybRP@5A45{QV}ypcA@cAZ@BiGXv1i_5i>~EF554 zbsMJ^XS3!r)`A7-32v?&)Of2)CAil~StqiQE4qFaAaC^Z@<*Q{B^Rlj#i-Yu`fxFt z%%`VE5zCn1A#PkiY+S)|BaT!%4#TeV7rqD5V-^&!zc)5L`a`I1E zaw>-AwC@g=t{2I>;#7iQB!`^Ngb(nj{B zRH`T)T}0Wxy?l(b%L|=8hU`JAuAMRS3w~~cv9|+fq^-FxNMhz+;I5O=a4J%zz{#RY z83d2_kT&s$GyWY!Eve{EV-8G{F~LWu`0XE_1&^6hri&3)Oe2WYr$$M4SV~CKlscGw zM!C1}|fhE`fI8`k@j4c6D$YecZfdk^h}B1f0Ohi;-!k l_Z`&aZc^+1zjSiwQ`EhQe=EKInUx+*NYI|ZnjNt@e*+y;VpsqG diff --git a/Collector/Main.cs b/Collector/Main.cs index 0a3047d..21445c5 100644 --- a/Collector/Main.cs +++ b/Collector/Main.cs @@ -19,8 +19,8 @@ namespace Collector private Player _player; private PlayerMouse _playerMouse; private static OrthographicCamera _cam; - public static int VirtualWidth; - public static int VirtualHeight; + private static int _virtualWidth; + private static int _virtualHeight; private WorldRenderer WorldRenderer { get; set; } public static Dictionary Materials { get; } = new Dictionary(); @@ -29,8 +29,10 @@ namespace Collector { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; + IsMouseVisible = true; IsFixedTimeStep = true; + _graphics.PreferMultiSampling = true; } protected override void Initialize() @@ -43,18 +45,18 @@ namespace Collector Materials.Add(name,Content.Load(name.ToString())); } - VirtualWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width; - VirtualHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height; + _virtualWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width; + _virtualHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height; - var viewportAdapter = new BoxingViewportAdapter(Window, GraphicsDevice, VirtualWidth, VirtualHeight); + var viewportAdapter = new BoxingViewportAdapter(Window, GraphicsDevice, _virtualWidth, _virtualHeight); _player = new Player(0, 0); _cam = new OrthographicCamera(viewportAdapter); - _cam.LookAt(new Vector2(Player.X+IRestrictions.TileSize/2, Player.Y+IRestrictions.TileSize/2)); + _cam.LookAt(new Vector2(Player.X, Player.Y)); _cam.Zoom = IRestrictions.Zoom; _spriteBatch = new SpriteBatch(GraphicsDevice); _playerMouse = new PlayerMouse(Content, _spriteBatch, _cam); - _inputController = new InputController(_playerMouse, _cam, _spriteBatch, Content); + _inputController = new InputController(_cam, _spriteBatch, Content); WorldRenderer = new WorldRenderer(_playerMouse, _inputController, _spriteBatch, this); } @@ -71,7 +73,8 @@ namespace Collector var transformMatrix = _cam.GetViewMatrix(); base.Draw(gameTime); GraphicsDevice.Clear(Color.CornflowerBlue); - _spriteBatch.Begin(transformMatrix: transformMatrix); + //Turn on Anti-aliasing by changing SamplerState.PointClamp + _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullNone, transformMatrix: transformMatrix); _playerMouse.Draw(); WorldRenderer.Draw(gameTime); _spriteBatch.End(); diff --git a/Collector/Restrictions.cs b/Collector/Restrictions.cs index 5ab03bb..58200d7 100644 --- a/Collector/Restrictions.cs +++ b/Collector/Restrictions.cs @@ -8,18 +8,19 @@ namespace Collector { public interface IRestrictions { - public const int Seed = 1; + public const int Seed = 3; public const int TileSize = 1; public const float ViewportHeight = 9f; public const float ViewportWidth = 16f; - public const int MovementSpeed = 1; + public const float MovementSpeed = 4/32f; public const int KeyDelay = 20; public const int ChunkSize = 8; public const int SuperChunkSize = 1; public const int ChunkShift = 3; public const int RenderDistance = 5; public const float RenderTime = 1/60f; - public const float Zoom = 30; + public const float Zoom = 69; public const float Scale = ViewportWidth/ViewportHeight; + public const float AnimationDuration = 0.3f; } } \ No newline at end of file diff --git a/Collector/src/Character/Collision.cs b/Collector/src/Character/Collision.cs new file mode 100644 index 0000000..c97e75c --- /dev/null +++ b/Collector/src/Character/Collision.cs @@ -0,0 +1,17 @@ + +using Humper.Base; + +namespace Collector.Character +{ + public class Collision + { + private readonly int _tileWidth; + public RectangleF Rectangle { get; private set; } + + public Collision(int x, int y,int tileWidth) + { + _tileWidth = tileWidth; + Rectangle = new RectangleF(x,y,tileWidth,tileWidth); + } + } +} \ No newline at end of file diff --git a/Collector/src/Character/InputController.cs b/Collector/src/Character/InputController.cs index da745d4..dbdd9d6 100644 --- a/Collector/src/Character/InputController.cs +++ b/Collector/src/Character/InputController.cs @@ -10,20 +10,18 @@ namespace Collector.Character { public class InputController : IRestrictions { - private readonly PlayerMouse _playerMouse; private readonly OrthographicCamera _cam; private readonly Dictionary _animations; private readonly Texture2D _texture; private readonly SpriteBatch _spriteBatch; private string Input { get; set; } private int _frameNumber; - private int _timeSinceLastFrame; + private float _timeSinceLastFrame; - public InputController(PlayerMouse playerMouse, OrthographicCamera cam, SpriteBatch spriteBatch, ContentManager contentManager) + public InputController(OrthographicCamera cam, SpriteBatch spriteBatch, ContentManager contentManager) { Input = "Down"; - _playerMouse = playerMouse; _cam = cam; _spriteBatch = spriteBatch; _frameNumber = 0; @@ -31,128 +29,128 @@ namespace Collector.Character const int tileSize = 32; _animations = new Dictionary { + ["Idle"] = new[] + { + new Rectangle((0 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((0 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((0 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((0 + 4)*tileSize, 0, tileSize, tileSize*2), + }, ["Up"] = new[] { - new Rectangle(0, 0, tileSize, tileSize), - new Rectangle(1, 0, tileSize, tileSize), - new Rectangle(2, 0, tileSize, tileSize), - new Rectangle(3, 0, tileSize, tileSize) + new Rectangle(0*tileSize, 0, tileSize, tileSize*2), + new Rectangle(1*tileSize, 0, tileSize, tileSize*2), + new Rectangle(2*tileSize, 0, tileSize, tileSize*2), + new Rectangle(3*tileSize, 0, tileSize, tileSize*2) }, ["Right"] = new[] { - new Rectangle(0 + 4, 1, tileSize, tileSize), - new Rectangle(1 + 4, 1, tileSize, tileSize), - new Rectangle(2 + 4, 1, tileSize, tileSize), - new Rectangle(3 + 4, 1, tileSize, tileSize) + new Rectangle((0 + 4)*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle((1 + 4)*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle((2 + 4)*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle((3 + 4)*tileSize, 2*tileSize, tileSize, tileSize*2) }, ["UpRight"] = new[] { - new Rectangle(0 + 4, 2, tileSize, tileSize), - new Rectangle(1 + 4, 2, tileSize, tileSize), - new Rectangle(2 + 4, 2, tileSize, tileSize), - new Rectangle(3 + 4, 2, tileSize, tileSize) + new Rectangle((0 + 4)*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle((1 + 4)*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle((2 + 4)*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle((3 + 4)*tileSize, 4*tileSize, tileSize, tileSize*2) }, ["DownRight"] = new[] { - new Rectangle(0 + 4, 3, tileSize, tileSize), - new Rectangle(1 + 4, 3, tileSize, tileSize), - new Rectangle(2 + 4, 3, tileSize, tileSize), - new Rectangle(3 + 4, 3, tileSize, tileSize) + new Rectangle((0 + 4)*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle((1 + 4)*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle((2 + 4)*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle((3 + 4)*tileSize, 6*tileSize, tileSize, tileSize*2) }, ["Left"] = new[] { - new Rectangle(0, 1, tileSize, tileSize), - new Rectangle(1, 1, tileSize, tileSize), - new Rectangle(2, 1, tileSize, tileSize), - new Rectangle(3, 1, tileSize, tileSize) + new Rectangle(0*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle(1*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle(2*tileSize, 2*tileSize, tileSize, tileSize*2), + new Rectangle(3*tileSize, 2*tileSize, tileSize, tileSize*2) }, ["UpLeft"] = new[] { - new Rectangle(0, 2, tileSize, tileSize), - new Rectangle(1, 2, tileSize, tileSize), - new Rectangle(2, 2, tileSize, tileSize), - new Rectangle(3, 2, tileSize, tileSize) + new Rectangle(0*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle(1*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle(2*tileSize, 4*tileSize, tileSize, tileSize*2), + new Rectangle(3*tileSize, 4*tileSize, tileSize, tileSize*2) }, ["DownLeft"] = new[] { - new Rectangle(0, 1, tileSize, tileSize), - new Rectangle(1, 1, tileSize, tileSize), - new Rectangle(2, 1, tileSize, tileSize), - new Rectangle(3, 1, tileSize, tileSize) + new Rectangle(0*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle(1*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle(2*tileSize, 6*tileSize, tileSize, tileSize*2), + new Rectangle(3*tileSize, 6*tileSize, tileSize, tileSize*2) }, ["Down"] = new[] { - new Rectangle(0 + 4, 0, tileSize, tileSize), - new Rectangle(1 + 4, 0, tileSize, tileSize), - new Rectangle(2 + 4, 0, tileSize, tileSize), - new Rectangle(3 + 4, 0, tileSize, tileSize) + new Rectangle((0 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((1 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((2 + 4)*tileSize, 0, tileSize, tileSize*2), + new Rectangle((3 + 4)*tileSize, 0, tileSize, tileSize*2) }, }; } - public void PlayerInput(Main main, PlayerMouse playerMouse, GameTime gameTime) + public void PlayerInput(Main main, GameTime gameTime) { - const int movementSpeed = IRestrictions.MovementSpeed; + const float movementSpeed = IRestrictions.MovementSpeed; var keyboardState = Keyboard.GetState(); var mouseState = Mouse.GetState(); if (keyboardState.IsKeyDown(Keys.Escape)) { Quit(main); } - if (keyboardState.IsKeyUp(Keys.W) && keyboardState.IsKeyUp(Keys.A) && keyboardState.IsKeyUp(Keys.S) && keyboardState.IsKeyUp(Keys.D)) - { - Input = Input.Contains("Right") ? "DownRight" : "DownLeft"; - _frameNumber = 0; - _playerMouse.Draw(); + if (keyboardState.IsKeyUp(Keys.W) && keyboardState.IsKeyUp(Keys.A) && keyboardState.IsKeyUp(Keys.S) && + keyboardState.IsKeyUp(Keys.D)) + { + Input = "Idle"; } + UpdateAnimationFrame(gameTime); + const float diagonalMovement = 0.707f; if (keyboardState.IsKeyDown(Keys.W) && keyboardState.IsKeyDown(Keys.D)) { - UpdateAnimationFrame(gameTime); Input = "UpRight"; - Player.Move(_cam,movementSpeed,-movementSpeed); + Player.Move(_cam,movementSpeed*diagonalMovement,-movementSpeed*diagonalMovement); } else if (keyboardState.IsKeyDown(Keys.W) && keyboardState.IsKeyDown(Keys.A)) { - UpdateAnimationFrame(gameTime); + Player.Move(_cam,-movementSpeed*diagonalMovement,-movementSpeed*diagonalMovement); Input = "UpLeft"; - Player.Move(_cam,-movementSpeed,-movementSpeed); } else if (keyboardState.IsKeyDown(Keys.S) && keyboardState.IsKeyDown(Keys.D)) { - UpdateAnimationFrame(gameTime); Input = "DownRight"; - Player.Move(_cam,movementSpeed,movementSpeed); + Player.Move(_cam,movementSpeed*diagonalMovement,movementSpeed*diagonalMovement); } else if (keyboardState.IsKeyDown(Keys.S) && keyboardState.IsKeyDown(Keys.A)) { - UpdateAnimationFrame(gameTime); Input = "DownLeft"; - Player.Move(_cam,-movementSpeed,movementSpeed); + Player.Move(_cam,-movementSpeed*diagonalMovement,movementSpeed*diagonalMovement); } else if (keyboardState.IsKeyDown(Keys.W)) { - UpdateAnimationFrame(gameTime); Input = "Up"; Player.Move(_cam,0,-movementSpeed); } else if (keyboardState.IsKeyDown(Keys.A)) { - UpdateAnimationFrame(gameTime); - Player.Move(_cam,-movementSpeed,0); Input = "Left"; + Player.Move(_cam,-movementSpeed,0); } else if (keyboardState.IsKeyDown(Keys.S)) { - UpdateAnimationFrame(gameTime); - Player.Move(_cam,0,movementSpeed); Input = "Down"; + Player.Move(_cam,0,movementSpeed); } else if (keyboardState.IsKeyDown(Keys.D)) { - UpdateAnimationFrame(gameTime); - Player.Move(_cam,movementSpeed,0); Input = "Right"; + Player.Move(_cam,movementSpeed,0); } if (keyboardState.IsKeyDown(Keys.Q)) { @@ -162,7 +160,6 @@ namespace Collector.Character { _cam.ZoomOut(1f); } - if (mouseState.LeftButton == ButtonState.Pressed) { Chunks.RemoveBlock(PlayerMouse.GetSelectedX(),PlayerMouse.GetSelectedY()); @@ -175,14 +172,11 @@ namespace Collector.Character private void UpdateAnimationFrame(GameTime gameTime) { - _timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; - if (_timeSinceLastFrame <= 99) return; + _timeSinceLastFrame += gameTime.GetElapsedSeconds(); + if (_timeSinceLastFrame <= IRestrictions.AnimationDuration) return; _frameNumber++; _timeSinceLastFrame = 0; - if (_frameNumber > 3) - { - _frameNumber = 0; - } + if (_frameNumber > 3) _frameNumber = 0; } private static void Quit(Game main) @@ -193,11 +187,14 @@ namespace Collector.Character public void Draw() { _spriteBatch.Draw( - _texture - ,Player.PlayerBounds - ,_animations[Input][_frameNumber] - ,Color.White - ); + _texture, + new Vector2(Player.X,Player.Y), + _animations[Input][_frameNumber], + Color.White, 0f, + Vector2.One, + 1/32f, + SpriteEffects.None, + 1f); } } } \ No newline at end of file diff --git a/Collector/src/Dimension/Inventory.cs b/Collector/src/Character/Inventory.cs similarity index 100% rename from Collector/src/Dimension/Inventory.cs rename to Collector/src/Character/Inventory.cs diff --git a/Collector/src/Character/Player.cs b/Collector/src/Character/Player.cs index 84ad348..e768c68 100644 --- a/Collector/src/Character/Player.cs +++ b/Collector/src/Character/Player.cs @@ -1,35 +1,44 @@ using System; -using System.Collections.Generic; +using System.Linq; using Collector.Dimension; -using Humper; using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Media; +using Microsoft.Xna.Framework.Graphics; using MonoGame.Extended; -using MonoGame.Extended.Collections; -using Collision = Collector.Dimension.Collision; +using RectangleF = Humper.Base.RectangleF; +using Vector2 = Microsoft.Xna.Framework.Vector2; + namespace Collector.Character { public class Player : IRestrictions { - public static int X { get; private set; } - public static int Y { get; private set; } - private static Dictionary Animation { get; set; } - public static Rectangle PlayerBounds; + public static float X { get; private set; } + public static float Y { get; private set; } + + public static RectangleF PlayerBounds; public Player(int x, int y) { - PlayerBounds = new Rectangle(X,Y,IRestrictions.TileSize,IRestrictions.TileSize); X = x; Y = y; + PlayerBounds = new RectangleF(x,y, IRestrictions.TileSize*0.5f, IRestrictions.TileSize*0.35f); } - public static void Move(OrthographicCamera cam, int x, int y) + public static void Move(OrthographicCamera cam, float x, float y) { X += x; Y += y; - cam.Move(new Vector2(x+IRestrictions.TileSize/2, y+IRestrictions.TileSize/2)); - PlayerBounds.Location = new Point(X,Y); + PlayerBounds.X = X+0.2f; + PlayerBounds.Y = Y+1.5f; + + cam.Move(new Vector2(x, y)); + if (!Chunks.loadedCollisions.Values.Any(collisionsValue => collisionsValue.Rectangle.Intersects(PlayerBounds))) return; + + X -= x; + Y -= y; + cam.Move(new Vector2(-x, -y)); + PlayerBounds.X -= X; + PlayerBounds.Y -= Y; } } } \ No newline at end of file diff --git a/Collector/src/Dimension/Autotiling.cs b/Collector/src/Dimension/Autotiling.cs new file mode 100644 index 0000000..36b729a --- /dev/null +++ b/Collector/src/Dimension/Autotiling.cs @@ -0,0 +1,7 @@ +namespace Collector.Character +{ + public class Autotiling + { + + } +} \ No newline at end of file diff --git a/Collector/src/Dimension/Chunks.cs b/Collector/src/Dimension/Chunks.cs index dcfdbbd..6b46f42 100644 --- a/Collector/src/Dimension/Chunks.cs +++ b/Collector/src/Dimension/Chunks.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using Collector.ThirdPartyCode; using Humper; using Microsoft.Xna.Framework; +using MonoGame.Extended; +using Collision = Collector.Character.Collision; namespace Collector.Dimension { @@ -13,7 +15,8 @@ namespace Collector.Dimension public static Dictionary, Blocks> LoadedChunks { get; } = new Dictionary, Blocks>(); private static readonly Dictionary, Blocks> SavedChunks = new Dictionary, Blocks>(); private static readonly Dictionary, Collision> savedCollisions = new Dictionary, Collision>(); - public static readonly Dictionary, Collision> loadedCollisions = new Dictionary, Collision>(); + public static readonly Dictionary, Collision> loadedCollisions = new Dictionary, Collision>(); + public static readonly List Impassable = new List(); private static readonly OpenSimplexNoise Gen1 = new OpenSimplexNoise(IRestrictions.Seed+ 1); @@ -32,8 +35,8 @@ namespace Collector.Dimension var tuple = new Tuple(x, y, z); var pair = new Tuple(x, y); - loadedCollisions[pair] = new Collision(x,y,IRestrictions.TileSize,false); - savedCollisions[pair] = new Collision(x,y,IRestrictions.TileSize,false); + loadedCollisions[pair] = new Collision(x,y,IRestrictions.TileSize); + savedCollisions[pair] = new Collision(x,y,IRestrictions.TileSize); LoadedChunks[tuple] = name; SavedChunks[tuple] = name; } @@ -55,16 +58,16 @@ namespace Collector.Dimension if (!LoadedChunks.ContainsKey(tuple)) return; if (LoadedChunks[tuple].Equals(Blocks.BlockAir)) return; - loadedCollisions[pair] = null; - savedCollisions[pair] = null; + loadedCollisions.Remove(pair); + savedCollisions.Remove(pair); LoadedChunks[tuple] = Blocks.BlockAir; SavedChunks[tuple] = Blocks.BlockAir; } - public static void UngenerateChunk(int x, int y) { - var startX = x << IRestrictions.ChunkShift; - var startY = y << IRestrictions.ChunkShift; + public static void UngenerateChunk(float x, float y) { + var startX = (int)x << IRestrictions.ChunkShift; + var startY = (int)y << IRestrictions.ChunkShift; var endX = startX + IRestrictions.ChunkSize; var endY = startY + IRestrictions.ChunkSize; @@ -83,9 +86,9 @@ namespace Collector.Dimension } } - public static void GenerateChunk(int x, int y) { - var startX = x << IRestrictions.ChunkShift; - var startY = y << IRestrictions.ChunkShift; + public static void GenerateChunk(float x, float y) { + var startX = (int)x << IRestrictions.ChunkShift; + var startY = (int)y << IRestrictions.ChunkShift; var endX = startX + IRestrictions.ChunkSize; var endY = startY + IRestrictions.ChunkSize; @@ -97,8 +100,16 @@ namespace Collector.Dimension LoadedChunks.Add(triple,SavedChunks[triple]); } else { - LoadedChunks.Add(triple, GetTerrain(i, j)); - SavedChunks.Add(triple, GetTerrain(i,j)); + var terrain = GetTerrain(i, j); + var pair = new Tuple(i, j); + if (Impassable.Contains(terrain)) + { + loadedCollisions[pair] = new Collision(i,j,IRestrictions.TileSize); + savedCollisions[pair] = new Collision(i,j,IRestrictions.TileSize); + } + + LoadedChunks.Add(triple, terrain); + SavedChunks.Add(triple, terrain); } } } @@ -147,7 +158,7 @@ namespace Collector.Dimension return GetBiomeBlock(moisture, elevation); } - + private static Blocks GetBiomeBlock(double moisture, double elevation) { var biome = GetBiome(moisture, elevation); if (biome.Equals("Tundra")) return Blocks.BlockSnow; @@ -196,8 +207,8 @@ namespace Collector.Dimension return moisture < 0.66 ? "TropicalSeasonalForest" : "TropicalRainForest"; } - public static bool IsEmpty(int x, int y){ - return !LoadedChunks.ContainsKey(new Tuple(x * 8, y * 8,0)); + public static bool IsEmpty(float x, float y){ + return !LoadedChunks.ContainsKey(new Tuple((int)x * 8, (int)y * 8,0)); } } } diff --git a/Collector/src/Dimension/Collision.cs b/Collector/src/Dimension/Collision.cs deleted file mode 100644 index feed5b7..0000000 --- a/Collector/src/Dimension/Collision.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.Xna.Framework; - -namespace Collector.Dimension -{ - public class Collision - { - private readonly int _tileWidth; - private bool _entity; - public Rectangle Rectangle { get; private set; } - - public Collision(int x, int y,int tileWidth, bool entity) - { - _entity = entity; - _tileWidth = tileWidth; - Rectangle = new Rectangle(x,y,tileWidth,tileWidth); - } - } -} \ No newline at end of file diff --git a/Collector/src/Dimension/World.cs b/Collector/src/Dimension/World.cs index 7934a7d..865315a 100644 --- a/Collector/src/Dimension/World.cs +++ b/Collector/src/Dimension/World.cs @@ -4,14 +4,14 @@ using Collector.Character; namespace Collector.Dimension { public static class World { - private static void GenerateWorld(int x, int y) + private static void GenerateWorld(float x, float y) { if (Chunks.IsEmpty(x, y)) { Chunks.GenerateChunk(x, y); } } - private static void UngenerateWorld(int x, int y) { + private static void UngenerateWorld(float x, float y) { if (!Chunks.IsEmpty(x, y)) { Chunks.UngenerateChunk(x, y); } @@ -34,22 +34,22 @@ namespace Collector.Dimension //Down UngenerateWorld( Player.X / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i, - (Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+IRestrictions.RenderDistance + Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+IRestrictions.RenderDistance ); //Up UngenerateWorld( Player.X / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i, - (Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))-IRestrictions.RenderDistance + Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)-IRestrictions.RenderDistance ); //Right UngenerateWorld( Player.X / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)-IRestrictions.RenderDistance, - (Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+i + Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i ); //Left UngenerateWorld( Player.X / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+IRestrictions.RenderDistance, - (Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+i + Player.Y / (IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i ); } } diff --git a/Collector/src/Dimension/WorldRenderer.cs b/Collector/src/Dimension/WorldRenderer.cs index 8a65fa7..184d5f4 100644 --- a/Collector/src/Dimension/WorldRenderer.cs +++ b/Collector/src/Dimension/WorldRenderer.cs @@ -18,6 +18,9 @@ namespace Collector.Dimension _inputController = inputController; _spriteBatch = spriteBatch; _main = main; + Chunks.Impassable.Add(Blocks.BlockWater); + Chunks.Impassable.Add(Blocks.BlockRoof); + Chunks.Impassable.Add(Blocks.BlockWall); } private static void DrawWorld(SpriteBatch batch, int layer) @@ -40,10 +43,11 @@ namespace Collector.Dimension { //Higher means draws in a lower layer DrawWorld(_spriteBatch,0); + _playerMouse.Draw(); DrawWorld(_spriteBatch,1); _inputController.Draw(); - _inputController.PlayerInput(_main,_playerMouse,gameTime); - DrawWorld(_spriteBatch,2); + _inputController.PlayerInput(_main,gameTime); + //DrawWorld(_spriteBatch,2); } } } \ No newline at end of file