Racer: Fix weird water splashes after waypoint placement
Does not affect official racer, as only waypoint placement is touched.
The reason was that the air attack gear sometimes was not deleted fast enough so it might occassionally drop some air bombs (these are deleted now). Also, the airplane position was set to water level, which caused another water splash.
use integral_geometry::{Point, Size};
use land2d::Land2D;
use crate::{
LandGenerationParameters,
LandGenerator,
outline::OutlinePoints,
outline_template::OutlineTemplate
};
pub struct TemplatedLandGenerator {
outline_template: OutlineTemplate,
}
impl TemplatedLandGenerator {
pub fn new(outline_template: OutlineTemplate) -> Self {
Self { outline_template }
}
}
impl LandGenerator for TemplatedLandGenerator {
fn generate_land<T: Copy + PartialEq, I: Iterator<Item = u32>>(
&self,
parameters: &LandGenerationParameters<T>,
random_numbers: &mut I,
) -> Land2D<T> {
let mut land = Land2D::new(self.outline_template.size, parameters.basic);
let mut points = OutlinePoints::from_outline_template(
&self.outline_template,
land.play_box(),
land.size(),
random_numbers,
);
// mirror
if self.outline_template.can_mirror {
if let Some(b) = random_numbers.next() {
if b & 1 != 0 {
points.mirror();
}
}
}
// flip
if self.outline_template.can_flip {
if let Some(b) = random_numbers.next() {
if b & 1 != 0 {
points.flip();
}
}
}
if !parameters.skip_distort {
points.distort(parameters.distance_divisor, random_numbers);
}
if !parameters.skip_bezier {
points.bezierize(5);
}
points.draw(&mut land, parameters.zero);
for p in &points.fill_points {
land.fill(*p, parameters.zero, parameters.zero)
}
points.draw(&mut land, parameters.basic);
land
}
}