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 std::path::PathBuf;
|
||||||
|
|
||||||
use twmap::{
|
use twmap::TwMap;
|
||||||
CompressedData, FrontLayer, GameLayer, Layer, Load, PhysicsLayer, QuadsLayer, SpeedupLayer,
|
|
||||||
SwitchLayer, TeleLayer, TilemapLayer, TilesLayer, TuneLayer, TwMap,
|
|
||||||
};
|
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
|
||||||
|
|
@ -13,230 +10,12 @@ struct Args {
|
||||||
out_map: PathBuf,
|
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() {
|
fn main() {
|
||||||
let Args { in_map, out_map } = Args::parse();
|
let Args { in_map, out_map } = Args::parse();
|
||||||
let mut src_map = TwMap::parse_file(&in_map).expect("parsing failed");
|
let mut src_map = TwMap::parse_file(&in_map).expect("parsing failed");
|
||||||
src_map.load().expect("loading 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() {
|
let mut dst_map = src_map.mirror().unwrap();
|
||||||
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]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// save map
|
// save map
|
||||||
println!("exporting map to {:?}", &out_map);
|
println!("exporting map to {:?}", &out_map);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue