Skip to content

Commit 2afae44

Browse files
committed
Expand event core, add comments to collision
1 parent 1c0cbda commit 2afae44

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

spockbot/plugins/core/event.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,43 @@
1414

1515
class EventCore(object):
1616
def __init__(self):
17+
self.has_run = False
1718
self.kill_event = False
1819
self.event_handlers = defaultdict(list)
1920
signal.signal(signal.SIGINT, self.kill)
2021
signal.signal(signal.SIGTERM, self.kill)
2122

22-
def event_loop(self):
23-
self.emit('event_start')
23+
def event_loop(self, continuous=True):
24+
if continuous:
25+
self.run_continuous()
26+
else:
27+
self.run_once()
28+
29+
def run_continuous(self):
30+
if not self.has_run and not self.kill_event:
31+
self.has_run = True
32+
self.emit('event_start')
2433
while not self.kill_event:
2534
self.emit('event_tick')
2635
logger.debug('EVENTCORE: Kill called, shutting down')
2736
self.emit('event_kill')
2837

38+
def run_once(self):
39+
if not self.has_run and not self.kill_event:
40+
self.has_run = True
41+
self.emit('event_start')
42+
if not self.kill_event:
43+
self.emit('event_tick')
44+
else:
45+
logger.debug('EVENTCORE: Kill called, shutting down')
46+
self.emit('event_kill')
47+
2948
def reg_event_handler(self, event, handler):
3049
self.event_handlers[event].append(handler)
3150

51+
def unreg_event_handler(self, event, handler):
52+
self.event_handlers[event].remove(handler)
53+
3254
def emit(self, event, data=None):
3355
to_remove = []
3456
# reversed, because handlers can register themselves

spockbot/plugins/tools/collision.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def check_axis(axis, min_a, max_a, min_b, max_b):
3030
return axis*overlap
3131

3232

33+
# Terribly named class with terribly named methods mostly useful to physics
34+
# implementations, rarely useful to other things. Much too clever for its own
35+
# good but reasonably fast for it.
3336
class MTVTest(object):
3437
def __init__(self, world, bbox):
3538
self.world = world
@@ -40,6 +43,9 @@ def check_collision(self, pos, vector):
4043
return self.block_collision(test_pos)
4144

4245
def block_collision(self, pos):
46+
# This line is confusing. Basically it figures out how many block
47+
# coordinates the bounding box currently occupies. It's not clear what
48+
# "b" stands for so take your pick: Blocks, Bounds, how-Big-is-the-Box
4349
b = (pos + self.bbox).ceil() - pos.floor()
4450
for block_pos in gen_block_set(pos, *zip((0, -1, 0), b)):
4551
block = blocks.get_block(*self.world.get_block(*block_pos))

0 commit comments

Comments
 (0)