コード例 #1
0
 def on_game_input(self, keycode):
     if keycode == solent_keycode('a'):
         self.rail_snake_game.steer(cardinal='w')
     elif keycode == solent_keycode('w'):
         self.rail_snake_game.steer(cardinal='n')
     elif keycode == solent_keycode('d'):
         self.rail_snake_game.steer(cardinal='e')
     elif keycode in (solent_keycode('x'), solent_keycode('s')):
         self.rail_snake_game.steer(cardinal='s')
コード例 #2
0
ファイル: draw.py プロジェクト: Evanerfbdgcn/solent
 def on_keystroke(self, keycode):
     if self.track_containment_mode.is_focus_on_menu():
         if keycode == solent_keycode('tab'):
             self.b_in_menu = False
             self.nearcast.game_focus()
         else:
             self.nearcast.menu_select(menu_keycode=keycode)
     else:
         if keycode == solent_keycode('tab'):
             self.b_in_menu = True
             self.nearcast.menu_focus()
         else:
             self.nearcast.game_input(keycode=keycode)
コード例 #3
0
ファイル: turn_based_game.py プロジェクト: solent-eng/solent
 def event_loop(self):
     self._render()
     while True:
         #
         # Defensive
         if self.game == None:
             self.b_menu_active = True
         #
         # Input
         if self.b_menu_active:
             keycode = self.console.block_get_keycode()
         elif self.game != None and self.game.player_mind.is_blocking():
             keycode = self.console.block_get_keycode()
         else:
             keycode = self.console.async_get_keycode()
         b_key = True
         if keycode == None:
             b_key = False
         #
         # Menu
         if self.b_menu_active:
             if b_key:
                 if keycode == solent_keycode('tab') and self.game != None:
                     self.b_menu_active = False
                     keycode = None
                 elif self.menu.has_key(chr(keycode)):
                     fn = self.menu.get_callback(chr(keycode))
                     fn()
                     keycode = None
         else:
             if b_key:
                 if keycode == solent_keycode('tab'):
                     self.b_menu_active = True
                     keycode = None
                     self._render()
                     continue
                 else:
                     self.game.accept_key(key=chr(keycode))
                     keycode = None
         #
         # Update display.
         if self.b_menu_active:
             self._render()
         else:
             activity = self.game.turn()
             if activity:
                 time.sleep(0.05)
             if not activity:
                 time.sleep(0.1)
コード例 #4
0
 def eng_turn(self, activity):
     if self.mode == MODE_NONE:
         return
     #
     keycode = self.console.async_get_keycode()
     if keycode:
         activity.mark(l=self, s='received keystroke %s' % keycode)
         if keycode == solent_keycode('lmousedown'):
             self.lmousedown_coords = self.console.get_last_lmousedown()
         elif keycode == solent_keycode('lmouseup'):
             self.lmouseup_coords = self.console.get_last_lmouseup()
         elif keycode == solent_keycode('rmousedown'):
             self.rmousedown_coords = self.console.get_last_rmousedown()
         elif keycode == solent_keycode('rmouseup'):
             self.rmouseup_coords = self.console.get_last_rmouseup()
         self.accept_key(keycode=keycode)
     #
     self.refresh_console()
コード例 #5
0
 def async_get_keycode(self):
     for itm in pygame.event.get():
         self.event_queue.append(itm)
     # The reason this is a while loop is to get through event characters
     # we don't care about. i.e. it's a different reason for a while loop
     # in the same position in block_get_keycode. (At first glance, it
     # looks trivial to merge them, but it's not)
     while True:
         if not self.event_queue:
             return None
         ev = self.event_queue.popleft()
         if ev.type == pygame.QUIT:
             raise SolentQuitException()
         if ev.type == pygame.MOUSEBUTTONDOWN:
             (xpos, ypos) = ev.pos
             if ev.button == 1:
                 self.last_lmousedown = self.grid_display.coords_from_mousepos(
                     xpos=xpos, ypos=ypos)
                 return solent_keycode('lmousedown')
             if ev.button == 3:
                 self.last_rmousedown = self.grid_display.coords_from_mousepos(
                     xpos=xpos, ypos=ypos)
                 return solent_keycode('rmousedown')
         if ev.type == pygame.MOUSEBUTTONUP:
             (xpos, ypos) = ev.pos
             if ev.button == 1:
                 self.last_lmouseup = self.grid_display.coords_from_mousepos(
                     xpos=xpos, ypos=ypos)
                 return solent_keycode('lmouseup')
             if ev.button == 3:
                 self.last_rmouseup = self.grid_display.coords_from_mousepos(
                     xpos=xpos, ypos=ypos)
                 return solent_keycode('rmouseup')
         if not ev.type == pygame.KEYDOWN:
             continue
         #
         c = _sanitise_input(u=ev.unicode)
         return c
コード例 #6
0
 def _print(self, keycode, cpair):
     if keycode == solent_keycode('backspace') and self.rest > 0:
         self.rest -= 1
         self.spin_term.write(drop=self.drop,
                              rest=self.rest,
                              s=' ',
                              cpair=cpair)
         return
     if keycode == solent_keycode('newline'):
         self.rest = 0
         self.drop += 1
     else:
         self.spin_term.write(drop=self.drop,
                              rest=self.rest,
                              s=chr(keycode),
                              cpair=cpair)
         self.rest += 1
     if self.rest == CONSOLE_WIDTH:
         self.rest = 0
         self.drop += 1
     while self.drop >= CONSOLE_HEIGHT:
         self.spin_term.scroll()
         self.drop -= 1
コード例 #7
0
 def block_get_keycode(self):
     while True:
         if self.event_queue:
             ev = self.event_queue.popleft()
         else:
             ev = pygame.event.wait()
         #
         if ev.type == pygame.QUIT:
             raise SolentQuitException()
         if ev.type == pygame.MOUSEBUTTONDOWN:
             (xpos, ypos) = ev.pos
             self.last_mousedown = self.grid_display.coords_from_mousepos(
                 xpos=xpos, ypos=ypos)
             return solent_keycode('mousedown')
         if ev.type == pygame.MOUSEBUTTONUP:
             (xpos, ypos) = ev.pos
             self.last_mouseup = self.grid_display.coords_from_mousepos(
                 xpos=xpos, ypos=ypos)
             return solent_keycode('mouseup')
         if not ev.type == pygame.KEYDOWN:
             continue
         #
         c = _sanitise_input(u=ev.unicode)
         return c
コード例 #8
0
ファイル: console_demo.py プロジェクト: solent-eng/solent
def event_loop(console):
    cgrid = Cgrid(
        width=console.width,
        height=console.height)
    cgrid.put(
        drop=console.height-3,
        rest=1,
        s='(Escape to quit)',
        cpair=solent_cpair('white'))
    for (idx, (cpair, name)) in enumerate(solent_cpair_pairs()):
        cgrid.put(
            drop=(5+int(idx/4)),
            rest=(2+int(18*(idx%4))),
            s='%s %s'%(name, cpair),
            cpair=cpair)
    console.screen_update(
        cgrid=cgrid)
    #
    t = 0
    while True:
        keycode = console.async_get_keycode()
        if keycode != None:
            if keycode == solent_keycode('esc'):
                raise SolentQuitException()
            cgrid.put(
                drop=3,
                rest=1,
                s='key %s (%s)  '%(hex(keycode), chr(keycode)),
                cpair=solent_cpair('red'))
        else:
            time.sleep(0.05)
        cgrid.put(
            drop=1,
            rest=1,
            s='loop counter: %s'%(t),
            cpair=solent_cpair('green'))
        console.screen_update(
            cgrid=cgrid)
        t += 1
コード例 #9
0
 def _received_keycode(self, keycode):
     if keycode in QUIT_KEYCODES:
         raise SolentQuitException()
     #
     if None == self.rail_line_finder:
         return
     #
     cpair = solent_cpair('orange')
     # This backspace mechanism is far from perfect.
     if keycode == solent_keycode('backspace'):
         self.rail_line_finder.backspace()
         s = self.rail_line_finder.get()
         idx = len(s) % CONSOLE_WIDTH
         s = s[-1 * idx:]
         self.spin_term.write(drop=self.drop,
                              rest=0,
                              s='%s ' % s,
                              cpair=cpair)
         self.rest = len(s)
     else:
         self.rail_line_finder.accept_bytes([keycode])
         self._print(keycode=keycode, cpair=cpair)
     self.spin_term.refresh_console()
コード例 #10
0
ファイル: draw.py プロジェクト: Evanerfbdgcn/solent
    message menu_select
        field menu_keycode
'''


class TrackPrimeConsole:
    def __init__(self, orb):
        self.orb = orb

    def on_prime_console(self, console_type, height, width):
        self.console_type = console_type
        self.height = height
        self.width = width


MENU_KEYCODE_NEW_GAME = solent_keycode('n')
MENU_KEYCODE_CONTINUE = solent_keycode('c')
MENU_KEYCODE_QUIT = solent_keycode('q')


def t100():
    return time.time() * 100


class TrackContainmentMode:
    '''
    Tracks whether we are in the menu or not.
    '''
    def __init__(self, orb):
        self.orb = orb
        #
コード例 #11
0
 def accept_key(self, keycode):
     '''
     By making this an exposed command, we can allow the console to be used
     as a display with input coming from elsewhere.
     '''
     if self.mode == MODE_SELECT:
         if keycode == solent_keycode('esc'):
             self.to_mode_standard()
         elif keycode in (solent_keycode('newline'), solent_keycode('s')):
             (c, cpair) = self.cgrid.get(drop=self.select_drop,
                                         rest=self.select_rest)
             self._call_selui_lselect(drop=self.select_drop,
                                      rest=self.select_rest,
                                      c=c,
                                      cpair=cpair)
             self.to_mode_standard()
         else:
             # we let the user navigate the cursor using arrow keys, vi
             # keys, gollop keys.
             b_moved = False
             # standard navigation
             if keycode in (solent_keycode('q'), solent_keycode('a'),
                            solent_keycode('z'), solent_keycode('y'),
                            solent_keycode('h'), solent_keycode('b')):
                 if self.select_rest > 0:
                     self.select_rest -= 1
                 b_moved = True
             if keycode in (solent_keycode('e'), solent_keycode('d'),
                            solent_keycode('c'), solent_keycode('u'),
                            solent_keycode('l'), solent_keycode('n')):
                 if self.select_rest < self.width - 1:
                     self.select_rest += 1
                 b_moved = True
             if keycode in (solent_keycode('q'), solent_keycode('w'),
                            solent_keycode('e'), solent_keycode('y'),
                            solent_keycode('k'), solent_keycode('u')):
                 if self.select_drop > 0:
                     self.select_drop -= 1
                 b_moved = True
             if keycode in (solent_keycode('z'), solent_keycode('x'),
                            solent_keycode('c'), solent_keycode('b'),
                            solent_keycode('j'), solent_keycode('n')):
                 if self.select_drop < self.height - 1:
                     self.select_drop += 1
                 b_moved = True
             # shift navigation
             if keycode in (solent_keycode('Q'), solent_keycode('A'),
                            solent_keycode('Z'), solent_keycode('Y'),
                            solent_keycode('H'), solent_keycode('B')):
                 self.select_rest = 0
                 b_moved = True
             if keycode in (solent_keycode('E'), solent_keycode('D'),
                            solent_keycode('C'), solent_keycode('U'),
                            solent_keycode('L'), solent_keycode('N')):
                 self.select_rest = self.width - 1
                 b_moved = True
             if keycode in (solent_keycode('Q'), solent_keycode('W'),
                            solent_keycode('E'), solent_keycode('Y'),
                            solent_keycode('K'), solent_keycode('U')):
                 self.select_drop = 0
                 b_moved = True
             if keycode in (solent_keycode('Z'), solent_keycode('X'),
                            solent_keycode('C'), solent_keycode('B'),
                            solent_keycode('J'), solent_keycode('N')):
                 self.select_drop = self.height - 1
                 b_moved = True
             #
             if b_moved:
                 self.select_cursor_on = True
                 self.select_cursor_t100 = time.time() * 100
     elif self.mode == MODE_STANDARD:
         if keycode == solent_keycode('esc'):
             self.to_mode_select()
         else:
             if keycode == solent_keycode('lmouseup'):
                 # We check to see that the coords were the same as
                 # when the mouse was depressed. If they weren't, this
                 # usually implies the user has rethought their
                 # decision, and we abort. From memory, this is how FTL
                 # works, and it's super-useful.
                 (ddrop, drest) = self.lmousedown_coords
                 (udrop, urest) = self.lmouseup_coords
                 if (ddrop, drest) == (udrop, urest):
                     (c, cpair) = self.cgrid.get(drop=udrop, rest=urest)
                     self._call_selui_lselect(drop=udrop,
                                              rest=urest,
                                              c=c,
                                              cpair=cpair)
             elif keycode in MOUSE_EVENTS:
                 pass
             else:
                 # we pass the keystroke back in a callback
                 self._call_selui_keycode(keycode=keycode)
コード例 #12
0
#

from solent import solent_cpair
from solent import solent_keycode
from solent import uniq
from solent.console import Cgrid
from solent.console import Console
from solent import log

import time

MODE_NONE = 0
MODE_SELECT = 1
MODE_STANDARD = 2

MOUSE_EVENTS = (solent_keycode('lmousedown'), solent_keycode('lmouseup'),
                solent_keycode('rmousedown'), solent_keycode('rmouseup'))


class CsSeluiKeycode:
    def __init__(self):
        self.keycode = None


class CsSeluiLselect:
    def __init__(self):
        self.drop = None
        self.rest = None
        self.c = None
        self.cpair = None
コード例 #13
0
ファイル: weeds.py プロジェクト: mchi/solent
 def on_directive(self, directive_h, description):
     self.d_directive[directive_h] = description
     #
     if directive_h == 'nw':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('q'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n7'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('y'),
             directive_h=directive_h)
     elif directive_h == 'nn':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('w'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n8'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('k'),
             directive_h=directive_h)
     elif directive_h == 'ne':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('e'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n9'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('u'),
             directive_h=directive_h)
     elif directive_h == 'sw':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('z'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n1'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('b'),
             directive_h=directive_h)
     elif directive_h == 'ss':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('x'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n2'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('j'),
             directive_h=directive_h)
     elif directive_h == 'se':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('c'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n3'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('n'),
             directive_h=directive_h)
     elif directive_h == 'ww':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('a'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n4'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('h'),
             directive_h=directive_h)
     elif directive_h == 'ee':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('d'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n6'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('l'),
             directive_h=directive_h)
     elif directive_h == 'a':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('s'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n5'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('space'),
             directive_h=directive_h)
     elif directive_h == 'b':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_GOLLOP,
             keycode=solent_keycode('r'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_KEYPAD,
             keycode=solent_keycode('n0'),
             directive_h=directive_h)
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('slash'),
             directive_h=directive_h)
     elif directive_h == 'help':
         self.nearcast.keycode_to_directive(
             control_scheme_h=CONTROL_SCHEME_H_VI,
             keycode=solent_keycode('qmark'),
             directive_h=directive_h)
     else:
         raise Exception('Unhandled directive %s'%(directive.h))
コード例 #14
0
        i field h

    message init
        field addr
        field port

    message net_connect
    message net_condrop
        field message
    message net_recv
        field bb
    message net_send
        field bb
'''

QUIT_KEYCODES = (solent_keycode('etx'), solent_keycode('dc1'))

#CONSOLE_TYPE = 'pygame'
CONSOLE_TYPE = 'curses'
CONSOLE_WIDTH = 78
CONSOLE_HEIGHT = 24

if CONSOLE_TYPE == 'curses':
    from solent.console.curses import curses_async_get_keycode


class CogTcpClient:
    def __init__(self, cog_h, orb, engine):
        self.cog_h = cog_h
        self.orb = orb
        self.engine = engine
コード例 #15
0
def _sanitise_key(k):
    if k in (127, curses.KEY_BACKSPACE, curses.KEY_DC):
        k = solent_keycode('backspace')
    return k