From c0aae8ab52c30bf64abb6f4a1bd78f72f6280f47 Mon Sep 17 00:00:00 2001 From: Francis De Brabandere Date: Sun, 9 Jun 2024 19:05:34 +0200 Subject: [PATCH] fix: timer interval signed fixes #87 --- src/vpx/gameitem/flipper.rs | 8 ++++---- src/vpx/gameitem/gate.rs | 8 ++++---- src/vpx/gameitem/hittarget.rs | 12 ++++++------ src/vpx/gameitem/kicker.rs | 8 ++++---- src/vpx/gameitem/light.rs | 10 +++++----- src/vpx/gameitem/lightsequencer.rs | 8 ++++---- src/vpx/gameitem/plunger.rs | 8 ++++---- src/vpx/gameitem/ramp.rs | 8 ++++---- src/vpx/gameitem/reel.rs | 8 ++++---- src/vpx/gameitem/spinner.rs | 8 ++++---- src/vpx/gameitem/textbox.rs | 8 ++++---- src/vpx/gameitem/wall.rs | 8 ++++---- 12 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/vpx/gameitem/flipper.rs b/src/vpx/gameitem/flipper.rs index a08e6a2..ce85661 100644 --- a/src/vpx/gameitem/flipper.rs +++ b/src/vpx/gameitem/flipper.rs @@ -16,7 +16,7 @@ pub struct Flipper { override_physics: u32, mass: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, surface: String, material: String, pub name: String, @@ -65,7 +65,7 @@ pub(crate) struct FlipperJson { override_physics: u32, mass: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, surface: String, material: String, name: String, @@ -296,7 +296,7 @@ impl BiffRead for Flipper { flipper.is_timer_enabled = reader.get_bool(); } "TMIN" => { - flipper.timer_interval = reader.get_u32(); + flipper.timer_interval = reader.get_i32(); } "SURF" => { flipper.surface = reader.get_string(); @@ -410,7 +410,7 @@ impl BiffWrite for Flipper { writer.write_tagged_u32("OVRP", self.override_physics); writer.write_tagged_f32("FORC", self.mass); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_string("SURF", &self.surface); writer.write_tagged_string("MATR", &self.material); writer.write_tagged_wide_string("NAME", &self.name); diff --git a/src/vpx/gameitem/gate.rs b/src/vpx/gameitem/gate.rs index a5e99d6..60a32de 100644 --- a/src/vpx/gameitem/gate.rs +++ b/src/vpx/gameitem/gate.rs @@ -79,7 +79,7 @@ pub struct Gate { pub is_timer_enabled: bool, // 6 TMON pub show_bracket: bool, // 7 GSUP pub is_collidable: bool, // 8 GCOL - pub timer_interval: u32, // 9 TMIN + pub timer_interval: i32, // 9 TMIN pub imgf: Option, // IMGF (was in use in 10.01) pub imgb: Option, // IMGB (was in use in 10.01) pub surface: String, // 10 SURF @@ -147,7 +147,7 @@ pub(crate) struct GateJson { is_timer_enabled: bool, show_bracket: bool, is_collidable: bool, - timer_interval: u32, + timer_interval: i32, imgf: Option, imgb: Option, surface: String, @@ -285,7 +285,7 @@ impl BiffRead for Gate { gate.is_collidable = reader.get_bool(); } "TMIN" => { - gate.timer_interval = reader.get_u32(); + gate.timer_interval = reader.get_i32(); } "IMGF" => { gate.imgf = Some(reader.get_string()); @@ -368,7 +368,7 @@ impl BiffWrite for Gate { writer.write_tagged_bool("TMON", self.is_timer_enabled); writer.write_tagged_bool("GSUP", self.show_bracket); writer.write_tagged_bool("GCOL", self.is_collidable); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); if let Some(imgf) = &self.imgf { writer.write_tagged_string("IMGF", imgf); } diff --git a/src/vpx/gameitem/hittarget.rs b/src/vpx/gameitem/hittarget.rs index 0c81ebb..949519f 100644 --- a/src/vpx/gameitem/hittarget.rs +++ b/src/vpx/gameitem/hittarget.rs @@ -171,7 +171,7 @@ pub struct HitTarget { pub is_dropped: bool, pub drop_speed: f32, pub is_timer_enabled: bool, - pub timer_interval: u32, + pub timer_interval: i32, pub raise_delay: Option, // RADE (added in 10.?) pub physics_material: Option, @@ -212,7 +212,7 @@ impl Default for HitTarget { let is_dropped: bool = false; let drop_speed: f32 = 0.5; let is_timer_enabled: bool = false; - let timer_interval: u32 = 0; + let timer_interval: i32 = 0; let raise_delay: Option = None; //100; let physics_material: Option = None; let overwrite_physics: Option = None; //false; @@ -285,7 +285,7 @@ struct HitTargetJson { is_dropped: bool, drop_speed: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, raise_delay: Option, physics_material: Option, overwrite_physics: Option, @@ -412,7 +412,7 @@ impl BiffRead for HitTarget { let mut is_dropped: bool = false; let mut drop_speed: f32 = 0.5; let mut is_timer_enabled: bool = false; - let mut timer_interval: u32 = 0; + let mut timer_interval: i32 = 0; let mut raise_delay: Option = None; //100; let mut physics_material: Option = None; let mut overwrite_physics: Option = None; //false; @@ -503,7 +503,7 @@ impl BiffRead for HitTarget { "TMON" => { is_timer_enabled = reader.get_bool(); } - "TMIN" => timer_interval = reader.get_u32(), + "TMIN" => timer_interval = reader.get_i32(), "RADE" => raise_delay = Some(reader.get_u32()), "MAPH" => physics_material = Some(reader.get_string()), "OVPH" => overwrite_physics = Some(reader.get_bool()), @@ -600,7 +600,7 @@ impl BiffWrite for HitTarget { writer.write_tagged_bool("ISDR", self.is_dropped); writer.write_tagged_f32("DRSP", self.drop_speed); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); if let Some(raise_delay) = self.raise_delay { writer.write_tagged_u32("RADE", raise_delay); } diff --git a/src/vpx/gameitem/kicker.rs b/src/vpx/gameitem/kicker.rs index ffc5273..36b0146 100644 --- a/src/vpx/gameitem/kicker.rs +++ b/src/vpx/gameitem/kicker.rs @@ -135,7 +135,7 @@ pub struct Kicker { center: Vertex2D, radius: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, material: String, surface: String, is_enabled: bool, @@ -161,7 +161,7 @@ struct KickerJson { center: Vertex2D, radius: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, material: String, surface: String, is_enabled: bool, @@ -292,7 +292,7 @@ impl BiffRead for Kicker { kicker.is_timer_enabled = reader.get_bool(); } "TMIN" => { - kicker.timer_interval = reader.get_u32(); + kicker.timer_interval = reader.get_i32(); } "MATR" => { kicker.material = reader.get_string(); @@ -360,7 +360,7 @@ impl BiffWrite for Kicker { writer.write_tagged("VCEN", &self.center); writer.write_tagged_f32("RADI", self.radius); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_string("MATR", &self.material); writer.write_tagged_string("SURF", &self.surface); writer.write_tagged_bool("EBLD", self.is_enabled); diff --git a/src/vpx/gameitem/light.rs b/src/vpx/gameitem/light.rs index 35a8f93..e27ca0c 100644 --- a/src/vpx/gameitem/light.rs +++ b/src/vpx/gameitem/light.rs @@ -203,7 +203,7 @@ pub struct Light { pub color: Color, // COLR pub color2: Color, // COL2 pub is_timer_enabled: bool, // TMON - pub timer_interval: u32, // TMIN + pub timer_interval: i32, // TMIN pub blink_pattern: String, // BPAT pub off_image: String, // IMG1 pub blink_interval: u32, // BINT @@ -248,7 +248,7 @@ struct LightJson { color: Color, color2: Color, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, blink_pattern: String, off_image: String, blink_interval: u32, @@ -394,7 +394,7 @@ impl Default for Light { // Default to 2700K incandescent bulb (burst is useless since VPX is HDR) let color2: Color = Color::rgb(255, 169, 87); let is_timer_enabled: bool = false; - let timer_interval: u32 = Default::default(); + let timer_interval: i32 = Default::default(); let blink_pattern: String = "10".to_owned(); let off_image: String = Default::default(); let blink_interval: u32 = Default::default(); @@ -484,7 +484,7 @@ impl BiffRead for Light { "COLR" => light.color = Color::biff_read(reader), "COL2" => light.color2 = Color::biff_read(reader), "TMON" => light.is_timer_enabled = reader.get_bool(), - "TMIN" => light.timer_interval = reader.get_u32(), + "TMIN" => light.timer_interval = reader.get_i32(), "BPAT" => light.blink_pattern = reader.get_string(), "IMG1" => light.off_image = reader.get_string(), "BINT" => light.blink_interval = reader.get_u32(), @@ -548,7 +548,7 @@ impl BiffWrite for Light { writer.write_tagged_with("COLR", &self.color, Color::biff_write); writer.write_tagged_with("COL2", &self.color2, Color::biff_write); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_string("BPAT", &self.blink_pattern); writer.write_tagged_string("IMG1", &self.off_image); writer.write_tagged_u32("BINT", self.blink_interval); diff --git a/src/vpx/gameitem/lightsequencer.rs b/src/vpx/gameitem/lightsequencer.rs index 10ed794..84d84c4 100644 --- a/src/vpx/gameitem/lightsequencer.rs +++ b/src/vpx/gameitem/lightsequencer.rs @@ -12,7 +12,7 @@ pub struct LightSequencer { pos_y: f32, update_interval: u32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, pub name: String, backglass: bool, @@ -34,7 +34,7 @@ struct LightSequencerJson { pos_y: f32, update_interval: u32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, name: String, backglass: bool, } @@ -145,7 +145,7 @@ impl BiffRead for LightSequencer { light_sequencer.is_timer_enabled = reader.get_bool(); } "TMIN" => { - light_sequencer.timer_interval = reader.get_u32(); + light_sequencer.timer_interval = reader.get_i32(); } "NAME" => { light_sequencer.name = reader.get_wide_string(); @@ -189,7 +189,7 @@ impl BiffWrite for LightSequencer { writer.write_tagged_f32("CTRY", self.pos_y); writer.write_tagged_u32("UPTM", self.update_interval); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_wide_string("NAME", &self.name); writer.write_tagged_bool("BGLS", self.backglass); diff --git a/src/vpx/gameitem/plunger.rs b/src/vpx/gameitem/plunger.rs index e91a0f2..b2425c5 100644 --- a/src/vpx/gameitem/plunger.rs +++ b/src/vpx/gameitem/plunger.rs @@ -126,7 +126,7 @@ pub struct Plunger { scatter_velocity: f32, momentum_xfer: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, is_visible: bool, is_reflection_enabled: Option, // REEN (was missing in 10.01) surface: String, @@ -213,7 +213,7 @@ struct PlungerJson { scatter_velocity: f32, momentum_xfer: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, is_visible: bool, is_reflection_enabled: Option, surface: String, @@ -402,7 +402,7 @@ impl BiffRead for Plunger { plunger.is_timer_enabled = reader.get_bool(); } "TMIN" => { - plunger.timer_interval = reader.get_u32(); + plunger.timer_interval = reader.get_i32(); } "VSBL" => { plunger.is_visible = reader.get_bool(); @@ -491,7 +491,7 @@ impl BiffWrite for Plunger { writer.write_tagged_f32("PSCV", self.scatter_velocity); writer.write_tagged_f32("MOMX", self.momentum_xfer); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_bool("VSBL", self.is_visible); if let Some(is_reflection_enabled) = self.is_reflection_enabled { writer.write_tagged_bool("REEN", is_reflection_enabled); diff --git a/src/vpx/gameitem/ramp.rs b/src/vpx/gameitem/ramp.rs index 7f75059..8e35569 100644 --- a/src/vpx/gameitem/ramp.rs +++ b/src/vpx/gameitem/ramp.rs @@ -131,7 +131,7 @@ pub struct Ramp { pub width_top: f32, // 4 pub material: String, // 5 pub is_timer_enabled: bool, // 6 - pub timer_interval: u32, // 7 + pub timer_interval: i32, // 7 pub ramp_type: RampType, // TYPE 8 pub name: String, // 9 pub image: String, // 10 @@ -174,7 +174,7 @@ struct RampJson { width_top: f32, material: String, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, ramp_type: RampType, name: String, image: String, @@ -375,7 +375,7 @@ impl BiffRead for Ramp { ramp.is_timer_enabled = reader.get_bool(); } "TMIN" => { - ramp.timer_interval = reader.get_u32(); + ramp.timer_interval = reader.get_i32(); } "TYPE" => { ramp.ramp_type = reader.get_u32().into(); @@ -489,7 +489,7 @@ impl BiffWrite for Ramp { writer.write_tagged_f32("WDTP", self.width_top); writer.write_tagged_string("MATR", &self.material); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_u32("TYPE", (&self.ramp_type).into()); writer.write_tagged_wide_string("NAME", &self.name); writer.write_tagged_string("IMAG", &self.image); diff --git a/src/vpx/gameitem/reel.rs b/src/vpx/gameitem/reel.rs index 2a60bc4..944adb6 100644 --- a/src/vpx/gameitem/reel.rs +++ b/src/vpx/gameitem/reel.rs @@ -13,7 +13,7 @@ pub struct Reel { ver2: Vertex2D, // position on map (top right corner) back_color: Color, // colour of the background is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, is_transparent: bool, // is the background transparent image: String, sound: String, // sound to play for each turn of a digit @@ -44,7 +44,7 @@ struct ReelJson { ver2: Vertex2D, back_color: Color, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, is_transparent: bool, image: String, sound: String, @@ -192,7 +192,7 @@ impl BiffRead for Reel { reel.is_timer_enabled = reader.get_bool(); } "TMIN" => { - reel.timer_interval = reader.get_u32(); + reel.timer_interval = reader.get_i32(); } "TRNS" => { reel.is_transparent = reader.get_bool(); @@ -270,7 +270,7 @@ impl BiffWrite for Reel { writer.write_tagged("VER2", &self.ver2); writer.write_tagged_with("CLRB", &self.back_color, Color::biff_write); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_bool("TRNS", self.is_transparent); writer.write_tagged_string("IMAG", &self.image); writer.write_tagged_string("SOUN", &self.sound); diff --git a/src/vpx/gameitem/spinner.rs b/src/vpx/gameitem/spinner.rs index 858510c..e637e4e 100644 --- a/src/vpx/gameitem/spinner.rs +++ b/src/vpx/gameitem/spinner.rs @@ -9,7 +9,7 @@ pub struct Spinner { center: Vertex2D, rotation: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, height: f32, length: f32, damping: f32, @@ -37,7 +37,7 @@ struct SpinnerJson { center: Vertex2D, rotation: f32, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, height: f32, length: f32, damping: f32, @@ -175,7 +175,7 @@ impl BiffRead for Spinner { spinner.is_timer_enabled = reader.get_bool(); } "TMIN" => { - spinner.timer_interval = reader.get_u32(); + spinner.timer_interval = reader.get_i32(); } "HIGH" => { spinner.height = reader.get_f32(); @@ -248,7 +248,7 @@ impl BiffWrite for Spinner { writer.write_tagged("VCEN", &self.center); writer.write_tagged_f32("ROTA", self.rotation); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_f32("HIGH", self.height); writer.write_tagged_f32("LGTH", self.length); writer.write_tagged_f32("AFRC", self.damping); diff --git a/src/vpx/gameitem/textbox.rs b/src/vpx/gameitem/textbox.rs index 3a3c4f9..7d6e99f 100644 --- a/src/vpx/gameitem/textbox.rs +++ b/src/vpx/gameitem/textbox.rs @@ -112,7 +112,7 @@ pub struct TextBox { intensity_scale: f32, // INSC text: String, // TEXT is_timer_enabled: bool, // TMON - timer_interval: u32, // TMIN + timer_interval: i32, // TMIN pub name: String, // NAME align: TextAlignment, // ALGN is_transparent: bool, // TRNS @@ -138,7 +138,7 @@ struct TextBoxJson { intensity_scale: f32, text: String, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, name: String, align: TextAlignment, is_transparent: bool, @@ -269,7 +269,7 @@ impl BiffRead for TextBox { textbox.is_timer_enabled = reader.get_bool(); } "TMIN" => { - textbox.timer_interval = reader.get_u32(); + textbox.timer_interval = reader.get_i32(); } "NAME" => { textbox.name = reader.get_wide_string(); @@ -323,7 +323,7 @@ impl BiffWrite for TextBox { writer.write_tagged_f32("INSC", self.intensity_scale); writer.write_tagged_string("TEXT", &self.text); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_wide_string("NAME", &self.name); writer.write_tagged_u32("ALGN", (&self.align).into()); writer.write_tagged_bool("TRNS", self.is_transparent); diff --git a/src/vpx/gameitem/wall.rs b/src/vpx/gameitem/wall.rs index 1f02ab3..e969fe0 100644 --- a/src/vpx/gameitem/wall.rs +++ b/src/vpx/gameitem/wall.rs @@ -15,7 +15,7 @@ pub struct Wall { pub is_bottom_solid: bool, pub is_collidable: bool, pub is_timer_enabled: bool, - pub timer_interval: u32, + pub timer_interval: i32, pub threshold: f32, pub image: String, pub side_image: String, @@ -60,7 +60,7 @@ struct WallJson { is_bottom_solid: bool, is_collidable: bool, is_timer_enabled: bool, - timer_interval: u32, + timer_interval: i32, threshold: f32, image: String, side_image: String, @@ -335,7 +335,7 @@ impl BiffRead for Wall { wall.is_timer_enabled = reader.get_bool(); } "TMIN" => { - wall.timer_interval = reader.get_u32(); + wall.timer_interval = reader.get_i32(); } "PMAT" => { wall.physics_material = Some(reader.get_string()); @@ -447,7 +447,7 @@ impl BiffWrite for Wall { writer.write_tagged_bool("ISBS", self.is_bottom_solid); writer.write_tagged_bool("CLDW", self.is_collidable); writer.write_tagged_bool("TMON", self.is_timer_enabled); - writer.write_tagged_u32("TMIN", self.timer_interval); + writer.write_tagged_i32("TMIN", self.timer_interval); writer.write_tagged_f32("THRS", self.threshold); writer.write_tagged_string("IMAG", &self.image); writer.write_tagged_string("SIMG", &self.side_image);