use crate::prelude::*;
use crate::wad::deserialize::reader::DataReader;
use crate::wad::elements::options::Constant;
use crate::wad::elements::options::Flags;
use crate::wad::elements::options::GMOptions;
use crate::wad::elements::texture_page_item::GMTexturePageItem;
use crate::wad::reference::GMRef;
use crate::wad::serialize::builder::DataBuilder;
pub fn parse(reader: &mut DataReader) -> Result<GMOptions> {
let flag_fullscreen = reader.read_bool32()?;
let flag_interpolate_pixels = reader.read_bool32()?;
let flag_use_new_audio = reader.read_bool32()?;
let flag_no_border = reader.read_bool32()?;
let flag_show_cursor = reader.read_bool32()?;
let scale = reader.read_i32()?;
let flag_sizeable = reader.read_bool32()?;
let flag_stay_on_top = reader.read_bool32()?;
let window_color = reader.read_u32()?;
let flag_change_resolution = reader.read_bool32()?;
let color_depth = reader.read_u32()?;
let resolution = reader.read_u32()?;
let frequency = reader.read_u32()?;
let flag_no_buttons = reader.read_bool32()?;
let vertex_sync = reader.read_i32()?;
let flag_screen_key = reader.read_bool32()?;
let flag_help_key = reader.read_bool32()?;
let flag_quit_key = reader.read_bool32()?;
let flag_save_key = reader.read_bool32()?;
let flag_screenshot_key = reader.read_bool32()?;
let flag_close_sec = reader.read_bool32()?;
let priority = reader.read_i32()?;
let flag_freeze = reader.read_bool32()?;
let flag_show_progress = reader.read_bool32()?;
let back_image: Option<GMRef<GMTexturePageItem>> = reader.read_gm_texture_opt()?;
let front_image: Option<GMRef<GMTexturePageItem>> = reader.read_gm_texture_opt()?;
let load_image: Option<GMRef<GMTexturePageItem>> = reader.read_gm_texture_opt()?;
let flag_load_transparent = reader.read_bool32()?;
let load_alpha = reader.read_u32()?;
let flag_scale_progress = reader.read_bool32()?;
let flag_display_errors = reader.read_bool32()?;
let flag_write_errors = reader.read_bool32()?;
let flag_abort_errors = reader.read_bool32()?;
let flag_variable_errors = reader.read_bool32()?;
let flag_creation_event_order = reader.read_bool32()?;
let constants: Vec<Constant> = reader.read_simple_list()?;
Ok(GMOptions {
is_new_format: false,
flags: Flags {
fullscreen: flag_fullscreen,
interpolate_pixels: flag_interpolate_pixels,
use_new_audio: flag_use_new_audio,
no_border: flag_no_border,
show_cursor: flag_show_cursor,
sizeable: flag_sizeable,
stay_on_top: flag_stay_on_top,
change_resolution: flag_change_resolution,
no_buttons: flag_no_buttons,
screen_key: flag_screen_key,
help_key: flag_help_key,
quit_key: flag_quit_key,
save_key: flag_save_key,
screenshot_key: flag_screenshot_key,
close_sec: flag_close_sec,
freeze: flag_freeze,
show_progress: flag_show_progress,
load_transparent: flag_load_transparent,
scale_progress: flag_scale_progress,
display_errors: flag_display_errors,
write_errors: flag_write_errors,
abort_errors: flag_abort_errors,
variable_errors: flag_variable_errors,
creation_event_order: flag_creation_event_order,
..Default::default()
},
window_scale: scale,
window_color,
color_depth,
resolution,
frequency,
vertex_sync,
priority,
back_image,
front_image,
load_image,
load_alpha,
constants,
exists: true,
})
}
pub fn build(builder: &mut DataBuilder, options: &GMOptions) {
builder.write_bool32(options.flags.fullscreen);
builder.write_bool32(options.flags.interpolate_pixels);
builder.write_bool32(options.flags.use_new_audio);
builder.write_bool32(options.flags.no_border);
builder.write_bool32(options.flags.show_cursor);
builder.write_i32(options.window_scale);
builder.write_bool32(options.flags.sizeable);
builder.write_bool32(options.flags.stay_on_top);
builder.write_u32(options.window_color);
builder.write_bool32(options.flags.change_resolution);
builder.write_u32(options.color_depth);
builder.write_u32(options.resolution);
builder.write_u32(options.frequency);
builder.write_bool32(options.flags.no_buttons);
builder.write_i32(options.vertex_sync);
builder.write_bool32(options.flags.screen_key);
builder.write_bool32(options.flags.help_key);
builder.write_bool32(options.flags.quit_key);
builder.write_bool32(options.flags.save_key);
builder.write_bool32(options.flags.screenshot_key);
builder.write_bool32(options.flags.close_sec);
builder.write_i32(options.priority);
builder.write_bool32(options.flags.freeze);
builder.write_bool32(options.flags.show_progress);
builder.write_pointer_opt(&options.back_image);
builder.write_pointer_opt(&options.front_image);
builder.write_pointer_opt(&options.load_image);
builder.write_bool32(options.flags.load_transparent);
builder.write_u32(options.load_alpha);
builder.write_bool32(options.flags.scale_progress);
builder.write_bool32(options.flags.display_errors);
builder.write_bool32(options.flags.write_errors);
builder.write_bool32(options.flags.abort_errors);
builder.write_bool32(options.flags.variable_errors);
builder.write_bool32(options.flags.creation_event_order);
}