battleman.py: Implemented adding a combatant to the wait list

This commit is contained in:
2012-04-02 23:42:31 -04:00
parent e18a5cf840
commit 4239d57d02
2 changed files with 121 additions and 21 deletions

View File

@ -14,6 +14,7 @@ class Battle():
def __init__(self):
self.combatant_hash = {}
self.groups = []
self.wait_list = {}
self.current = None
self.round = None
@ -56,8 +57,8 @@ class Battle():
else:
self.groups.append(group)
for c in group.members:
self.combatant_hash[c.index] = c
for i, c in group.members.items():
self.combatant_hash[i] = c
def get_current_group(self):
@ -71,7 +72,7 @@ class Battle():
# member of the group gets returned.
def get_current_combatant(self):
if self.current != None:
return self.groups[self.current].members[0]
return self.groups[self.current].get_member_by_pos(0)
else:
return None
@ -97,7 +98,7 @@ class Battle():
print "Error: battle is already running"
for g in self.groups:
if g.is_solo_group() and g.members[0].pc:
if g.is_solo_group() and g.get_member_by_pos(0).pc:
g.set_init(easyinput.input_int('Initiative for {}'.format(g.name)))
else:
g.roll_init()
@ -120,10 +121,10 @@ class Battle():
for g in self.groups:
if g.is_solo_group():
ret = ret + '{}\n'.format(g.members[0])
ret = ret + '{}\n'.format(g.get_member_by_pos(0))
else:
ret = ret + '{}:\n'.format(g.name)
for c in g.members:
for c in g.members.values():
ret = ret + ' {}\n'.format(c)
return ret.rstrip()
@ -181,6 +182,48 @@ class Battle():
return None
# fixme: if removing makes a group empty, nom the group
def wait(self, index):
v = self.validate_started()
if v:
print v
return
if index in self.wait_list:
print '{} is already waiting.'.format(self.wait_list[index])
else:
c = None
i = 0
for group in self.groups:
c = group.remove_member(index)
if c:
if len(group.members) == 0:
del self.groups[i]
break
i += 1
if c:
self.wait_list[index] = c
else:
print 'Error: Failed to find combatant {}'.format(index)
def unwait(self, index):
v = self.validate_started()
if v:
print v
return
if index in self.wait_list:
pass # fixme - fix unwaiting
else:
if index in self.combatant_hash:
print '{} is not waiting'.format(self.combatant_hash[index])
else:
print "Error: Failed to find combatant {}".format(index)
class CombatGroup():
# What we're mostly getting here is a definition of the *members*
# of the group... then we build them all and stick them in
@ -209,9 +252,10 @@ class CombatGroup():
count = easyinput.input_int('count', 1)
# Now make the combatants...
members = []
members = {}
for i in range(count):
members.append(Combatant(name, hp, pc=False, surges=surges, ap=ap, sw=0, recharges=recharges))
c = Combatant(name, hp, pc=False, surges=surges, ap=ap, sw=0, recharges=recharges)
members[c.index] = c
if count > 1:
name = name + 's'
@ -236,7 +280,31 @@ class CombatGroup():
def add_member(self, c):
self.members.append(c)
self.members[c.index] = c
# Removes the member from the group and returns her
def remove_member(self, index):
if index not in self.members:
return None
c = self.members[index]
del self.members[index]
return c
def get_member(self, index):
if index in self.members:
return self.members[index]
else:
return None
def get_member_by_pos(self, pos):
if pos >= len(self.members):
return None
else:
return self.members.values()[pos]
def is_solo_group(self):
@ -246,12 +314,12 @@ class CombatGroup():
def begin_turn(self):
print '{} {} initiative.'.format(self.name, ['has', 'have'][len(self.members) != 1])
for c in self.members:
for c in self.members.values():
c.begin_turn()
def end_turn(self):
for c in self.members:
for c in self.members.values():
c.end_turn()