pce.rsannotatedpce.rssource39 lines · 1.5 KB · raw
1use jgenesis_proc_macros::deserialize_default_on_error;
2use pce_config::{PceAspectRatio, PceAudioResampler, PceInputDevice, PcePaletteType, PceRegion};
3use serde::{Deserialize, Serialize};
4use std::num::NonZeroU64;
5
6#[deserialize_default_on_error]
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(default)]
9pub struct PcEngineAppConfig {
10    pub region: PceRegion,
11    pub cpu_fast_clock_divider: NonZeroU64,
12    pub aspect_ratio: PceAspectRatio,
13    pub palette: PcePaletteType,
14    pub crop_overscan: bool,
15    pub remove_sprite_limits: bool,
16    pub audio_resampler: PceAudioResampler,
17    pub input_device: PceInputDevice,
18    pub turbo_tap_connected: [bool; pce_config::TURBO_TAP_GAMEPADS as usize],
19    pub allow_opposing_joypad_directions: bool,
20    pub allow_simultaneous_run_select: bool,
21}
22
23impl Default for PcEngineAppConfig {
24    fn default() -> Self {
25        Self {
26            region: PceRegion::default(),
27            cpu_fast_clock_divider: NonZeroU64::new(pce_config::NATIVE_FAST_CPU_DIVIDER).unwrap(),
28            aspect_ratio: PceAspectRatio::default(),
29            palette: PcePaletteType::default(),
30            crop_overscan: true,
31            remove_sprite_limits: false,
32            audio_resampler: PceAudioResampler::default(),
33            input_device: PceInputDevice::default(),
34            turbo_tap_connected: [true, true, false, false, false],
35            allow_opposing_joypad_directions: false,
36            allow_simultaneous_run_select: false,
37        }
38    }
39}