diff options
Diffstat (limited to 'engine/Components/World.go')
| -rw-r--r-- | engine/Components/World.go | 33 |
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 |
