From b6f39d8f1293694cba7ce8666d9f4ae64b7b1820 Mon Sep 17 00:00:00 2001 From: Solargale Date: Thu, 25 Jun 2020 07:37:58 -0600 Subject: [PATCH] Fixed Movement, now slide along walls instead of stopping immediately. Also fixed error where chunks don't load their collision --- Collector/src/Character/Collision.cs | 6 ++--- Collector/src/Character/Player.cs | 29 ++++++++++++++---------- Collector/src/Dimension/Chunks.cs | 33 ++++++++++++++-------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/Collector/src/Character/Collision.cs b/Collector/src/Character/Collision.cs index c97e75c..fd665b8 100644 --- a/Collector/src/Character/Collision.cs +++ b/Collector/src/Character/Collision.cs @@ -5,13 +5,11 @@ namespace Collector.Character { public class Collision { - private readonly int _tileWidth; public RectangleF Rectangle { get; private set; } - public Collision(int x, int y,int tileWidth) + public Collision(int x, int y) { - _tileWidth = tileWidth; - Rectangle = new RectangleF(x,y,tileWidth,tileWidth); + Rectangle = new RectangleF(x,y,IRestrictions.TileSize,IRestrictions.TileSize); } } } \ No newline at end of file diff --git a/Collector/src/Character/Player.cs b/Collector/src/Character/Player.cs index e768c68..af23f50 100644 --- a/Collector/src/Character/Player.cs +++ b/Collector/src/Character/Player.cs @@ -21,24 +21,31 @@ namespace Collector.Character { X = x; Y = y; - PlayerBounds = new RectangleF(x,y, IRestrictions.TileSize*0.5f, IRestrictions.TileSize*0.35f); + PlayerBounds = new RectangleF(x, y, IRestrictions.TileSize * 0.5f, IRestrictions.TileSize * 0.35f); } public static void Move(OrthographicCamera cam, float x, float y) + { + Teleport(cam, x, 0); + if (Chunks.LoadedCollisions.Values.Any(collisionsValue => collisionsValue.Rectangle.Intersects(PlayerBounds))) + { + Teleport(cam, -x, 0); + } + + Teleport(cam, 0, y); + if (Chunks.LoadedCollisions.Values.Any(collisionsValue => collisionsValue.Rectangle.Intersects(PlayerBounds))) + { + Teleport(cam, 0, -y); + } + } + + private static void Teleport(OrthographicCamera cam, float x, float y) { X += x; Y += y; - PlayerBounds.X = X+0.2f; - PlayerBounds.Y = Y+1.5f; - + 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/Chunks.cs b/Collector/src/Dimension/Chunks.cs index 6b46f42..1a627eb 100644 --- a/Collector/src/Dimension/Chunks.cs +++ b/Collector/src/Dimension/Chunks.cs @@ -14,8 +14,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 Dictionary, Collision> SavedCollisions = new Dictionary, Collision>(); public static readonly List Impassable = new List(); @@ -35,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); - savedCollisions[pair] = new Collision(x,y,IRestrictions.TileSize); + LoadedCollisions[pair] = new Collision(x,y); + SavedCollisions[pair] = new Collision(x,y); LoadedChunks[tuple] = name; SavedChunks[tuple] = name; } @@ -58,8 +58,8 @@ namespace Collector.Dimension if (!LoadedChunks.ContainsKey(tuple)) return; if (LoadedChunks[tuple].Equals(Blocks.BlockAir)) return; - loadedCollisions.Remove(pair); - savedCollisions.Remove(pair); + LoadedCollisions.Remove(pair); + SavedCollisions.Remove(pair); LoadedChunks[tuple] = Blocks.BlockAir; SavedChunks[tuple] = Blocks.BlockAir; @@ -75,13 +75,8 @@ namespace Collector.Dimension for (var i = startX; i != endX; i++) { for (var j = startY; j != endY; j++) { LoadedChunks.Remove(new Tuple(i, j, 0)); - } - } - //Second Layer - for (var i = startX; i != endX; i++){ - for (var j = startY; j != endY; j++) { - var triple = new Tuple(i, j,1); - LoadedChunks.Remove(triple); + LoadedChunks.Remove(new Tuple(i, j,1)); + LoadedCollisions.Remove(new Tuple(i,j)); } } } @@ -96,16 +91,22 @@ namespace Collector.Dimension for (var i = startX; i != endX; i++) { for (var j = startY; j != endY; j++) { var triple = new Tuple(i, j, 0); + var pair = new Tuple(i,j); + if (SavedCollisions.ContainsKey(pair)) + { + LoadedCollisions.Add(pair, SavedCollisions[pair]); + + } if(SavedChunks.ContainsKey(triple)){ LoadedChunks.Add(triple,SavedChunks[triple]); } else { 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); + var collision = new Collision(i,j); + LoadedCollisions[pair] = collision; + SavedCollisions[pair] = collision; } LoadedChunks.Add(triple, terrain);