# HG changeset patch # User unC0Rr # Date 1733083683 -3600 # Node ID 5c941f5deeec67f0269696f196e06ebe79e116bc # Parent adb44a2d82262bbcc040621f47e3f8cdbfcaaa2f * Introduce concept of invizible walls to constrain outline map generation * Rework some templates to work better with new parameters in rust landgen diff -r adb44a2d8226 -r 5c941f5deeec rust/landgen/src/maze.rs --- a/rust/landgen/src/maze.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/landgen/src/maze.rs Sun Dec 01 21:08:03 2024 +0100 @@ -422,6 +422,7 @@ OutlinePoints { islands, + walls: vec![], fill_points, size: *size, play_box, @@ -454,7 +455,11 @@ ); if !parameters.skip_distort { - points.distort(parameters.distance_divisor, self.maze_template.distortion_limiting_factor, random_numbers); + points.distort( + parameters.distance_divisor, + self.maze_template.distortion_limiting_factor, + random_numbers, + ); } if !parameters.skip_bezier { diff -r adb44a2d8226 -r 5c941f5deeec rust/landgen/src/outline_template_based/outline.rs --- a/rust/landgen/src/outline_template_based/outline.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/landgen/src/outline_template_based/outline.rs Sun Dec 01 21:08:03 2024 +0100 @@ -8,6 +8,7 @@ pub struct OutlinePoints { pub islands: Vec, + pub walls: Vec, pub fill_points: Vec, pub size: Size, pub play_box: Rect, @@ -37,6 +38,19 @@ .into() }) .collect(), + walls: outline_template + .walls + .iter() + .map(|i| { + i.iter() + .zip(random_numbers.tuples()) + .map(|(rect, (rnd_a, rnd_b))| { + play_box.top_left() + rect.quotient(rnd_a as usize, rnd_b as usize) + }) + .collect::>() + .into() + }) + .collect(), fill_points: outline_template.fill_points.clone(), intersections_box: Rect::at_origin(size) .with_margin(size.to_square().width as i32 * -2), @@ -51,6 +65,7 @@ self.islands .iter() .flat_map(|p| p.iter()) + .chain(self.walls.iter().flat_map(|p| p.iter())) .chain(self.fill_points.iter()) } @@ -58,6 +73,7 @@ self.islands .iter_mut() .flat_map(|i| i.iter_mut()) + .chain(self.walls.iter_mut().flat_map(|p| p.iter_mut())) .chain(self.fill_points.iter_mut()) } @@ -292,13 +308,22 @@ } pub fn draw(&self, land: &mut Land2D, value: T) { - for segment in self.segments_iter() { + for segment in self.visible_segments_iter() { land.draw_line(segment, value); } } + fn visible_segments_iter<'a>(&'a self) -> impl Iterator + 'a { + self.islands + .iter() + .flat_map(|p| p.iter_edges()) + } + fn segments_iter<'a>(&'a self) -> impl Iterator + 'a { - self.islands.iter().flat_map(|p| p.iter_edges()) + self.islands + .iter() + .flat_map(|p| p.iter_edges()) + .chain(self.walls.iter().flat_map(|p| p.iter_edges())) } pub fn mirror(&mut self) { @@ -322,6 +347,7 @@ Polygon::new(&[Point::new(0, 0), Point::new(20, 0), Point::new(30, 30)]), Polygon::new(&[Point::new(10, 15), Point::new(15, 20), Point::new(20, 15)]), ], + walls: vec![], fill_points: vec![Point::new(1, 1)], play_box: Rect::at_origin(size).with_margin(10), size: Size::square(100), diff -r adb44a2d8226 -r 5c941f5deeec rust/landgen/src/outline_template_based/outline_template.rs --- a/rust/landgen/src/outline_template_based/outline_template.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/landgen/src/outline_template_based/outline_template.rs Sun Dec 01 21:08:03 2024 +0100 @@ -3,6 +3,7 @@ #[derive(Clone, Debug)] pub struct OutlineTemplate { pub islands: Vec>, + pub walls: Vec>, pub fill_points: Vec, pub size: Size, pub can_flip: bool, @@ -16,6 +17,7 @@ OutlineTemplate { size, islands: Vec::new(), + walls: Vec::new(), fill_points: Vec::new(), can_flip: false, can_invert: false, diff -r adb44a2d8226 -r 5c941f5deeec rust/landgen/src/outline_template_based/template_based.rs --- a/rust/landgen/src/outline_template_based/template_based.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/landgen/src/outline_template_based/template_based.rs Sun Dec 01 21:08:03 2024 +0100 @@ -56,7 +56,11 @@ if !parameters.skip_distort { let distortion_limiting_factor = 100 + random_numbers.next().unwrap() % 8 * 10; - points.distort(parameters.distance_divisor, distortion_limiting_factor, random_numbers); + points.distort( + parameters.distance_divisor, + distortion_limiting_factor, + random_numbers, + ); } if !parameters.skip_bezier { diff -r adb44a2d8226 -r 5c941f5deeec rust/mapgen/src/lib.rs --- a/rust/mapgen/src/lib.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/mapgen/src/lib.rs Sun Dec 01 21:08:03 2024 +0100 @@ -139,7 +139,7 @@ indices .indices .iter() - .map(|i| Into::::into(&templates[*i])) + .map(|i| Into::::into(templates[*i].clone())) .map(|o| { if indices.force_invert == Some(true) { o.cavern() diff -r adb44a2d8226 -r 5c941f5deeec rust/mapgen/src/template/outline.rs --- a/rust/mapgen/src/template/outline.rs Fri Nov 29 22:29:58 2024 +0100 +++ b/rust/mapgen/src/template/outline.rs Sun Dec 01 21:08:03 2024 +0100 @@ -5,13 +5,13 @@ use std::collections::hash_map::HashMap; -#[derive(Deserialize)] +#[derive(Deserialize, Clone)] pub struct PointDesc { x: u32, y: u32, } -#[derive(Deserialize)] +#[derive(Deserialize, Clone)] pub struct RectDesc { x: u32, y: u32, @@ -19,7 +19,7 @@ h: u32, } -#[derive(Deserialize)] +#[derive(Deserialize, Clone)] pub struct TemplateDesc { width: usize, height: usize, @@ -30,6 +30,7 @@ put_girders: bool, max_hedgehogs: u8, outline_points: Vec>, + walls: Option>>, fill_points: Vec, } @@ -45,8 +46,8 @@ pub template_types: HashMap, } -impl From<&TemplateDesc> for OutlineTemplate { - fn from(desc: &TemplateDesc) -> Self { +impl From for OutlineTemplate { + fn from(desc: TemplateDesc) -> Self { OutlineTemplate { islands: desc .outline_points @@ -62,6 +63,20 @@ .collect() }) .collect(), + walls: desc + .walls.unwrap_or_default() + .iter() + .map(|v| { + v.iter() + .map(|r| { + Rect::from_size( + Point::new(r.x as i32, r.y as i32), + Size::new(r.w as usize, r.h as usize), + ) + }) + .collect() + }) + .collect(), fill_points: desc .fill_points .iter() diff -r adb44a2d8226 -r 5c941f5deeec share/hedgewars/Data/map_templates.yaml --- a/share/hedgewars/Data/map_templates.yaml Fri Nov 29 22:29:58 2024 +0100 +++ b/share/hedgewars/Data/map_templates.yaml Sun Dec 01 21:08:03 2024 +0100 @@ -32,6 +32,10 @@ - {x: 2018, y: 872, w: 276, h: 314} - {x: 2110, y: 1250, w: 130, h: 86} - {x: 2134, y: 1424, w: 1, h: 1} + walls: + - + - {x: 1570, y: 1424, w: 1, h: 1} + - {x: 1610, y: 104, w: 150, h: 10} fill_points: - {x: 1023, y: 0} @@ -193,7 +197,7 @@ - - {x: 674, y: 1424, w: 1, h: 1} - {x: 590, y: 1318, w: 168, h: 26} - - {x: 782, y: 976, w: 122, h: 314} + - {x: 632, y: 876, w: 122, h: 314} - {x: 968, y: 1144, w: 56, h: 180} - {x: 1078, y: 1256, w: 64, h: 56} - {x: 1140, y: 1050, w: 106, h: 220} @@ -203,9 +207,16 @@ - {x: 1350, y: 1152, w: 152, h: 146} - {x: 1572, y: 1174, w: 60, h: 152} - {x: 1684, y: 1122, w: 150, h: 138} - - {x: 1894, y: 764, w: 56, h: 582} + - {x: 1934, y: 764, w: 56, h: 582} - {x: 2020, y: 1174, w: 94, h: 232} - {x: 2012, y: 1424, w: 1, h: 1} + walls: + - + - {x: 990, y: 1070, w: 1, h: 1} + - {x: 200, y: 10, w: 350, h: 1} + - + - {x: 1600, y: 1100, w: 1, h: 1} + - {x: 2300, y: 10, w: 200, h: 1} fill_points: - {x: 1023, y: 0} @@ -226,16 +237,22 @@ - {x: 768, y: 1422, w: 2, h: 2} - {x: 666, y: 1240, w: 302, h: 110} - {x: 694, y: 912, w: 104, h: 290} - - {x: 970, y: 980, w: 364, h: 122} - - {x: 968, y: 840, w: 368, h: 100} + - {x: 970, y: 980, w: 164, h: 122} + - {x: 968, y: 840, w: 268, h: 100} - {x: 632, y: 660, w: 482, h: 130} - {x: 1178, y: 642, w: 62, h: 64} - {x: 1390, y: 554, w: 58, h: 246} - {x: 1600, y: 676, w: 590, h: 98} - - {x: 1488, y: 842, w: 214, h: 188} + - {x: 1488, y: 842, w: 114, h: 188} - {x: 1450, y: 1086, w: 406, h: 92} - {x: 1984, y: 902, w: 190, h: 412} - {x: 2046, y: 1420, w: 2, h: 2} + walls: + - + - {x: 1400, y: 822, w: 1, h: 1} + - {x: 1400, y: 1222, w: 1, h: 1} + - {x: 1900, y: 1240, w: 1, h: 100} + - {x: 1100, y: 1402, w: 1, h: 1} fill_points: - {x: 1023, y: 0} @@ -294,6 +311,10 @@ - {x: 1940, y: 988, w: 212, h: 50} - {x: 1864, y: 1146, w: 128, h: 146} - {x: 2030, y: 1424, w: 20, h: 1} + walls: + - + - {x: 1410, y: 924, w: 20, h: 1} + - {x: 1100, y: 2, w: 800, h: 1} fill_points: - {x: 1023, y: 0} @@ -363,15 +384,17 @@ - {x: 640, y: 1082, w: 140, h: 150} - {x: 714, y: 868, w: 352, h: 94} - {x: 1126, y: 646, w: 106, h: 282} - - {x: 1302, y: 790, w: 368, h: 142} + - {x: 1302, y: 790, w: 338, h: 142} - {x: 1358, y: 988, w: 116, h: 244} - {x: 1276, y: 1424, w: 14, h: 1} - - {x: 1464, y: 1424, w: 22, h: 1} - - {x: 1688, y: 1195, w: 120, h: 120} - - {x: 1858, y: 674, w: 354, h: 448} - - {x: 2088, y: 1195, w: 120, h: 120} + - {x: 1888, y: 674, w: 354, h: 448} - {x: 2182, y: 1424, w: 2, h: 1} + walls: + - + - {x: 1380, y: 1424, w: 1, h: 1} + - {x: 2250, y: 2, w: 1, h: 1} fill_points: - {x: 1023, y: 0} @@ -390,14 +413,18 @@ outline_points: - - {x: 674, y: 1424, w: 166, h: 1} - - {x: 730, y: 1262, w: 96, h: 92} - - {x: 892, y: 1090, w: 152, h: 250} - - {x: 1146, y: 1046, w: 36, h: 270} - - {x: 1338, y: 1026, w: 54, h: 224} - - {x: 1534, y: 1046, w: 44, h: 216} - - {x: 1692, y: 1030, w: 46, h: 300} - - {x: 1848, y: 1064, w: 158, h: 272} + - {x: 792, y: 990, w: 152, h: 250} + - {x: 1848, y: 964, w: 158, h: 272} - {x: 1984, y: 1424, w: 136, h: 1} + walls: + - + - {x: 980, y: 1284, w: 1, h: 50} + - {x: 1800, y: 1284, w: 1, h: 50} + - + - {x: 380, y: 610, w: 1, h: 200} + - {x: 2340, y: 610, w: 1, h: 200} + - {x: 2540, y: 1500, w: 1, h: 1} + - {x: 280, y: 1500, w: 1, h: 1} fill_points: - {x: 1023, y: 0} @@ -418,16 +445,23 @@ - {x: 760, y: 1424, w: 2, h: 2} - {x: 642, y: 1030, w: 46, h: 286} - {x: 854, y: 1072, w: 194, h: 56} - - {x: 654, y: 734, w: 534, h: 200} + - {x: 654, y: 734, w: 534, h: 100} - {x: 1270, y: 676, w: 58, h: 468} - {x: 1476, y: 672, w: 198, h: 112} - {x: 1400, y: 1424, w: 64, h: 2} - - {x: 1644, y: 1424, w: 64, h: 2} - {x: 1756, y: 894, w: 184, h: 94} - - {x: 2000, y: 814, w: 76, h: 358} - {x: 2148, y: 984, w: 108, h: 304} - {x: 2088, y: 1424, w: 176, h: 1} + walls: + - + - {x: 1560, y: 1424, w: 1, h: 1} + - {x: 1880, y: 1, w: 140, h: 1} + - + - {x: 860, y: 1424, w: 1, h: 1} + - {x: 1160, y: 1090, w: 1, h: 1} + - {x: 1330, y: 1424, w: 1, h: 1} fill_points: - {x: 1023, y: 0} @@ -446,20 +480,27 @@ outline_points: - - {x: 846, y: 1424, w: 140, h: 2} - - {x: 680, y: 1272, w: 196, h: 32} - {x: 654, y: 1080, w: 262, h: 134} - - {x: 1054, y: 1072, w: 220, h: 136} - - {x: 1008, y: 890, w: 268, h: 110} - - {x: 700, y: 762, w: 104, h: 200} + - {x: 1154, y: 1072, w: 160, h: 136} + - {x: 1148, y: 850, w: 168, h: 110} + - {x: 700, y: 762, w: 104, h: 60} - {x: 846, y: 624, w: 306, h: 58} - - {x: 1316, y: 588, w: 84, h: 206} - - {x: 1548, y: 574, w: 104, h: 220} - {x: 1826, y: 576, w: 120, h: 202} - {x: 1956, y: 818, w: 192, h: 68} - - {x: 1626, y: 948, w: 246, h: 88} - - {x: 1656, y: 1106, w: 194, h: 150} + - {x: 1606, y: 828, w: 126, h: 88} + - {x: 1606, y: 1106, w: 94, h: 150} - {x: 1968, y: 1106, w: 198, h: 152} - {x: 1844, y: 1424, w: 2, h: 2} + walls: + - + - {x: 0, y: 854, w: 1, h: 1} + - {x: 980, y: 985, w: 1, h: 1} + - + - {x: 1870, y: 1050, w: 1, h: 1} + - {x: 3000, y: 804, w: 1, h: 1} + - + - {x: 1420, y: 750, w: 90, h: 100} + - {x: 1450, y: 1424, w: 51, h: 1} fill_points: - {x: 1023, y: 0} @@ -509,27 +550,32 @@ - - {x: 702, y: 1424, w: 2, h: 2} - {x: 640, y: 1290, w: 44, h: 94} - - {x: 750, y: 1262, w: 44, h: 94} - {x: 860, y: 1306, w: 78, h: 70} - {x: 866, y: 1424, w: 2, h: 2} - - {x: 1204, y: 1424, w: 2, h: 2} - - {x: 1120, y: 1182, w: 108, h: 174} - - {x: 884, y: 1024, w: 314, h: 98} - - {x: 710, y: 882, w: 76, h: 230} - - {x: 834, y: 686, w: 220, h: 154} - - {x: 1240, y: 674, w: 56, h: 266} - - {x: 1424, y: 644, w: 78, h: 304} - - {x: 1648, y: 646, w: 116, h: 162} + - {x: 1120, y: 982, w: 108, h: 174} + - {x: 610, y: 842, w: 116, h: 230} + - {x: 1034, y: 686, w: 620, h: 154} - {x: 1980, y: 726, w: 190, h: 228} - - {x: 1760, y: 1004, w: 140, h: 84} - - {x: 1596, y: 1140, w: 242, h: 118} + - {x: 1536, y: 1040, w: 242, h: 118} - {x: 1616, y: 1424, w: 2, h: 2} - - {x: 1894, y: 1424, w: 2, h: 2} - {x: 1850, y: 1328, w: 88, h: 34} - {x: 1998, y: 1238, w: 96, h: 112} - {x: 2056, y: 1424, w: 2, h: 2} + walls: + - + - {x: 0, y: 1200, w: 1, h: 1} + - {x: 1040, y: 1200, w: 1, h: 1} + - {x: 1040, y: 1500, w: 1, h: 1} + - {x: 0, y: 1500, w: 2, h: 2} + - + - {x: 3100, y: 1120, w: 1, h: 1} + - {x: 1770, y: 1220, w: 1, h: 1} + - {x: 1770, y: 1500, w: 1, h: 1} + - {x: 3100, y: 1500, w: 2, h: 2} fill_points: - {x: 1023, y: 0} @@ -594,17 +640,18 @@ - - {x: 630, y: 1424, w: 2, h: 2} - {x: 566, y: 1256, w: 128, h: 118} - - {x: 752, y: 1256, w: 98, h: 114} - - {x: 748, y: 1074, w: 140, h: 138} - - {x: 956, y: 1072, w: 136, h: 142} - - {x: 1146, y: 1070, w: 114, h: 252} - - {x: 1324, y: 778, w: 120, h: 390} - - {x: 1522, y: 862, w: 114, h: 210} - - {x: 1724, y: 706, w: 130, h: 252} - - {x: 1936, y: 606, w: 278, h: 234} - - {x: 1924, y: 1044, w: 272, h: 52} - - {x: 1972, y: 1252, w: 180, h: 56} + - {x: 2036, y: 636, w: 78, h: 234} - {x: 1998, y: 1424, w: 42, h: 2} + walls: + - + - {x: 330, y: 1500, w: 2, h: 1} + - {x: 366, y: 1156, w: 64, h: 64} + - {x: 2086, y: 460, w: 200, h: 60} + - {x: 2100, y: 1500, w: 200, h: 1} + - + - {x: 830, y: 1424, w: 2, h: 1} + - {x: 1686, y: 1060, w: 200, h: 60} + - {x: 1650, y: 1424, w: 200, h: 1} fill_points: - {x: 1023, y: 0} @@ -898,33 +945,31 @@ - - {x: 474, y: 1424, w: 1, h: 1} - {x: 390, y: 1318, w: 168, h: 26} - - {x: 582, y: 976, w: 122, h: 314} - - {x: 768, y: 1144, w: 56, h: 180} - - {x: 878, y: 1256, w: 64, h: 56} - - {x: 940, y: 1050, w: 106, h: 220} + - {x: 940, y: 1080, w: 106, h: 220} - {x: 844, y: 896, w: 162, h: 140} - - {x: 696, y: 610, w: 886, h: 174} + - {x: 796, y: 610, w: 686, h: 174} - {x: 1134, y: 848, w: 296, h: 108} - {x: 1150, y: 1152, w: 152, h: 146} - - {x: 1372, y: 1174, w: 60, h: 152} - - {x: 1484, y: 1122, w: 150, h: 138} - {x: 1694, y: 764, w: 56, h: 582} - - {x: 1820, y: 1174, w: 94, h: 232} - - {x: 1812, y: 1424, w: 1, h: 1} + - {x: 1712, y: 1424, w: 1, h: 1} - - {x: 2110, y: 1424, w: 2, h: 2} - {x: 1992, y: 1030, w: 46, h: 286} - {x: 2204, y: 1072, w: 194, h: 56} - {x: 2004, y: 734, w: 534, h: 200} - - {x: 2620, y: 676, w: 58, h: 468} - - {x: 2826, y: 672, w: 198, h: 112} + - {x: 2626, y: 672, w: 198, h: 112} - {x: 2750, y: 1424, w: 64, h: 2} - - {x: 2994, y: 1424, w: 64, h: 2} - {x: 3106, y: 894, w: 184, h: 94} - - {x: 3350, y: 814, w: 76, h: 358} - {x: 3498, y: 984, w: 108, h: 304} - {x: 3438, y: 1424, w: 176, h: 1} + walls: + - + - {x: 1870, y: 1500, w: 1, h: 1} + - {x: 1780, y: 500, w: 168, h: 26} + - {x: 2880, y: 500, w: 265, h: 26} + - {x: 2880, y: 1500, w: 1, h: 1} fill_points: - {x: 2047, y: 0} @@ -984,23 +1029,26 @@ - - {x: 362, y: 1424, w: 400, h: 1} - {x: 426, y: 634, w: 142, h: 360} - - {x: 1136, y: 1140, w: 400, h: 200} - - {x: 1776, y: 576, w: 186, h: 550} - - {x: 1630, y: 1424, w: 454, h: 1} + - {x: 1206, y: 1140, w: 200, h: 200} + - {x: 1776, y: 576, w: 70, h: 550} + - {x: 1540, y: 1424, w: 120, h: 1} - - {x: 1938, y: 1424, w: 190, h: 1} - - {x: 1990, y: 1082, w: 140, h: 150} - {x: 2064, y: 868, w: 352, h: 94} - - {x: 2476, y: 646, w: 106, h: 282} - - {x: 2652, y: 790, w: 368, h: 142} - - {x: 2708, y: 988, w: 116, h: 244} + - {x: 2652, y: 790, w: 168, h: 142} - {x: 2626, y: 1424, w: 14, h: 1} - - {x: 2814, y: 1424, w: 22, h: 1} - - {x: 3038, y: 1195, w: 120, h: 120} - {x: 3208, y: 674, w: 354, h: 448} - - {x: 3438, y: 1195, w: 120, h: 120} - {x: 3532, y: 1424, w: 2, h: 1} + walls: + - + - {x: 560, y: 0, w: 260, h: 1} + - {x: 1250, y: 880, w: 40, h: 200} + - {x: 2000, y: 0, w: 260, h: 1} + - {x: 1880, y: 1500, w: 1, h: 1} + - {x: 2700, y: 1500, w: 1, h: 1} + - {x: 3050, y: 0, w: 480, h: 1} fill_points: - {x: 2047, y: 0} @@ -1019,56 +1067,44 @@ outline_points: - - {x: 564, y: 1424, w: 20, h: 1} - - {x: 490, y: 1260, w: 64, h: 62} - - {x: 686, y: 1150, w: 52, h: 146} - - {x: 456, y: 990, w: 116, h: 144} - - {x: 670, y: 868, w: 138, h: 168} - {x: 442, y: 642, w: 158, h: 162} - - {x: 708, y: 710, w: 198, h: 72} - {x: 970, y: 628, w: 118, h: 134} - - {x: 836, y: 1118, w: 142, h: 132} - - {x: 1168, y: 1100, w: 172, h: 58} - - {x: 1170, y: 1204, w: 172, h: 62} - - {x: 1432, y: 1104, w: 82, h: 226} + - {x: 836, y: 1118, w: 142, h: 32} - {x: 1556, y: 994, w: 64, h: 152} - {x: 1414, y: 734, w: 106, h: 152} - - {x: 1610, y: 660, w: 380, h: 82} - - {x: 1728, y: 822, w: 30, h: 118} - - {x: 1740, y: 988, w: 212, h: 50} - - {x: 1664, y: 1146, w: 128, h: 146} + - {x: 1610, y: 660, w: 260, h: 82} - {x: 1830, y: 1424, w: 20, h: 1} - - {x: 2140, y: 1424, w: 1, h: 1} - - {x: 2076, y: 1302, w: 44, h: 54} - {x: 2234, y: 1236, w: 58, h: 90} - - {x: 2066, y: 1134, w: 80, h: 80} - {x: 2046, y: 1004, w: 96, h: 108} - {x: 2226, y: 1046, w: 110, h: 112} - {x: 2034, y: 692, w: 118, h: 164} - - {x: 2228, y: 796, w: 130, h: 110} - - {x: 2316, y: 598, w: 344, h: 78} - - {x: 2488, y: 826, w: 50, h: 40} + - {x: 2316, y: 598, w: 264, h: 78} - {x: 2426, y: 960, w: 32, h: 148} - - {x: 2498, y: 1050, w: 160, h: 34} - {x: 2474, y: 1188, w: 36, h: 136} - {x: 2814, y: 1248, w: 48, h: 48} - {x: 2886, y: 1128, w: 64, h: 88} - - {x: 2758, y: 1060, w: 70, h: 74} - - {x: 2916, y: 996, w: 68, h: 70} - - {x: 2918, y: 884, w: 68, h: 82} - - {x: 2758, y: 724, w: 44, h: 140} + - {x: 2798, y: 724, w: 44, h: 140} - {x: 3072, y: 706, w: 52, h: 66} - - {x: 3054, y: 902, w: 58, h: 66} - {x: 3034, y: 1160, w: 76, h: 112} - - {x: 3180, y: 1162, w: 124, h: 64} - - {x: 3272, y: 872, w: 54, h: 134} - - {x: 3210, y: 596, w: 246, h: 62} + - {x: 3290, y: 1162, w: 40, h: 64} + - {x: 3310, y: 596, w: 46, h: 62} - {x: 3506, y: 554, w: 38, h: 238} - - {x: 3612, y: 748, w: 28, h: 28} - - {x: 3492, y: 924, w: 144, h: 94} - - {x: 3432, y: 1078, w: 248, h: 20} - - {x: 3432, y: 1202, w: 238, h: 16} - {x: 3480, y: 1424, w: 1, h: 1} + walls: + - + - {x: 1264, y: 1024, w: 20, h: 1} + - {x: 1070, y: 0, w: 400, h: 1} + - + - {x: 2670, y: 1170, w: 1, h: 1} + - {x: 2610, y: 0, w: 200, h: 1} + - + - {x: 3210, y: 1100, w: 1, h: 1} + - {x: 3100, y: 0, w: 210, h: 1} + - + - {x: 710, y: 1250, w: 1, h: 120} + - {x: 1630, y: 1200, w: 1, h: 170} fill_points: - {x: 2047, y: 0} @@ -1089,20 +1125,16 @@ - {x: 610, y: 1424, w: 1, h: 1} - {x: 360, y: 1160, w: 130, h: 170} - {x: 542, y: 1106, w: 316, h: 150} - - {x: 438, y: 786, w: 270, h: 180} - {x: 446, y: 576, w: 242, h: 156} - - {x: 752, y: 528, w: 610, h: 300} - - {x: 950, y: 868, w: 352, h: 324} - - {x: 850, y: 1424, w: 500, h: 1} - - {x: 1450, y: 1500, w: 1, h: 1} + - {x: 752, y: 528, w: 350, h: 300} + - {x: 950, y: 1424, w: 300, h: 1} + - - {x: 1690, y: 1424, w: 1, h: 1} - {x: 1652, y: 1304, w: 74, h: 12} - - {x: 1448, y: 975, w: 68, h: 425} + - {x: 1448, y: 975, w: 68, h: 385} - {x: 1626, y: 992, w: 140, h: 142} - {x: 1510, y: 592, w: 150, h: 350} - {x: 1788, y: 594, w: 148, h: 242} - - {x: 1818, y: 872, w: 276, h: 314} - - {x: 1910, y: 1250, w: 130, h: 86} - {x: 1934, y: 1424, w: 1, h: 1} - - {x: 2202, y: 1424, w: 2, h: 2} @@ -1113,21 +1145,23 @@ - - {x: 2704, y: 1424, w: 2, h: 2} - {x: 2620, y: 1182, w: 108, h: 174} - - {x: 2384, y: 1024, w: 314, h: 98} - - {x: 2210, y: 882, w: 76, h: 230} + - {x: 2210, y: 902, w: 76, h: 230} - {x: 2334, y: 686, w: 220, h: 154} - - {x: 2740, y: 674, w: 56, h: 266} - - {x: 2924, y: 644, w: 78, h: 304} - - {x: 3148, y: 646, w: 116, h: 162} - - {x: 3480, y: 726, w: 190, h: 228} - - {x: 3260, y: 1004, w: 140, h: 84} - - {x: 3096, y: 1140, w: 242, h: 118} + - {x: 3480, y: 680, w: 190, h: 228} + - {x: 3096, y: 1010, w: 242, h: 118} - {x: 3116, y: 1424, w: 2, h: 2} - - {x: 3394, y: 1424, w: 2, h: 2} - {x: 3350, y: 1328, w: 88, h: 34} - {x: 3498, y: 1238, w: 96, h: 112} - {x: 3556, y: 1424, w: 2, h: 2} + walls: + - + - {x: 1300, y: 1500, w: 1, h: 1} + - {x: 1100, y: 960, w: 280, h: 40} + - {x: 1200, y: 1, w: 280, h: 1} + - {x: 2000, y: 400, w: 250, h: 1} + - {x: 2020, y: 1500, w: 20, h: 1} fill_points: - {x: 2047, y: 0} @@ -1157,19 +1191,14 @@ - {x: 1212, y: 990, w: 188, h: 298} - {x: 1440, y: 1068, w: 136, h: 172} - {x: 1470, y: 594, w: 120, h: 392} - - {x: 1714, y: 594, w: 364, h: 362} - - {x: 1650, y: 1052, w: 315, h: 232} + - {x: 1714, y: 594, w: 220, h: 362} - {x: 1660, y: 1424, w: 25, h: 1} - - {x: 1986, y: 1424, w: 2, h: 2} - - {x: 1944, y: 1286, w: 84, h: 54} - {x: 1912, y: 1086, w: 150, h: 166} - {x: 2378, y: 1240, w: 186, h: 98} - - {x: 2444, y: 1004, w: 124, h: 58} - {x: 2320, y: 582, w: 112, h: 194} - - {x: 2688, y: 660, w: 92, h: 132} - {x: 3010, y: 574, w: 154, h: 196} - - {x: 2860, y: 974, w: 118, h: 64} - {x: 2752, y: 1222, w: 328, h: 92} - {x: 3296, y: 1030, w: 242, h: 222} - {x: 3298, y: 1316, w: 254, h: 50} diff -r adb44a2d8226 -r 5c941f5deeec tools/map_templates_tool/main.qml --- a/tools/map_templates_tool/main.qml Fri Nov 29 22:29:58 2024 +0100 +++ b/tools/map_templates_tool/main.qml Sun Dec 01 21:08:03 2024 +0100 @@ -20,7 +20,7 @@ Rectangle { id: mapContainer - property int spaceForCode: Math.max(200, parent.height / 2) + property int spaceForCode: Math.max(250, parent.height * 0.6) property int mapWidth: 2048 property int mapHeight: 1024 property real aspectRatio: mapWidth / mapHeight @@ -41,6 +41,16 @@ anchors.fill: mapContainer } + MouseArea { + id: mouseArea + anchors.fill: mapContainer + hoverEnabled: true + } + + Label { + text: mouseArea.containsMouse ? "(%1, %2)".arg(Math.floor(mouseArea.mouseX / mouseArea.width * mapContainer.mapWidth)).arg(Math.floor(mouseArea.mouseY / mouseArea.height * mapContainer.mapHeight)) : "" + } + Rectangle { anchors.fill: codeInput color: "gray" @@ -119,8 +129,8 @@ newKey = "outline_points" } - if (line === " holes:") { - newKey = "holes" + if (line === " walls:") { + newKey = "walls" } if (line === " fill_points:") { @@ -243,6 +253,6 @@ } function renderTemplate(template) { - return polygons2shapes(template.outline_points, "red", "black").concat(polygons2shapes(template.holes, "gray", "gray")) + return polygons2shapes(template.outline_points, "red", "black").concat(polygons2shapes(template.walls, "gray", "gray")) } }