diff --git a/src/Utils/Point.bf b/src/Numerics/Point.bf similarity index 67% rename from src/Utils/Point.bf rename to src/Numerics/Point.bf index ab26a3d..20279c0 100644 --- a/src/Utils/Point.bf +++ b/src/Numerics/Point.bf @@ -4,12 +4,14 @@ namespace Strawberry { public struct Point { - static public readonly Point Right = Point(1, 0); - static public readonly Point Left = Point(-1, 0); - static public readonly Point Up = Point(0, -1); - static public readonly Point Down = Point(0, 1); - static public readonly Point Zero = Point(0, 0); - static public readonly Point One = Point(1, 1); + static public readonly Point Right = .(1, 0); + static public readonly Point Left = .(-1, 0); + static public readonly Point Up = .(0, -1); + static public readonly Point Down = .(0, 1); + static public readonly Point UnitX = .(1, 0); + static public readonly Point UnitY = .(0, 1); + static public readonly Point Zero = .(0, 0); + static public readonly Point One = .(1, 1); public int X; public int Y; diff --git a/src/Utils/Rect.bf b/src/Numerics/Rect.bf similarity index 100% rename from src/Utils/Rect.bf rename to src/Numerics/Rect.bf diff --git a/src/Utils/Vector.bf b/src/Numerics/Vector.bf similarity index 73% rename from src/Utils/Vector.bf rename to src/Numerics/Vector.bf index e4a5e0e..d71442b 100644 --- a/src/Utils/Vector.bf +++ b/src/Numerics/Vector.bf @@ -4,12 +4,14 @@ namespace Strawberry { public struct Vector { - static public readonly Vector Right = Vector(1, 0); - static public readonly Vector Left = Vector(-1, 0); - static public readonly Vector Up = Vector(0, -1); - static public readonly Vector Down = Vector(0, 1); - static public readonly Vector Zero = Vector(0, 0); - static public readonly Vector One = Vector(1, 1); + static public readonly Vector Right = .(1, 0); + static public readonly Vector Left = .(-1, 0); + static public readonly Vector Up = .(0, -1); + static public readonly Vector Down = .(0, 1); + static public readonly Vector UnitX = .(1, 0); + static public readonly Vector UnitY = .(0, 1); + static public readonly Vector Zero = .(0, 0); + static public readonly Vector One = .(1, 1); public float X; public float Y; diff --git a/src/Physics/JumpThru.bf b/src/Physics/JumpThru.bf index acf7db0..6887b2e 100644 --- a/src/Physics/JumpThru.bf +++ b/src/Physics/JumpThru.bf @@ -9,18 +9,53 @@ namespace Strawberry Hitbox = Rect(0, 0, width, 6); } + public override void Update() + { + base.Update(); + + MoveY(-10 * Time.Delta); + } + public override void MoveExactX(int amount) { - let riders = GetRiders(scope List); - - X += amount; - for (var r in riders) - r.MoveExactX(amount); + if (Collidable) + { + let riders = GetRiders(scope List); + + X += amount; + for (var r in riders) + r.MoveExactX(amount); + } + else + X += amount; } public override void MoveExactY(int amount) { - let riders = GetRiders(scope List); + if (Collidable) + { + let riders = GetRiders(scope List); + + if (amount < 0) + { + for (var a in Scene.All(scope List)) + if (riders.Contains(a) || CheckOutside(a, Point.UnitY * amount)) + a.MoveExactY((Top + amount) - a.Bottom); + Y += amount; + } + else + { + Collidable = false; + + for (var a in riders) + a.MoveExactY(amount); + + Collidable = true; + Y += amount; + } + } + else + Y += amount; } public override List GetRiders(List into)