diff options
| -rw-r--r-- | engine/Components/Player.go | 2 | ||||
| -rw-r--r-- | engine/Components/World.go | 5 | ||||
| -rw-r--r-- | engine/CoreObjects/Collider.go | 13 | ||||
| -rw-r--r-- | engine/CoreObjects/OverlayScene.go | 3 | ||||
| -rw-r--r-- | packages/TestPackage/Worlds/Main.json | 4 |
5 files changed, 17 insertions, 10 deletions
diff --git a/engine/Components/Player.go b/engine/Components/Player.go index 0b01184..9c11b80 100644 --- a/engine/Components/Player.go +++ b/engine/Components/Player.go @@ -49,7 +49,7 @@ func (base *Player) Destroy() { func (base *Player) Move(delta rl.Vector2) { var newLocation = rl.Vector2Add(base.Position, delta) if !base.Collider.CanMove(base.ParentScene.GetStaticColliders(), - newLocation.X, newLocation.Y) { + delta.X, delta.Y) { return } base.Collider.MoveTo(newLocation.X, newLocation.Y) diff --git a/engine/Components/World.go b/engine/Components/World.go index 397cbb7..3f7a0d4 100644 --- a/engine/Components/World.go +++ b/engine/Components/World.go @@ -44,6 +44,11 @@ func (base *World) handleZoom() { func (base *World) collectStaticColliders() { base.staticColliders = make([]*coreobjects.Collider, 0) + for _, obj := range base.StaticObjects { + for _, v := range obj.GetColliders() { + base.staticColliders = append(base.staticColliders, &v) + } + } } func (base *World) GetStaticColliders() []*coreobjects.Collider { diff --git a/engine/CoreObjects/Collider.go b/engine/CoreObjects/Collider.go index 6603058..8e9f472 100644 --- a/engine/CoreObjects/Collider.go +++ b/engine/CoreObjects/Collider.go @@ -3,6 +3,7 @@ package coreobjects import ( "image/color" + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" rl "github.com/gen2brain/raylib-go/raylib" ) @@ -35,13 +36,7 @@ func (base *BoxCollider) Init(x float32, y float32, height float32, width float3 } func (base *BoxCollider) Intersects(x float32, y float32) bool { - if base.Location.X < x || base.Location.Y < y { - return false - } - if base.Location.X + base.Location.Width > x || base.Location.Y + base.Location.Height > y { - return false - } - return true + return rl.CheckCollisionPointRec(rl.Vector2 { X: x, Y: y }, base.Location) } func (base *BoxCollider) Move(dx float32, dy float32) { @@ -61,6 +56,9 @@ func (base *BoxCollider) MoveIfPossible(colliders []*Collider, dx float32, dy fl } func (base *BoxCollider) Draw() { + if !settings.State.DrawColliders { + return + } rl.DrawRectangle(base.Location.ToInt32().X, base.Location.ToInt32().Y, base.Location.ToInt32().Width, @@ -73,6 +71,7 @@ func (base *BoxCollider) CanMove(colliders []*Collider, dx float32, dy float32) var y = base.Location.Y + dy var width = base.Location.Width var height = base.Location.Height + // TODO: optimise for _, v := range colliders { if (*v).Intersects(x, y) || diff --git a/engine/CoreObjects/OverlayScene.go b/engine/CoreObjects/OverlayScene.go index 5c43e11..a15fd17 100644 --- a/engine/CoreObjects/OverlayScene.go +++ b/engine/CoreObjects/OverlayScene.go @@ -19,6 +19,9 @@ func (base *OveralyScene) Destroy() { func (base *OveralyScene) Update() { base.FPS.Update() + if rl.IsKeyPressed(rl.KeyF7) { + settings.State.DrawColliders = !settings.State.DrawColliders + } } func (base *OveralyScene) Draw() { diff --git a/packages/TestPackage/Worlds/Main.json b/packages/TestPackage/Worlds/Main.json index b287ef1..8e264a1 100644 --- a/packages/TestPackage/Worlds/Main.json +++ b/packages/TestPackage/Worlds/Main.json @@ -1,6 +1,6 @@ { "Name": "MainWorld", - "DefaultStartingPosition": { "X": 64, "Y": 64 }, + "DefaultStartingPosition": { "X": 0, "Y": 0 }, "FloorMap": [ { "Position": { "X": 0, "Y": 0 }, @@ -10,7 +10,7 @@ "StaticObjects": [ { "Object": "testPackage/barn", - "Position": { "X": 256, "Y": 128 } + "Position": { "X": 0, "Y": 0 } } ] } |
