use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum PhysicsMod {
#[serde(rename = "gravity")]
Gravity(f32),
#[serde(rename = "jumpmult")]
JumpMult(f32),
#[serde(rename = "jumpforce")]
JumpForce(f32),
#[serde(rename = "bouncemult")]
BounceMult(f32),
#[serde(rename = "scalemult")]
ScaleMult(f32),
#[serde(rename = "massmult")]
MassMult(f32),
#[serde(rename = "frictionmult")]
FrictionMult(f32),
#[serde(rename = "blastjumpmult")]
BlastJumpMult(f32),
#[serde(rename = "blastpushmult")]
BlastPushMult(f32),
#[serde(rename = "blastrangemult")]
BlastRangeMult(f32),
#[serde(rename = "blastcooldownmult")]
BlastCooldownMult(f32),
#[serde(rename = "rollX")]
RollX(f32),
#[serde(rename = "rollY")]
RollY(f32),
#[serde(rename = "airX")]
AirX(f32),
#[serde(rename = "airY")]
AirY(f32),
#[serde(rename = "canblast")]
CanBlast(bool),
#[serde(rename = "airjumps")]
AirJumps(i32),
#[serde(rename = "nopowerups")]
NoPowerups(bool),
#[serde(rename = "reverse")]
Reverse(bool),
#[serde(rename = "checkpointgems")]
CheckpointGems(bool),
#[serde(rename = "nogems")]
NoGems(bool),
#[serde(rename = "notimetravel")]
NoTimeTravel(bool),
#[serde(rename = "trophygem")]
TrophyGem(bool),
#[serde(rename = "trophyend")]
TrophyEnd(bool),
#[serde(rename = "boomerang")]
Boomerang(bool),
#[serde(rename = "startpowerup")]
StartPowerup(String),
#[serde(rename = "replacepowerup")]
ReplacePowerup(String),
#[serde(rename = "platformspeed")]
PlatformSpeed(f32),
#[serde(rename = "blastX")]
BlastX(f32),
#[serde(rename = "blastY")]
BlastY(f32),
#[serde(rename = "impX")]
ImpactX(f32),
#[serde(rename = "impY")]
ImpactY(f32),
#[serde(rename = "usesounds")]
UseSounds(bool),
#[serde(rename = "megaforce")]
MegaForce(f32),
#[serde(rename = "fullshadow")]
FullShadow(bool),
#[serde(rename = "mpspawnoffset")]
MPSpawnOffset(bool),
}
impl PhysicsMod {
pub fn to_string(&self) -> String {
fn float_to_perct(f: &f32) -> String {
format!("{}%", f * 100.0)
}
match self {
PhysicsMod::Gravity(v) => format!("Gravity: {}", float_to_perct(v)),
PhysicsMod::JumpMult(v) => format!("Jump Height: {}", float_to_perct(v)),
PhysicsMod::JumpForce(v) => format!("Jump Force: {}", float_to_perct(v)),
PhysicsMod::BounceMult(v) => format!("Bounce Force: {}", float_to_perct(v)),
PhysicsMod::ScaleMult(v) => format!("Marble Size: {}", float_to_perct(v)),
PhysicsMod::MassMult(v) => format!("Mass: {}", float_to_perct(v)),
PhysicsMod::FrictionMult(v) => format!("Friction Force: {}", float_to_perct(v)),
PhysicsMod::BlastJumpMult(v) => format!("Blast Height: {}", float_to_perct(v)),
PhysicsMod::BlastPushMult(v) => format!("Blast Push: {}", float_to_perct(v)),
PhysicsMod::BlastRangeMult(v) => format!("Blast Range: {}", float_to_perct(v)),
PhysicsMod::BlastCooldownMult(v) => format!("Blast Cooldown: {}", float_to_perct(v)),
PhysicsMod::RollX(v) => format!("Roll Force X: {}", float_to_perct(v)),
PhysicsMod::RollY(v) => format!("Roll Force Y: {}", float_to_perct(v)),
PhysicsMod::AirX(v) => format!("Air Force X: {}", float_to_perct(v)),
PhysicsMod::AirY(v) => format!("Air Force Y: {}", float_to_perct(v)),
PhysicsMod::CanBlast(_) => String::from("Blast Available"),
PhysicsMod::AirJumps(v) => format!("Air Jumps: {}", v),
PhysicsMod::NoPowerups(_) => String::from("No Powerups"),
PhysicsMod::Reverse(_) => String::from("Level Reversed"),
PhysicsMod::CheckpointGems(_) => String::from("Checkpoints Add Gems"),
PhysicsMod::NoGems(_) => String::from("No Gems"),
PhysicsMod::NoTimeTravel(_) => String::from("No Time Travels"),
PhysicsMod::TrophyGem(_) => String::from("Trophy Adds Gem"),
PhysicsMod::TrophyEnd(_) => String::from("Trophy is Goal"),
PhysicsMod::Boomerang(_) => String::from("Boomerang"),
PhysicsMod::StartPowerup(v) => format!("Start With: {}", v),
PhysicsMod::ReplacePowerup(v) => format!("Replace Powerups: {}", v),
PhysicsMod::PlatformSpeed(v) => format!("Platform Speed: {}", float_to_perct(v)),
PhysicsMod::BlastX(v) => format!("Blast X: {}", float_to_perct(v)),
PhysicsMod::BlastY(v) => format!("Blast Y: {}", float_to_perct(v)),
PhysicsMod::ImpactX(v) => format!("Impact X: {}", float_to_perct(v)),
PhysicsMod::ImpactY(v) => format!("Impact Y: {}", float_to_perct(v)),
PhysicsMod::UseSounds(_) => format!("Use Sounds"),
PhysicsMod::MegaForce(v) => format!("Mega Force: {}", float_to_perct(v)),
PhysicsMod::FullShadow(_) => format!("Full Shadow"),
PhysicsMod::MPSpawnOffset(_) => format!("MP Spawn Offset"),
}
}
}