summaryrefslogtreecommitdiff
path: root/engine/Components/World.go
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Components/World.go')
-rw-r--r--engine/Components/World.go33
1 files changed, 31 insertions, 2 deletions
diff --git a/engine/Components/World.go b/engine/Components/World.go
index 3f7a0d4..0c322ba 100644
--- a/engine/Components/World.go
+++ b/engine/Components/World.go
@@ -16,6 +16,8 @@ type World struct {
Camera *rl.Camera2D
+ layersStatic layering
+
// ========== Cache ==========
// the collection of the colliders that belong to static objects - world, buildings, etc
@@ -25,6 +27,8 @@ type World struct {
func (base *World) Create(manager coreobjects.SceneManager) {
base.Manager = manager
base.Player.Init(manager)
+ base.layersStatic = layering{}
+ base.generateStaticLayers()
}
func (base *World) Destroy() {
@@ -64,10 +68,35 @@ func (base *World) Draw() {
for _, v := range base.Floor {
v.Draw()
}
+
+ var playerDrawn = false
+ var layer = base.layersStatic.firstLayer
+ var i = 0
+ for {
+ if layer == nil {
+ break
+ }
+ if !playerDrawn && base.Player.Position.Y < layer.Index {
+ playerDrawn = true
+ // fmt.Printf("Player drawn at layer %d\n", i)
+ base.Player.Draw()
+ }
+ for _, v := range layer.Objects {
+ v.Draw()
+ }
+ layer = layer.Next()
+ i++
+ }
+ // Ensure that the player was drawn
+ if !playerDrawn {
+ base.Player.Draw()
+ }
+}
+
+func (base *World) generateStaticLayers() {
for _, v := range base.StaticObjects {
- v.Draw()
+ base.layersStatic.Insert(v)
}
- base.Player.Draw()
}
// The single texture drawn at level 0 of the world