gamnit: intro dynamic resolution support
[nit.git] / lib / gamnit / flat.nit
index 6eb8fab..f6e0fd2 100644 (file)
@@ -29,7 +29,8 @@
 #   and the like. It can be used to standardize the size of the UI across
 #   devices. It is used to position the sprites in `App::ui_sprites`.
 #
-# See the sample game at `contrib/asteronits/`.
+# See the sample game at `contrib/asteronits/` and the basic project template
+# at `lib/gamnit/examples/template_flat/`.
 module flat
 
 import glesv2
@@ -40,6 +41,7 @@ import performance_analysis
 
 import gamnit
 import gamnit::cameras
+import gamnit::dynamic_resolution
 import gamnit::limit_fps
 
 import android_two_fingers_motion is conditional(android)
@@ -354,13 +356,16 @@ redef class App
        # Draw the whole screen, all `glDraw...` calls should be executed here
        protected fun frame_core_draw(display: GamnitDisplay)
        do
-               perf_clock_main.lapse
+               frame_core_dynamic_resolution_before display
 
+               perf_clock_main.lapse
                frame_core_world_sprites display
                perfs["gamnit flat world_sprites"].add perf_clock_main.lapse
 
                frame_core_ui_sprites display
                perfs["gamnit flat ui_sprites"].add perf_clock_main.lapse
+
+               frame_core_dynamic_resolution_after display
        end
 
        private fun frame_core_sprites(display: GamnitDisplay, sprite_set: SpriteSet, camera: Camera)
@@ -653,6 +658,7 @@ private class SpriteSet
 
        redef fun add(e)
        do
+               if contexts_items.has(e.context) then return
                map_sprite e
                super
        end
@@ -663,6 +669,12 @@ private class SpriteSet
                if e isa Sprite then unmap_sprite e
        end
 
+       redef fun remove_all(e)
+       do
+               if not has(e) then return
+               remove e
+       end
+
        redef fun clear
        do
                super