summaryrefslogtreecommitdiff
path: root/engine/Components/World.go
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-27 18:37:27 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-27 18:37:27 +0500
commitbc11ae4b42547ace656381fb0ed0b3604350fcb1 (patch)
treebb18c160d117becadc86093b274a03d656b25405 /engine/Components/World.go
parentd240f6fa5fa4784def3f0ee291a51fecbab43ac3 (diff)
Sprites layering
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