+ e = v.next_event()
+ if e == None: break
+ (event, params) = e
+ if event == DOOR:
+ if params == 1: # door closed
+ v.display("-YUM YUM!-")
+ sleep(1)
+ return
+
+class Idler:
+ def __init__(self, v):
+ self.idle_state = 0
+ self.v = v
+
+ def put_shark(self, s, l):
+ if self.s[l] == ' ':
+ self.s[l] = s
+ elif self.s[l] == 'X':
+ self.s[l] = '*'
+ else:
+ self.s[l] = 'X'
+
+ def next(self):
+ # does the next stage of a dance
+ self.s = [' ']*10
+ shark1 = self.idle_state % 18
+ if shark1 < 9:
+ self.put_shark('^', shark1)
+ else:
+ self.put_shark('^', 18-shark1)
+
+ shark2 = ((self.idle_state+4) % 36)/2
+ if shark2 < 9:
+ self.put_shark('<', shark2)
+ else:
+ self.put_shark('<', 18-shark2)
+
+ shark3 = ((self.idle_state+7) % 54)/3
+ if shark3 < 9:
+ self.put_shark('>', 9-shark3)
+ else:
+ self.put_shark('>', 9-(18-shark3))
+
+ train1 = ((self.idle_state%(18*36)))
+ train1_start = 122
+ if train1 > train1_start and train1 < train1_start+(10*2):
+ for i in range(5):
+ ptr = i+train1-train1_start-5
+ if ptr >= 0 and ptr < 10: self.s[ptr] = '#'
+
+ train2 = ((self.idle_state%(18*36)))
+ train2_start = 400
+ if train2 > train2_start and train2 < train2_start+(10*2):
+ for i in range(5):
+ ptr = i+train2-train2_start-5
+ if ptr >= 0 and ptr < 10: self.s[9-ptr] = '#'
+
+ train3 = ((self.idle_state%(18*36)))
+ train3_start = 230
+ if train3 > train3_start and train3 < train3_start+(10*2):
+ for i in range(10):
+ ptr = i+train3-train3_start-10
+ if ptr >= 0 and ptr < 10: self.s[ptr] = '-'
+
+ self.v.display(string.join(self.s, ''))
+ self.idle_state += 1
+ self.idle_state %= 18*36*54
+
+def cookie(v):
+ seed(time())
+ messages = [' WASSUP! ', 'PINK FISH ', ' SECRETS ']
+ choice = int(random()*len(messages))
+ msg = messages[choice]
+ left = range(len(msg))
+ for i in range(len(msg)):
+ if msg[i] == ' ': left.remove(i)
+ reveal = 1
+ while left:
+ s = ''
+ for i in range(0, len(msg)):
+ if i in left:
+ if reveal == 0:
+ left.remove(i)
+ s += msg[i]
+ else:
+ s += chr(int(random()*26)+ord('A'))
+ reveal += 1
+ reveal %= 53
+ else:
+ s += msg[i]
+ v.display(s)
+
+def center(str):
+ LEN = 10
+ return ' '*((LEN-len(str))/2)+str
+
+class MessageKeeper:
+ def __init__(self, vendie):
+ # Each element of scrolling_message should be a 3-tuple of
+ # ('message', True/False if it is to be repeated, time to display)
+ self.scrolling_message = []
+ self.v = vendie
+ self.next_update = None
+
+ def set_message(self, string):
+ self.scrolling_message = [(string, False, None)]
+ self.update_display(True)
+
+ def set_messages(self, strings):
+ self.scrolling_message = strings
+ self.update_display(True)
+
+ def update_display(self, forced = False):
+ if not forced and self.next_update != None and time() < self.next_update:
+ return
+ if len(self.scrolling_message) > 0:
+ if len(self.scrolling_message[0][0]) > 10:
+ (m, r, t) = self.scrolling_message[0]
+ a = []
+ exp = HorizScroll(m).expand(padding = 0, wraparound = True)
+ if t == None:
+ t = 0.1
+ else:
+ t = t / len(exp)
+ for x in exp:
+ a.append((x, r, t))
+ del self.scrolling_message[0]
+ self.scrolling_message = a + self.scrolling_message
+ newmsg = self.scrolling_message[0]
+ if newmsg[2] != None:
+ self.next_update = time() + newmsg[2]
+ else:
+ self.next_update = None
+ self.v.display(self.scrolling_message[0][0])
+ if self.scrolling_message[0][1]:
+ self.scrolling_message.append(self.scrolling_message[0])
+ del self.scrolling_message[0]
+
+ def done(self):
+ return len(self.scrolling_message) == 0