Funkiness.
authorBernard Blackham <dagobah@ucc.gu.uwa.edu.au>
Sun, 27 Jun 2004 20:50:56 +0000 (20:50 +0000)
committerBernard Blackham <dagobah@ucc.gu.uwa.edu.au>
Sun, 27 Jun 2004 20:50:56 +0000 (20:50 +0000)
sql-edition/servers/HorizScroll.py
sql-edition/servers/VendServer.py

index 69644fb..b82d664 100644 (file)
@@ -13,14 +13,14 @@ class HorizScroll:
                if len(self.text) <= 10:
                        return [text]
 
-               if not padding:
+               if padding == None:
                        padding = len(self.text) / 2 + 1
 
                format = "%-" + str(padding) + "." + str(padding) + "s"
                pad = string.replace(format % " "," ",paddingchar)
                padtext = self.text + pad
                if wraparound:
-                       numiters = len(self.text) - 1
+                       numiters = len(self.text) - 10
                else:
                        numiters = len(padtext)
 
index b1274da..184546c 100755 (executable)
@@ -11,6 +11,7 @@ from LATClient import LATClient
 from VendingMachine import VendingMachine
 from ConfigParser import ConfigParser
 from HorizScroll import HorizScroll
+from random import random, seed
 
 GREETING = 'UCC SNACKS'
 PIN_LENGTH = 4
@@ -110,17 +111,100 @@ def verify_user_pin(uid, pin):
 
 def door_open_mode(vending_machine):
        print "Entering open door mode"
-       v.display("DOOR  OPEN")
+       v.display("-FEED  ME-")
        while True:
                e = v.next_event()
                if e == None: break
                (event, params) = e
                if event == DOOR:
                        if params == 1: # door closed
-                               v.display("BYE BYE!")
+                               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'))
+                       else:
+                               s += msg[i]
+                       reveal += 1
+                       reveal %= 173
+               v.display(s)
+
 def center(str):
        LEN = 10
        return ' '*((LEN-len(str))/2)+str
@@ -148,7 +232,7 @@ class MessageKeeper:
                        if len(self.scrolling_message[0][0]) > 10:
                                (m, r, t) = self.scrolling_message[0]
                                a = []
-                               exp = HorizScroll(m).expand(padding = 0, wraparound = False)
+                               exp = HorizScroll(m).expand(padding = 0, wraparound = True)
                                if t == None:
                                        t = 0.1
                                else:
@@ -201,30 +285,37 @@ if __name__ == '__main__':
 
        mk = MessageKeeper(v)
        mk.set_message(GREETING)
-       logout_timeout = None
+       time_to_autologout = None
+       idler = Idler(v)
+       time_to_idle = None
        last_timeout_refresh = None
 
        while True:
                if USE_DB: db.handle_events()
 
-               if logout_timeout != None:
-                       time_left = logout_timeout - time()
+               if time_to_autologout != None:
+                       time_left = time_to_autologout - time()
                        if time_left < 5 and (last_timeout_refresh is None or last_timeout_refresh > time_left):
                                mk.set_message('LOGOUT: '+str(int(time_left)))
                                last_timeout_refresh = int(time_left)
                                cur_selection = ''
 
-               if logout_timeout != None and logout_timeout - time() <= 0:
-                       logout_timeout = None
+               if time_to_autologout != None and time_to_autologout - time() <= 0:
+                       time_to_autologout = None
                        cur_user = ''
                        cur_pin = ''
                        cur_selection = ''
                        mk.set_message(GREETING)
 
-               if logout_timeout and not mk.done(): logout_timeout = None
-               if len(cur_pin) == PIN_LENGTH and mk.done() and logout_timeout == None:
+               if time_to_autologout and not mk.done(): time_to_autologout = None
+               if cur_user == '' and time_to_autologout: time_to_autologout = None
+               if len(cur_pin) == PIN_LENGTH and mk.done() and time_to_autologout == None:
                        # start autologout
-                       logout_timeout = time() + 15
+                       time_to_autologout = time() + 15
+
+               if time_to_idle == None and cur_user == '': time_to_idle = time() + 60
+               if time_to_idle != None and cur_user != '': time_to_idle = None
+               if time_to_idle is not None and time() > time_to_idle: idler.next()
 
                mk.update_display()
 
@@ -306,10 +397,11 @@ if __name__ == '__main__':
                                        continue
                                cur_selection += chr(key + ord('0'))
                                mk.set_message('SELECT: '+cur_selection)
+                               time_to_autologout = None
                        elif len(cur_selection) == 1:
                                if key == 11:
                                        cur_selection = ''
-                                       logout_timeout = None
+                                       time_to_autologout = None
                                        scroll_options(username, mk)
                                        continue
                                else:
@@ -319,6 +411,8 @@ if __name__ == '__main__':
                                        if cur_selection == '55':
                                                v.display('GOT DOOR?')
                                                os.system('su - "%s" -c "dispense door"'%username)
+                                       elif cur_selection == '91':
+                                               cookie(v)
                                        elif cur_selection == '99':
                                                scroll_options(username, mk)
                                                cur_selection = ''
@@ -333,4 +427,4 @@ if __name__ == '__main__':
                                        v.display('THANK YOU')
                                        sleep(0.5)
                                        cur_selection = ''
-                                       logout_timeout = time() + 10
+                                       time_to_autologout = time() + 10

UCC git Repository :: git.ucc.asn.au