nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge: Concerns sorter
[nit.git]
/
lib
/
bucketed_game.nit
diff --git
a/lib/bucketed_game.nit
b/lib/bucketed_game.nit
index
70866b5
..
b326d29
100644
(file)
--- a/
lib/bucketed_game.nit
+++ b/
lib/bucketed_game.nit
@@
-36,20
+36,20
@@
end
# Optiomized organization of `Bucketable` instances
class Buckets[G: Game]
super Turnable[G]
# 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
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
for b in [0 .. n_buckets [do
- buckets[b] = new Bucket
+ buckets[b] = new HashSet[Bucketable[G]]
end
end
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]
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
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
end
# Game related event
-class GameEvent
+interface GameEvent
+ fun apply( game : ThinGame ) is abstract
end
# Event raised at the first turn
end
# Event raised at the first turn
@@
-135,6
+136,12
@@
class GameTurn[G: Game]
do
game.buckets.add_at(e, tick + t)
end
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
end
# Full game logic
@@
-144,6
+151,11
@@
class Game
var buckets: Buckets[G] = new Buckets[G]
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]
init do end
fun do_turn: GameTurn[G]
@@
-154,6
+166,8
@@
class Game
buckets.do_turn(turn)
do_post_turn(turn)
buckets.do_turn(turn)
do_post_turn(turn)
+ last_turn = turn
+
tick += 1
return turn
tick += 1
return turn