This commit is contained in:
Steve Biedermann 2024-05-30 14:59:17 +02:00
parent 15446ee884
commit 80f1cd801f
1 changed files with 2 additions and 223 deletions

View File

@ -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);