Textrun_KEYS.blend (3.37 MB)
I changed acouple of things, Textrun.py now runs in module mode so that I can have variable stored outside
the main loop, the Always sensor is not skipping anymore as the keyboard status I used in verifying key press
will become unreliable if skipped(even by just a few frames)
The 4 Arrowkeys must each be pressed once before it can proceed, check the console*
While implementing this I learned that I can still access your textlist(dict) placed outside the main loop,
which is helpful so I decided to leave it there… but I really don’t know how I’ve done it without the global keyword
To begin with, I’m not even sure how dictionary work? XD
from bge import events,logic
textlist= {}
textlist[0] = ["6th Project - KEISHA incomplete" , events.ENTERKEY,31 ]
textlist[1] = ["Use Arrowkeys to move around" , [events.UPARROWKEY,events.DOWNARROWKEY,events.LEFTARROWKEY,events.RIGHTARROWKEY],28 ]
textlist[2] = ["Use C to Jump" , events.CKEY,13 ]
textlist[3] = ["Press C again in mid air for double jump" ,events.CKEY, 40]
_key_log = []
def main():
#textlist= {}
#textlist[0] = ["6th Project - KEISHA incomplete" , events.ENTERKEY,31 ]
#textlist[1] = ["Use Arrowkeys to move around" , [events.UPARROWKEY,events.DOWNARROWKEY,events.LEFTARROWKEY,events.RIGHTARROWKEY],28 ]
#textlist[2] = ["Use C to Jump" , events.CKEY,13 ]
#textlist[3] = ["Press C again in mid air for double jump" ,events.CKEY, 40]
global _key_log
cont =logic.getCurrentController()
own = cont.owner
keyboard = logic.keyboard
#ARROWS
#enter = logic.KX_INPUT_ACTIVE == keyboard.events[events.ENTERKEY]
#UKey = logic.KX_INPUT_ACTIVE == keyboard.events[events.UPARROWKEY]
#DKey = logic.KX_INPUT_ACTIVE == keyboard.events[events.DOWNARROWKEY]
#LKey = logic.KX_INPUT_ACTIVE == keyboard.events[events.LEFTARROWKEY]
#RKey = logic.KX_INPUT_ACTIVE == keyboard.events[events.RIGHTARROWKEY]
#message = ""
#mlen = len(message) # length of the string
text,keys,count = textlist[own['number']]
for key,state in keyboard.active_events.items(): # state is key status, 1=Pressed, 2=Still Active, 3=Released
if own['number'] == 0:
if key == keys and state == 3:
own['number'] = 1
own['counter'] = 0
elif own['number'] == 1:
if keys:
if key in keys and key not in _key_log and state == 3:
_key_log.append(key) # log key that is already pressed
print(_key_log)
if len(_key_log) == len(keys):
own['number'] = 2
own['counter'] = 0
_key_log = []
elif own['number'] == 2:
if key == keys and state == 3:
own['number'] = 3
own['counter'] = 0
elif own['number'] == 3:
if key == keys and state == 3:
own['number'] = 0 # repeat
own['counter'] = 0
if own['counter'] < count:
own['counter'] += 1
own.text = text[0 : own['counter']] # slice indices
#print(own.text)
if own['counter'] == count:
own.text = text
#own.text = ""
#own['counter'] = 0
#print(keys)