Added an import for 'debugger_socket'.
[nit.git] / lib / bucketed_game.nit
index 70866b5..b326d29 100644 (file)
@@ -36,20 +36,20 @@ end
 # Optiomized organization of `Bucketable` instances
 class Buckets[G: Game]
        super Turnable[G]
-       type Bucket: HashSet[Bucketable[G]]
+       type BUCKET: HashSet[Bucketable[G]]
 
-       private var buckets: Array[Bucket]
+       private var buckets: Array[BUCKET]
 
-       private var next_bucket: nullable Bucket = null
+       private var next_bucket: nullable BUCKET = null
        private var current_bucket_key: Int = -1
 
        init
        do
                var n_buckets = 100
-               buckets = new Array[Bucket].with_capacity(n_buckets)
+               buckets = new Array[BUCKET].with_capacity(n_buckets)
 
                for b in [0 .. n_buckets [do
-                       buckets[b] = new Bucket
+                       buckets[b] = new HashSet[Bucketable[G]]
                end
        end
 
@@ -76,7 +76,7 @@ class Buckets[G: Game]
                current_bucket_key = key_for_tick(turn.tick)
                var current_bucket = buckets[current_bucket_key]
 
-               next_bucket = new Bucket
+               next_bucket = new HashSet[Bucketable[G]]
 
                for e in current_bucket do
                        if e.act_at == turn.tick then
@@ -93,7 +93,8 @@ class Buckets[G: Game]
 end
 
 # Game related event
-class GameEvent
+interface GameEvent
+       fun apply( game : ThinGame ) is abstract
 end
 
 # Event raised at the first turn
@@ -135,6 +136,12 @@ class GameTurn[G: Game]
        do
                game.buckets.add_at(e, tick + t)
        end
+
+       fun add_event( event : GameEvent )
+       do
+               event.apply( game )
+               events.add( event )
+       end
 end
 
 # Full game logic
@@ -144,6 +151,11 @@ class Game
 
        var buckets: Buckets[G] = new Buckets[G]
 
+       # Last turn executed in this game
+       # Can be used to consult the latest events (by the display for example),
+       # but cannot be used to add new Events.
+       var last_turn: nullable ThinGameTurn[G] = null
+
        init do end
 
        fun do_turn: GameTurn[G]
@@ -154,6 +166,8 @@ class Game
                buckets.do_turn(turn)
                do_post_turn(turn)
 
+               last_turn = turn
+
                tick += 1
 
                return turn