CampBuddy/Camp.Buddy v2.2.1/Camp_Buddy-2.2.1-pc/renpy/display/emulator.py
2025-03-03 23:00:33 +01:00

178 lines
5 KiB
Python

# Copyright 2004-2019 Tom Rothamel <pytom@bishoujo.us>
#
# 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 contains code to emulate various other devices on the PC.
from __future__ import print_function
import renpy.display
import os
import pygame_sdl2 as pygame
# The function that's called to perform the emulation. This function has
# the signature of null_emulator.
emulator = None
# An overlay that is placed over the screen to support the emulator.
overlay = [ ]
# True if we're in ios mode, where we don't allow keys.
ios = False
def null_emulator(ev, x, y):
"""
This is used when emulation is not desired.
"""
return ev, x, y
TOUCH_KEYS = [ pygame.K_ESCAPE, pygame.K_PAGEUP ]
def touch_emulator(ev, x, y):
"""
This emulates an android touch-screen device, like a tablet or smartphone.
"""
if renpy.display.interface.text_rect:
return ev, x, y
if ev.type == pygame.MOUSEBUTTONDOWN:
if ev.button != 1:
return None, x, y
elif ev.type == pygame.MOUSEBUTTONUP:
if ev.button != 1:
return None, x, y
move = pygame.event.Event(pygame.MOUSEMOTION, { "pos" : (0, 0), "rel" : (0, 0), "buttons" : (0, 0, 0) })
renpy.display.interface.pushed_event = move
elif ev.type == pygame.MOUSEMOTION:
if not ev.buttons[0]:
x = 0
y = 0
elif ev.type == pygame.KEYDOWN and not ios:
if ev.mod & pygame.KMOD_SHIFT:
pass
elif not ev.key in TOUCH_KEYS:
return None, x, y
elif ev.type == pygame.KEYUP and not ios:
if ev.mod & pygame.KMOD_SHIFT:
pass
if not ev.key in TOUCH_KEYS:
return None, x, y
return ev, x, y
TV_KEYS = [ pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP, pygame.K_DOWN, pygame.K_RETURN, pygame.K_ESCAPE, pygame.K_PAGEUP ]
def tv_emulator(ev, x, y):
"""
This emulates a tv-based device, like the OUYA.
"""
if ev.type == pygame.MOUSEBUTTONDOWN:
return None, x, y
elif ev.type == pygame.MOUSEBUTTONUP:
return None, x, y
elif ev.type == pygame.MOUSEMOTION:
return None, x, y
elif ev.type == pygame.KEYDOWN:
if not ev.key in TV_KEYS:
return None, x, y
elif ev.type == pygame.KEYDOWN:
if not ev.key in TV_KEYS:
return None, x, y
return ev, x, y
keyboard = None
null = None
def dynamic_keyboard(st, at):
global keyboard
global null
if keyboard is None:
keyboard = renpy.store.Fixed(
renpy.store.Solid("#000", yalign=1.0, ymaximum=.625),
renpy.store.Text("On-Screen Keyboard", xalign=.5, yalign=.75),
)
null = renpy.store.Null()
if renpy.display.interface.old_text_rect:
rv = keyboard
else:
rv = null
return rv, .33
def init_emulator():
"""
Sets up the emulator.
"""
global emulator
global overlay
global ios
name = os.environ.get("RENPY_EMULATOR", "")
if name == "touch":
emulator = touch_emulator
overlay = [ renpy.store.DynamicDisplayable(dynamic_keyboard) ]
elif name == "ios-touch":
emulator = touch_emulator
overlay = [ renpy.store.DynamicDisplayable(dynamic_keyboard) ]
ios = True
elif name == "tv":
emulator = tv_emulator
overlay = [ renpy.display.motion.Transform(
"_tv_unsafe.png",
xalign=0.5,
yalign=0.5,
size=(int(renpy.config.screen_height * 16.0 / 9.0), renpy.config.screen_height),
) ]
else:
emulator = null_emulator
overlay = [ ]
if emulator is not null_emulator:
renpy.exports.windows = False
renpy.exports.linux = False
renpy.exports.macintosh = False
renpy.exports.web = False
renpy.exports.android = renpy.exports.variant("android")
renpy.exports.ios = renpy.exports.variant("ios")
renpy.exports.mobile = renpy.exports.android or renpy.exports.ios # @UndefinedVariable