import bge import actionsFSMlist dict = bge.logic.globalDict def actionPlayer(ac): scene = bge.logic.getCurrentScene() skater = dict['p1'] deck = dict['p1d'] a = getattr(actionsFSMlist.reg_walk, 'name') name = getattr(ac, 'name') dname = getattr(ac, 'dname') start = getattr(ac, 'start') end = getattr(ac, 'end') dstart = getattr(ac, 'dstart') dend = getattr(ac, 'dend') layer = getattr(ac, 'layer') mode = getattr(ac, 'mode') speed = getattr(ac, 'speed') blendin = getattr(ac, 'blendin') #-------------------------------- skater.playAction(name, start,end, layer=layer, play_mode=mode, speed=speed, blendin=blendin) deck.playAction(dname, dstart,dend, layer=layer, play_mode=mode, speed=speed, blendin=blendin) def get_frame(ac): skater = dict['p1'] layer = getattr(ac, 'layer') print('getting frame', skater.getActionFrame(layer)) return skater.getActionFrame(layer) def set_frame(ac, frame): skater = dict['p1'] deck = dict['p1d'] layer = getattr(ac, 'layer') skater.setActionFrame(frame, layer) deck.setActionFrame(frame, layer) print('setting frame', frame) def check_exit(aState, rA, ac): exits = getattr(ac, 'exits') if rA in exits: return rA else: return aState def state_timer(own): if own['aState'] == own['l_aState']: own['stateTimer'] += 1 else: own['stateTimer'] = 0 def main(cont): own = cont.owner dict = bge.logic.globalDict #initial state if 'aState' not in own: own['aState'] = 'reg_idle' own['l_aState'] = None own['stateTimer'] = 0 og_state = own['aState'] aState = own['aState'] rA = own['requestAction'] #----------------------- if aState == 'reg_idle': actionPlayer(actionsFSMlist.reg_idle) aState = check_exit(aState, rA, actionsFSMlist.reg_idle) elif aState == 'reg_idle2': actionPlayer(actionsFSMlist.reg_idle2) aState = check_exit(aState, rA, actionsFSMlist.reg_idle2) elif aState == 'reg_idle3': actionPlayer(actionsFSMlist.reg_idle3) aState = check_exit(aState, rA, actionsFSMlist.reg_idle3) elif aState == 'reg_idle4': actionPlayer(actionsFSMlist.reg_idle4) aState = check_exit(aState, rA, actionsFSMlist.reg_idle4) elif aState == 'reg_idle5': actionPlayer(actionsFSMlist.reg_idle5) aState = check_exit(aState, rA, actionsFSMlist.reg_idle5) elif aState == 'reg_jump': actionPlayer(actionsFSMlist.reg_jump) aState = check_exit(aState, rA, actionsFSMlist.reg_jump) elif aState == 'reg_walk_air': actionPlayer(actionsFSMlist.reg_walk_air) if aState != rA: aState = 'reg_walk_air_out' elif aState == 'reg_walk_air_out': actionPlayer(actionsFSMlist.reg_walk_air_out) if own['stateTimer'] > 7: aState = check_exit(aState, rA, actionsFSMlist.reg_walk_air_out) elif aState == 'reg_sit': if own['stateTimer'] < 19: actionPlayer(actionsFSMlist.reg_sit_in) else: actionPlayer(actionsFSMlist.reg_sit) aState = check_exit(aState, rA, actionsFSMlist.reg_sit) #----------------------- elif aState == 'reg_walk': if own['l_aState'] == 'reg_walkFast': print('--------------------doing last frame') frame = get_frame(actionsFSMlist.reg_walkFast) actionPlayer(actionsFSMlist.reg_walk) set_frame(actionsFSMlist.reg_walk, frame) else: frame = actionPlayer(actionsFSMlist.reg_walk) aState = check_exit(aState, rA, actionsFSMlist.reg_walk) #----------------------- elif aState == 'reg_walkFast': aState = check_exit(aState, rA, actionsFSMlist.reg_walkFast) if own['l_aState'] == 'reg_walk': print('--------------------doing last framebbbb') frame = get_frame(actionsFSMlist.reg_walk) actionPlayer(actionsFSMlist.reg_walkFast) set_frame(actionsFSMlist.reg_walkFast, frame) else: actionPlayer(actionsFSMlist.reg_walkFast) #print(frame) elif aState == 'reg_onboard': actionPlayer(actionsFSMlist.reg_onboard) if own['stateTimer'] > 10: aState = check_exit(aState, rA, actionsFSMlist.reg_onboard) elif aState == 'reg_offboard': actionPlayer(actionsFSMlist.reg_offboard) if own['stateTimer'] > 20: aState = check_exit(aState, rA, actionsFSMlist.reg_offboard) elif aState == 'reg_roll': actionPlayer(actionsFSMlist.reg_roll) aState = check_exit(aState, rA, actionsFSMlist.reg_roll) elif aState == 'reg_turnLeft': actionPlayer(actionsFSMlist.reg_turnLeft) aState = check_exit(aState, rA, actionsFSMlist.reg_turnLeft) elif aState == 'reg_turnRight': actionPlayer(actionsFSMlist.reg_turnRight) aState = check_exit(aState, rA, actionsFSMlist.reg_turnRight) elif aState == 'reg_opos': actionPlayer(actionsFSMlist.reg_opos) aState = check_exit(aState, rA, actionsFSMlist.reg_opos) elif aState == 'reg_nopos': actionPlayer(actionsFSMlist.reg_nopos) aState = check_exit(aState, rA, actionsFSMlist.reg_nopos) elif aState == 'reg_pump': actionPlayer(actionsFSMlist.reg_pump) aState = check_exit(aState, rA, actionsFSMlist.reg_pump) elif aState == 'reg_push': actionPlayer(actionsFSMlist.reg_push) if own['stateTimer'] > 70: aState = 'reg_roll' elif aState == 'reg_push_goof': actionPlayer(actionsFSMlist.reg_push_goof) if own['stateTimer'] > 70: aState = 'reg_roll' elif aState == 'reg_powerslide': if own['stateTimer'] < 20: actionPlayer(actionsFSMlist.reg_powerslide_in) else: actionPlayer(actionsFSMlist.reg_powerslide) aState = check_exit(aState, rA, actionsFSMlist.reg_powerslide) elif aState == 'reg_fs_powerslide': if own['stateTimer'] < 20: actionPlayer(actionsFSMlist.reg_fs_powerslide_in) else: actionPlayer(actionsFSMlist.reg_fs_powerslide) aState = check_exit(aState, rA, actionsFSMlist.reg_fs_powerslide) elif aState == 'reg_manual': actionPlayer(actionsFSMlist.reg_manual) aState = check_exit(aState, rA, actionsFSMlist.reg_manual) elif aState == 'reg_nmanual': actionPlayer(actionsFSMlist.reg_nmanual) aState = check_exit(aState, rA, actionsFSMlist.reg_nmanual) #----------------------- own['aState'] = aState print(own['l_aState'], '----l_aState', own['aState']) own['l_aState'] = og_state state_timer(own)