def call_int(function, *args): """ Calls a method on `function`. """ return emscripten.run_script_int("renpyAudio.{}.apply(null, {});".format( function, dumps(args)))
def queue_depth(channel): """ Returns the queue depth of the channel. 0 if no file is playing, 1 if a files is playing but there is no queued file, and 2 if a file is playing and one is queued. """ return emscripten.run_script_int("renpyAudio.queue_depth({})".format(channel))
def choose_variants(): if "RENPY_VARIANT" in os.environ: renpy.config.variants = list( os.environ["RENPY_VARIANT"].split()) + [None] return renpy.config.variants = [None] if renpy.android: # @UndefinedVariable renpy.config.variants.insert(0, 'mobile') renpy.config.variants.insert(0, 'android') import android # @UnresolvedImport import math import pygame_sdl2 as pygame from jnius import autoclass # @UnresolvedImport # Manufacturer/Model-specific variants. try: Build = autoclass("android.os.Build") manufacturer = Build.MANUFACTURER model = Build.MODEL print("Manufacturer", manufacturer, "model", model) if manufacturer == "Amazon" and model.startswith("AFT"): print("Running on a Fire TV.") renpy.config.variants.insert(0, "firetv") except: pass # Are we running on OUYA or Google TV or something similar? package_manager = android.activity.getPackageManager() if package_manager.hasSystemFeature( "android.hardware.type.television"): print("Running on a television.") renpy.config.variants.insert(0, "tv") renpy.config.variants.insert(0, "small") return # Otherwise, a phone or tablet. renpy.config.variants.insert(0, 'touch') pygame.display.init() info = renpy.display.get_info() diag = math.hypot(info.current_w, info.current_h) / android.get_dpi() print("Screen diagonal is", diag, "inches.") if diag >= 6: renpy.config.variants.insert(0, 'tablet') renpy.config.variants.insert(0, 'medium') else: renpy.config.variants.insert(0, 'phone') renpy.config.variants.insert(0, 'small') elif renpy.ios: renpy.config.variants.insert(0, 'mobile') renpy.config.variants.insert(0, 'ios') renpy.config.variants.insert(0, 'touch') from pyobjus import autoclass # @UnresolvedImport @Reimport UIDevice = autoclass("UIDevice") idiom = UIDevice.currentDevice().userInterfaceIdiom print("iOS device idiom", idiom) # idiom 0 is iPhone, 1 is iPad. We assume any bigger idiom will # be tablet-like. if idiom >= 1: renpy.config.variants.insert(0, 'tablet') renpy.config.variants.insert(0, 'medium') else: renpy.config.variants.insert(0, 'phone') renpy.config.variants.insert(0, 'small') elif renpy.emscripten: import emscripten import re # web renpy.config.variants.insert(0, 'web') # mobile userAgent = emscripten.run_script_string(r'''navigator.userAgent''') mobile = re.search('Mobile|Android|iPad|iPhone', userAgent) if mobile: renpy.config.variants.insert(0, 'mobile') # Reserve android/ios for when the OS API is exposed # if re.search('Android', userAgent): # renpy.config.variants.insert(0, 'android') # if re.search('iPad|iPhone', userAgent): # renpy.config.variants.insert(0, 'ios') # touch touch = emscripten.run_script_int(r''' ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)''') if touch == 1: # mitigate hybrids (e.g. ms surface) by restricting touch to mobile if mobile: renpy.config.variants.insert(0, 'touch') # large/medium/small # tablet/phone # screen.width/height is auto-adjusted by browser, # so it can be used as a physical sizereference # (see also window.devicePixelRatio) # e.g. Galaxy S5: # - physical / OpenGL: 1080x1920 # - web screen: 360x640 w/ devicePixelRatio=3 ref_width = emscripten.run_script_int(r'''screen.width''') ref_height = emscripten.run_script_int(r'''screen.height''') # medium reference point: ipad 1024x768, ipad pro 1336x1024 (browser "pixels") if mobile: if (ref_width < 768 or ref_height < 768): renpy.config.variants.insert(0, 'small') renpy.config.variants.insert(0, 'phone') else: renpy.config.variants.insert(0, 'medium') renpy.config.variants.insert(0, 'tablet') else: renpy.config.variants.insert(0, 'large') else: renpy.config.variants.insert(0, 'pc') renpy.config.variants.insert(0, 'large')
def readyState(self): return emscripten.run_script_int(r'''RenPyWeb.dl_get({}).readyState'''.format(self.id))
def __init__(self, filename): url = 'game/' + filename self.id = emscripten.run_script_int( r'''RenPyWeb.dl_new({})'''.format(json.dumps(url)))
def status(self): return emscripten.run_script_int(r'''RenPyWeb.dl_get({}).status'''.format(self.id))