Pumpkin/pumpkin-world/src/generation/feature/features/end_island.rs
2026-05-19 20:08:58 +02:00

45 lines
1.3 KiB
Rust

use pumpkin_data::Block;
use pumpkin_util::{
math::{position::BlockPos, vector3::Vector3},
random::{RandomGenerator, RandomImpl},
};
use crate::generation::proto_chunk::GenerationCache;
pub struct EndIslandFeature {}
impl EndIslandFeature {
pub fn generate<T: GenerationCache>(
&self,
chunk: &mut T,
_min_y: i8,
_height: u16,
_feature: pumpkin_data::placed_feature::PlacedFeature,
random: &mut RandomGenerator,
pos: BlockPos,
) -> bool {
let mut size = random.next_bounded_i32(3) as f32 + 4.0;
let mut dy = 0i32;
while size > 0.5 {
let start = size.copysign(-1.0).floor() as i32;
let end = size.ceil() as i32;
let radius_sq = (size + 1.0) * (size + 1.0);
for dx in start..=end {
for dz in start..=end {
if (dx * dx + dz * dz) as f32 <= radius_sq {
let target = Vector3::new(pos.0.x + dx, pos.0.y + dy, pos.0.z + dz);
chunk.set_block_state(&target, Block::END_STONE.default_state);
}
}
}
size -= random.next_bounded_i32(2) as f32 + 0.5;
dy -= 1;
}
true
}
}