update
This commit is contained in:
parent
15446ee884
commit
80f1cd801f
225
src/main.rs
225
src/main.rs
|
|
@ -1,9 +1,6 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use twmap::{
|
||||
CompressedData, FrontLayer, GameLayer, Layer, Load, PhysicsLayer, QuadsLayer, SpeedupLayer,
|
||||
SwitchLayer, TeleLayer, TilemapLayer, TilesLayer, TuneLayer, TwMap,
|
||||
};
|
||||
use twmap::TwMap;
|
||||
|
||||
use clap::Parser;
|
||||
|
||||
|
|
@ -13,230 +10,12 @@ struct Args {
|
|||
out_map: PathBuf,
|
||||
}
|
||||
|
||||
fn copy_layer<T: PhysicsLayer>(src: &mut TwMap, dst: &mut TwMap) -> Option<()> {
|
||||
let src_layer = src.find_physics_layer_mut::<T>()?.tiles_mut().unwrap_mut();
|
||||
let dst_layer = dst
|
||||
.find_physics_layer_mut::<T>()
|
||||
.unwrap()
|
||||
.tiles_mut()
|
||||
.unwrap_mut();
|
||||
|
||||
let width = src_layer.ncols();
|
||||
let height = src_layer.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_layer[[y, width - (1 + x)]] = src_layer[[y, x]];
|
||||
}
|
||||
}
|
||||
|
||||
Some(())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let Args { in_map, out_map } = Args::parse();
|
||||
let mut src_map = TwMap::parse_file(&in_map).expect("parsing failed");
|
||||
src_map.load().expect("loading failed");
|
||||
let mut dst_map = TwMap::parse_file(&in_map).expect("parsing failed");
|
||||
dst_map.load().expect("loading failed");
|
||||
|
||||
for g in 0..src_map.groups.len() {
|
||||
for l in 0..src_map.groups[g].layers.len() {
|
||||
match (
|
||||
&mut src_map.groups[g].layers[l],
|
||||
&mut dst_map.groups[g].layers[l],
|
||||
) {
|
||||
(
|
||||
Layer::Game(GameLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
}),
|
||||
Layer::Game(GameLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Tiles(TilesLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Tiles(TilesLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Tele(TeleLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Tele(TeleLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Front(FrontLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Front(FrontLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Speedup(SpeedupLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Speedup(SpeedupLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Switch(SwitchLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Switch(SwitchLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
(
|
||||
Layer::Tune(TuneLayer {
|
||||
tiles: ref mut src_tiles,
|
||||
..
|
||||
}),
|
||||
Layer::Tune(TuneLayer {
|
||||
tiles: ref mut dst_tiles,
|
||||
..
|
||||
}),
|
||||
) => {
|
||||
src_tiles.load().unwrap();
|
||||
dst_tiles.load().unwrap();
|
||||
let CompressedData::Loaded(src_tiles) = &src_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let CompressedData::Loaded(ref mut dst_tiles) = dst_tiles else {
|
||||
unreachable!()
|
||||
};
|
||||
let width = src_tiles.ncols();
|
||||
let height = src_tiles.nrows();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
dst_tiles[[y, width - (1 + x)]] = src_tiles[[y, x]];
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
let mut dst_map = src_map.mirror().unwrap();
|
||||
|
||||
// save map
|
||||
println!("exporting map to {:?}", &out_map);
|
||||
|
|
|
|||
Loading…
Reference in New Issue