From 718936110b9511631fa1f4396be992752bf8b719 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Thu, 22 Aug 2013 22:45:26 -0400 Subject: include renpy --- unrpyc/renpy/display/joystick.py | 126 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 unrpyc/renpy/display/joystick.py (limited to 'unrpyc/renpy/display/joystick.py') diff --git a/unrpyc/renpy/display/joystick.py b/unrpyc/renpy/display/joystick.py new file mode 100644 index 0000000..c606dd9 --- /dev/null +++ b/unrpyc/renpy/display/joystick.py @@ -0,0 +1,126 @@ +# Copyright 2004-2013 Tom Rothamel +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# This file is responsible for joystick support in Ren'Py. + +import os +import pygame + +import renpy.display + +# Do we have a joystick enabled? +enabled = False + +# The old states for each axis. +old_axis_states = { } + +def init(): + """ + Initialize the joystick system. + """ + + global enabled + + if not renpy.config.joystick: + return + + if 'RENPY_DISABLE_JOYSTICK' in os.environ: + return + + try: + pygame.joystick.init() + + for i in range(0, pygame.joystick.get_count()): + pygame.joystick.Joystick(i).init() + enabled = True + except: + if renpy.config.debug: + raise + +def event(ev): + + if not enabled: + return ev + + if ev.type == pygame.JOYAXISMOTION: + + if not renpy.display.interface.focused: + return None + + if ev.value >= 0.5: + state = "Positive" + elif ev.value <= -0.5: + state = "Negative" + else: + state = None + + oldstate = old_axis_states.get((ev.joy, ev.axis), None) + + if state == oldstate: + return None + + if oldstate: + release = "Axis %d.%d %s" % (ev.joy, ev.axis, oldstate) + else: + release = None + + old_axis_states[ev.joy, ev.axis] = state + + if state: + press = "Axis %d.%d %s" % (ev.joy, ev.axis, state) + else: + press = None + + if not press and not release: + return None + + return pygame.event.Event(renpy.display.core.JOYEVENT, + press=press, release=release) + + if ev.type == pygame.JOYBUTTONDOWN: + + if not renpy.display.interface.focused: + return None + + return pygame.event.Event(renpy.display.core.JOYEVENT, + press="Button %d.%d" % (ev.joy, ev.button), + release=None) + if ev.type == pygame.JOYBUTTONUP: + + if not renpy.display.interface.focused: + return None + + return pygame.event.Event(renpy.display.core.JOYEVENT, + press=None, + release="Button %d.%d" % (ev.joy, ev.button)) + + return ev + +class JoyBehavior(renpy.display.layout.Null): + """ + This is a behavior intended for joystick calibration. If a joystick + event occurs, this returns it as a string. + """ + + def event(self, ev, x, y, st): + if ev.type == renpy.display.core.JOYEVENT: + return ev.press + -- cgit v1.2.3-54-g00ecf