Fixed Movement, now slide along walls instead of stopping immediately. Also fixed error where chunks don't load their collision
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,8 @@ namespace Collector.Dimension
|
||||
{
|
||||
public static Dictionary<Tuple<int, int, int>, Blocks> LoadedChunks { get; } = new Dictionary<Tuple<int, int, int>, Blocks>();
|
||||
private static readonly Dictionary<Tuple<int, int, int>, Blocks> SavedChunks = new Dictionary<Tuple<int, int, int>, Blocks>();
|
||||
private static readonly Dictionary<Tuple<int, int>, Collision> savedCollisions = new Dictionary<Tuple<int, int>, Collision>();
|
||||
public static readonly Dictionary<Tuple<int, int>, Collision> loadedCollisions = new Dictionary<Tuple<int, int>, Collision>();
|
||||
public static readonly Dictionary<Tuple<int, int>, Collision> LoadedCollisions = new Dictionary<Tuple<int, int>, Collision>();
|
||||
public static readonly Dictionary<Tuple<int, int>, Collision> SavedCollisions = new Dictionary<Tuple<int, int>, Collision>();
|
||||
public static readonly List<Blocks> Impassable = new List<Blocks>();
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@ namespace Collector.Dimension
|
||||
var tuple = new Tuple<int, int, int>(x, y, z);
|
||||
var pair = new Tuple<int, int>(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<int,int,int>(i, j, 0));
|
||||
}
|
||||
}
|
||||
//Second Layer
|
||||
for (var i = startX; i != endX; i++){
|
||||
for (var j = startY; j != endY; j++) {
|
||||
var triple = new Tuple<int, int, int>(i, j,1);
|
||||
LoadedChunks.Remove(triple);
|
||||
LoadedChunks.Remove(new Tuple<int, int, int>(i, j,1));
|
||||
LoadedCollisions.Remove(new Tuple<int, int>(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<int, int, int>(i, j, 0);
|
||||
var pair = new Tuple<int, int>(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<int, int>(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);
|
||||
|
||||
Reference in New Issue
Block a user