wip convert
This commit is contained in:
112
src/convert.rs
Normal file
112
src/convert.rs
Normal file
@@ -0,0 +1,112 @@
|
||||
use crate::v1 as latest;
|
||||
|
||||
pub fn from_v0(block_v0:&crate::v0::Block)->latest::Block{
|
||||
let input_events=block_v0.input_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:latest::InputEvent{
|
||||
game_controls:latest::GameControls::from_bits(event.event.game_controls.bits()).unwrap(),
|
||||
mouse_pos:latest::Vector2{x:event.event.mouse_pos.x,y:event.event.mouse_pos.y},
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let output_events=block_v0.output_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:latest::OutputEvent{
|
||||
tick_info:latest::TickInfo::from_bits(event.event.tick_info.bits()).unwrap(),
|
||||
angles:latest::Vector3{x:event.event.angles.x,y:event.event.angles.y,z:event.event.angles.z},
|
||||
position:latest::Vector3{x:event.event.position.x,y:event.event.position.y,z:event.event.position.z},
|
||||
velocity:latest::Vector3{x:event.event.velocity.x,y:event.event.velocity.y,z:event.event.velocity.z},
|
||||
acceleration:latest::Vector3{x:event.event.acceleration.x,y:event.event.acceleration.y,z:event.event.acceleration.z},
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let sound_events=block_v0.sound_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:latest::SoundEvent{
|
||||
sound_type:match event.event.sound_type{
|
||||
crate::v0::SoundType::TrackGround=>latest::SoundType::TrackGround,
|
||||
crate::v0::SoundType::TrackLadder=>latest::SoundType::TrackLadder,
|
||||
crate::v0::SoundType::TrackWater=>latest::SoundType::TrackWater,
|
||||
crate::v0::SoundType::TrackAir=>latest::SoundType::TrackAir,
|
||||
crate::v0::SoundType::JumpGround=>latest::SoundType::JumpGround,
|
||||
crate::v0::SoundType::JumpLadder=>latest::SoundType::JumpLadder,
|
||||
crate::v0::SoundType::SmashGround=>latest::SoundType::SmashGround,
|
||||
crate::v0::SoundType::SmashWall=>latest::SoundType::SmashWall,
|
||||
},
|
||||
material:event.event.material,
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let world_events=block_v0.world_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:match event.event{
|
||||
crate::v0::WorldEvent::Reset(world_event_reset)=>latest::WorldEvent::Reset(latest::WorldEventReset{
|
||||
position:latest::Vector3{x:world_event_reset.position.x,y:world_event_reset.position.y,z:world_event_reset.position.z},
|
||||
}),
|
||||
crate::v0::WorldEvent::Button(world_event_button)=>latest::WorldEvent::Button(latest::WorldEventButton{
|
||||
button_id:world_event_button.button_id,
|
||||
}),
|
||||
crate::v0::WorldEvent::SetTime(world_event_set_time)=>latest::WorldEvent::SetTime(latest::WorldEventSetTime{
|
||||
time:latest::Time::new(world_event_set_time.time).unwrap(),
|
||||
}),
|
||||
crate::v0::WorldEvent::SetPaused(world_event_set_paused)=>latest::WorldEvent::SetPaused(latest::WorldEventSetPaused{
|
||||
paused:world_event_set_paused.paused,
|
||||
}),
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let gravity_events=block_v0.gravity_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:latest::GravityEvent{
|
||||
gravity:latest::Vector3{x:event.event.gravity.x,y:event.event.gravity.y,z:event.event.gravity.z},
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
// need to generate a setting event for the style in RunPrepare
|
||||
let run_events=block_v0.run_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:match event.event{
|
||||
crate::v0::RunEvent::Prepare(run_event_prepare)=>todo!(),
|
||||
crate::v0::RunEvent::Start(run_event_zone)=>todo!(),
|
||||
crate::v0::RunEvent::Finish(run_event_zone)=>todo!(),
|
||||
crate::v0::RunEvent::Clear(run_event_clear)=>todo!(),
|
||||
crate::v0::RunEvent::Flag(run_event_flag)=>todo!(),
|
||||
crate::v0::RunEvent::LoadState(run_event_practice)=>todo!(),
|
||||
crate::v0::RunEvent::SaveState(run_event_practice)=>todo!(),
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let camera_events=block_v0.camera_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:match event.event{
|
||||
crate::v0::CameraEvent::CameraPunch(camera_event_camera_punch)=>todo!(),
|
||||
crate::v0::CameraEvent::Transform(camera_event_transform)=>todo!(),
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
let setting_events=block_v0.setting_events.iter().map(|event|{
|
||||
latest::Timed{
|
||||
time:latest::Time::new(event.time).unwrap(),
|
||||
event:match event.event{
|
||||
crate::v0::SettingEvent::(camera_event_camera_punch)=>todo!(),
|
||||
},
|
||||
}
|
||||
}).collect();
|
||||
latest::Block{
|
||||
input_events,
|
||||
output_events,
|
||||
sound_events,
|
||||
world_events,
|
||||
gravity_events,
|
||||
run_events,
|
||||
camera_events,
|
||||
setting_events,
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ pub use binrw::Error as BinrwError;
|
||||
|
||||
pub mod v0;
|
||||
pub mod v1;
|
||||
pub mod convert;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
Reference in New Issue
Block a user