38 lines
No EOL
1.3 KiB
Python
38 lines
No EOL
1.3 KiB
Python
"""McRogueFace - Multi-Layer Tiles (complete)
|
|
|
|
Documentation: https://mcrogueface.github.io/cookbook/grid_multi_layer
|
|
Repository: https://github.com/jmccardle/McRogueFace/blob/master/docs/cookbook/grid/grid_multi_layer_complete.py
|
|
|
|
This code is extracted from the McRogueFace documentation and can be
|
|
run directly with: ./mcrogueface path/to/this/file.py
|
|
"""
|
|
|
|
class OptimizedLayers:
|
|
"""Performance-optimized layer management."""
|
|
|
|
def __init__(self, grid):
|
|
self.grid = grid
|
|
self.dirty_effects = set() # Only update changed cells
|
|
self.batch_updates = []
|
|
|
|
def mark_dirty(self, x, y):
|
|
"""Mark a cell as needing update."""
|
|
self.dirty_effects.add((x, y))
|
|
|
|
def batch_set(self, layer, cells_and_values):
|
|
"""Queue batch updates."""
|
|
self.batch_updates.append((layer, cells_and_values))
|
|
|
|
def flush(self):
|
|
"""Apply all queued updates."""
|
|
for layer, updates in self.batch_updates:
|
|
for x, y, value in updates:
|
|
layer.set(x, y, value)
|
|
self.batch_updates = []
|
|
|
|
def update_dirty_only(self, effect_layer, effect_calculator):
|
|
"""Only update cells marked dirty."""
|
|
for x, y in self.dirty_effects:
|
|
color = effect_calculator(x, y)
|
|
effect_layer.set(x, y, color)
|
|
self.dirty_effects.clear() |