generated from Justintime50/python-template
-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
285 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,285 @@ | ||
from collections.abc import Mapping, Callable | ||
from ctypes import c_uint, POINTER, c_bool, c_char_p, c_float | ||
|
||
from .dict import DictEnvironmentDriver | ||
from .defs import * | ||
from ..audio.callback import retro_audio_callback, retro_audio_buffer_status_callback | ||
from ..av.defs import retro_game_geometry, retro_system_av_info | ||
from ..camera import retro_camera_callback | ||
from ..content.defs import retro_subsystem_info, retro_game_info_ext, retro_system_content_info_override | ||
from ..disk import retro_disk_control_callback, retro_disk_control_ext_callback | ||
from ..input.info import retro_controller_info, retro_input_descriptor | ||
from ..input.keyboard import retro_keyboard_callback | ||
from ..led import retro_led_interface | ||
from ..location import retro_location_callback | ||
from ..log import retro_log_callback | ||
from ..memory import retro_memory_map | ||
from ..message import retro_message, retro_message_ext | ||
from ..microphone import retro_microphone_interface | ||
from ..midi import retro_midi_interface | ||
from ..netpacket import retro_netpacket_callback | ||
from ..options import * | ||
from ..perf import retro_perf_callback | ||
from ..power import retro_device_power | ||
from ..proc import retro_get_proc_address_interface | ||
from ..rumble import retro_rumble_interface | ||
from ..sensor import retro_sensor_interface | ||
from ..throttle import retro_throttle_state, retro_fastforwarding_override | ||
from ..vfs import retro_vfs_interface_info | ||
from ..video.defs import * | ||
from ..video.render.defs import * | ||
from ..video.context.defs import * | ||
from ..video.negotiate.defs import * | ||
from ...h import * | ||
|
||
|
||
class DefaultEnvironmentDriver(DictEnvironmentDriver): | ||
def __init__(self): | ||
envcalls: Mapping[EnvironmentCall, Callable[[c_void_p], bool]] = { | ||
EnvironmentCall.SET_ROTATION: lambda data: | ||
self.set_rotation(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.GET_OVERSCAN: lambda data: | ||
self.get_overscan(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.GET_CAN_DUPE: lambda data: | ||
self.get_can_dupe(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.SET_MESSAGE: lambda data: | ||
self.set_message(cast(data, POINTER(retro_message))), | ||
|
||
EnvironmentCall.SHUTDOWN: lambda _: | ||
self.shutdown(), | ||
|
||
EnvironmentCall.SET_PERFORMANCE_LEVEL: lambda data: | ||
self.set_performance_level(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.GET_SYSTEM_DIRECTORY: lambda data: | ||
self.get_system_directory(cast(data, POINTER(c_char_p))), | ||
|
||
EnvironmentCall.SET_PIXEL_FORMAT: lambda data: | ||
self.set_pixel_format(cast(data, POINTER(retro_pixel_format))), | ||
|
||
EnvironmentCall.SET_INPUT_DESCRIPTORS: lambda data: | ||
self.set_input_descriptors(cast(data, POINTER(retro_input_descriptor))), | ||
|
||
EnvironmentCall.SET_KEYBOARD_CALLBACK: lambda data: | ||
self.set_keyboard_callback(cast(data, POINTER(retro_keyboard_callback))), | ||
|
||
EnvironmentCall.SET_DISK_CONTROL_INTERFACE: lambda data: | ||
self.set_disk_control_interface(cast(data, POINTER(retro_disk_control_callback))), | ||
|
||
EnvironmentCall.SET_HW_RENDER: lambda data: | ||
self.set_hw_render(cast(data, POINTER(retro_hw_render_callback))), | ||
|
||
EnvironmentCall.GET_VARIABLE: lambda data: | ||
self.get_variable(cast(data, POINTER(retro_variable))), | ||
|
||
EnvironmentCall.SET_VARIABLES: lambda data: | ||
self.set_variables(cast(data, POINTER(retro_variable))), | ||
|
||
EnvironmentCall.GET_VARIABLE_UPDATE: lambda data: | ||
self.get_variable_update(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.SET_SUPPORT_NO_GAME: lambda data: | ||
self.set_support_no_game(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.GET_LIBRETRO_PATH: lambda data: | ||
self.get_libretro_path(cast(data, POINTER(c_char_p))), | ||
|
||
EnvironmentCall.SET_FRAME_TIME_CALLBACK: lambda data: | ||
self.set_frame_time_callback(cast(data, POINTER(retro_frame_time_callback))), | ||
|
||
EnvironmentCall.SET_AUDIO_CALLBACK: lambda data: | ||
self.set_audio_callback(cast(data, POINTER(retro_audio_callback))), | ||
|
||
EnvironmentCall.GET_RUMBLE_INTERFACE: lambda data: | ||
self.get_rumble_interface(cast(data, POINTER(retro_rumble_interface))), | ||
|
||
EnvironmentCall.GET_INPUT_DEVICE_CAPABILITIES: lambda data: | ||
self.get_input_device_capabilites(cast(data, POINTER(c_uint64))), | ||
|
||
EnvironmentCall.GET_SENSOR_INTERFACE: lambda data: | ||
self.get_sensor_interface(cast(data, POINTER(retro_sensor_interface))), | ||
|
||
EnvironmentCall.GET_CAMERA_INTERFACE: lambda data: | ||
self.get_camera_interface(cast(data, POINTER(retro_camera_callback))), | ||
|
||
EnvironmentCall.GET_LOG_INTERFACE: lambda data: | ||
self.get_log_interface(cast(data, POINTER(retro_log_callback))), | ||
|
||
EnvironmentCall.GET_PERF_INTERFACE: lambda data: | ||
self.get_perf_interface(cast(data, POINTER(retro_perf_callback))), | ||
|
||
EnvironmentCall.GET_LOCATION_INTERFACE: lambda data: | ||
self.get_location_interface(cast(data, POINTER(retro_location_callback))), | ||
|
||
EnvironmentCall.GET_CORE_ASSETS_DIRECTORY: lambda data: | ||
self.get_core_assets_directory(cast(data, POINTER(c_char_p))), | ||
|
||
EnvironmentCall.GET_SAVE_DIRECTORY: lambda data: | ||
self.get_save_directory(cast(data, POINTER(c_char_p))), | ||
|
||
EnvironmentCall.SET_SYSTEM_AV_INFO: lambda data: | ||
self.set_system_av_info(cast(data, POINTER(retro_system_av_info))), | ||
|
||
EnvironmentCall.SET_PROC_ADDRESS_CALLBACK: lambda data: | ||
self.set_proc_address_callback(cast(data, POINTER(retro_get_proc_address_interface))), | ||
|
||
EnvironmentCall.SET_SUBSYSTEM_INFO: lambda data: | ||
self.set_subsystem_info(cast(data, POINTER(retro_subsystem_info))), | ||
|
||
EnvironmentCall.SET_CONTROLLER_INFO: lambda data: | ||
self.set_controller_info(cast(data, POINTER(retro_controller_info))), | ||
|
||
EnvironmentCall.SET_MEMORY_MAPS: lambda data: | ||
self.set_memory_maps(cast(data, POINTER(retro_memory_map))), | ||
|
||
EnvironmentCall.SET_GEOMETRY: lambda data: | ||
self.set_geometry(cast(data, POINTER(retro_game_geometry))), | ||
|
||
EnvironmentCall.GET_USERNAME: lambda data: | ||
self.get_username(cast(data, POINTER(c_char_p))), | ||
|
||
EnvironmentCall.GET_LANGUAGE: lambda data: | ||
self.get_language(cast(data, POINTER(retro_language))), | ||
|
||
EnvironmentCall.GET_CURRENT_SOFTWARE_FRAMEBUFFER: lambda data: | ||
self.get_current_software_framebuffer(cast(data, POINTER(retro_framebuffer))), | ||
|
||
EnvironmentCall.GET_HW_RENDER_INTERFACE: lambda data: | ||
self.get_hw_render_interface(cast(data, POINTER(retro_hw_render_interface))), | ||
|
||
EnvironmentCall.SET_SUPPORT_ACHIEVEMENTS: lambda data: | ||
self.set_support_achievements(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE: lambda data: | ||
self.set_hw_render_context_negotiation_interface( | ||
cast(data, POINTER(retro_hw_render_context_negotiation_interface)) | ||
), | ||
|
||
EnvironmentCall.SET_SERIALIZATION_QUIRKS: lambda data: | ||
self.set_serialization_quirks(cast(data, POINTER(c_uint64))), | ||
|
||
EnvironmentCall.SET_HW_SHARED_CONTEXT: lambda _: | ||
self.set_hw_shared_context(), | ||
|
||
EnvironmentCall.GET_VFS_INTERFACE: lambda data: | ||
self.get_vfs_interface(cast(data, POINTER(retro_vfs_interface_info))), | ||
|
||
EnvironmentCall.GET_LED_INTERFACE: lambda data: | ||
self.get_led_interface(cast(data, POINTER(retro_led_interface))), | ||
|
||
EnvironmentCall.GET_AUDIO_VIDEO_ENABLE: lambda data: | ||
self.get_audio_video_enable(cast(data, POINTER(retro_av_enable_flags))), | ||
|
||
EnvironmentCall.GET_MIDI_INTERFACE: lambda data: | ||
self.get_midi_interface(cast(data, POINTER(retro_midi_interface))), | ||
|
||
EnvironmentCall.GET_FASTFORWARDING: lambda data: | ||
self.get_fastforwarding(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.GET_TARGET_REFRESH_RATE: lambda data: | ||
self.get_target_refresh_rate(cast(data, POINTER(c_float))), | ||
|
||
EnvironmentCall.GET_INPUT_BITMASKS: lambda _: | ||
self.get_input_bitmasks(), | ||
|
||
EnvironmentCall.GET_CORE_OPTIONS_VERSION: lambda data: | ||
self.get_core_options_version(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS: lambda data: | ||
self.set_core_options(cast(data, POINTER(retro_core_option_definition))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS_INTL: lambda data: | ||
self.set_core_options_intl(cast(data, POINTER(retro_core_options_intl))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS_DISPLAY: lambda data: | ||
self.set_core_options_display(cast(data, POINTER(retro_core_option_display))), | ||
|
||
EnvironmentCall.GET_PREFERRED_HW_RENDER: lambda data: | ||
self.get_preferred_hw_render(cast(data, POINTER(retro_hw_context_type))), | ||
|
||
EnvironmentCall.GET_DISK_CONTROL_INTERFACE_VERSION: lambda data: | ||
self.get_disk_control_interface_version(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.SET_DISK_CONTROL_EXT_INTERFACE: lambda data: | ||
self.set_disk_control_ext_interface(cast(data, POINTER(retro_disk_control_ext_callback))), | ||
|
||
EnvironmentCall.GET_MESSAGE_INTERFACE_VERSION: lambda data: | ||
self.get_message_interface_version(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.SET_MESSAGE_EXT: lambda data: | ||
self.set_message_ext(cast(data, POINTER(retro_message_ext))), | ||
|
||
EnvironmentCall.GET_INPUT_MAX_USERS: lambda data: | ||
self.get_input_max_users(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.SET_AUDIO_BUFFER_STATUS_CALLBACK: lambda data: | ||
self.set_audio_buffer_status_callback(cast(data, POINTER(retro_audio_buffer_status_callback))), | ||
|
||
EnvironmentCall.SET_MINIMUM_AUDIO_LATENCY: lambda data: | ||
self.set_minimum_audio_latency(cast(data, POINTER(c_uint))), | ||
|
||
EnvironmentCall.SET_FASTFORWARDING_OVERRIDE: lambda data: | ||
self.set_fastforwarding_override(cast(data, POINTER(retro_fastforwarding_override))), | ||
|
||
EnvironmentCall.SET_CONTENT_INFO_OVERRIDE: lambda data: | ||
self.set_content_info_override(cast(data, POINTER(retro_system_content_info_override))), | ||
|
||
EnvironmentCall.GET_GAME_INFO_EXT: lambda data: | ||
self.get_game_info_ext(cast(data, POINTER(retro_game_info_ext))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS_V2: lambda data: | ||
self.set_core_options_v2(cast(data, POINTER(retro_core_options_v2))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS_V2_INTL: lambda data: | ||
self.set_core_options_v2_intl(cast(data, POINTER(retro_core_options_v2_intl))), | ||
|
||
EnvironmentCall.SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK: lambda data: | ||
self.set_core_options_update_display_callback( | ||
cast(data, POINTER(retro_core_options_update_display_callback)) | ||
), | ||
|
||
EnvironmentCall.SET_VARIABLE: lambda data: | ||
self.set_variable(cast(data, POINTER(retro_variable))), | ||
|
||
EnvironmentCall.GET_THROTTLE_STATE: lambda data: | ||
self.get_throttle_state(cast(data, POINTER(retro_throttle_state))), | ||
|
||
EnvironmentCall.GET_SAVESTATE_CONTEXT: lambda data: | ||
self.get_savestate_context(cast(data, POINTER(retro_savestate_context))), | ||
|
||
EnvironmentCall.GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT: lambda data: | ||
self.get_hw_render_context_negotiation_interface_support( | ||
cast(data, POINTER(retro_hw_render_context_negotiation_interface)) | ||
), | ||
|
||
EnvironmentCall.GET_JIT_CAPABLE: lambda data: | ||
self.get_jit_capable(cast(data, POINTER(c_bool))), | ||
|
||
EnvironmentCall.GET_MICROPHONE_INTERFACE: lambda data: | ||
self.get_microphone_interface(cast(data, POINTER(retro_microphone_interface))), | ||
|
||
EnvironmentCall.GET_DEVICE_POWER: lambda data: | ||
self.get_device_power(cast(data, POINTER(retro_device_power))), | ||
|
||
EnvironmentCall.SET_NETPACKET_INTERFACE: lambda data: | ||
self.set_netpacket_interface(cast(data, POINTER(retro_netpacket_callback))), | ||
|
||
EnvironmentCall.GET_PLAYLIST_DIRECTORY: lambda data: | ||
self.get_playlist_directory(cast(data, POINTER(c_char_p))), | ||
} | ||
|
||
super().__init__(envcalls) | ||
|
||
def environment(self, cmd: int, data: c_void_p) -> bool: | ||
if cmd not in EnvironmentCall: | ||
return False | ||
|
||
envcall = EnvironmentCall(cmd) | ||
if envcall in self._envcalls: | ||
envfunc = self._envcalls[envcall] | ||
return envfunc(data) | ||
|
||
return False |