const std = @import("std"); const math = @import("math.zig"); const vm = @import("vecmath"); const Noise = struct { horizontal_scale: f32, value_median: f32, value_amplitude: f32, pub fn sample(self: Noise, seed: u64, pos: vm.Vector2) f32 { return math.noise2(seed, pos.divScalar(self.horizontal_scale)) * self.value_amplitude + self.value_median; } pub fn samplev(self: Noise, seed: u64, pos: vm.Vector2x8) vm.f32x8 { return math.noise2x8(seed, pos.divScalarSingle(self.horizontal_scale)) * vm.ps(self.value_amplitude) + vm.ps(self.value_median); } }; const noise_main: Noise = .{ .horizontal_scale = 80, .value_median = 7, .value_amplitude = 5, }; const noise_secondary: Noise = .{ .horizontal_scale = 15, .value_median = 0, .value_amplitude = 0.5, }; pub fn heightF(seed: u64, pos: vm.Vector2) f32 { const main = noise_main.sample(seed, pos); const secondary = noise_secondary.sample(seed, pos); return @round(main + secondary); } pub fn heightFv(seed: u64, pos: vm.Vector2x8) vm.f32x8 { const main = noise_main.samplev(seed, pos); const secondary = noise_secondary.samplev(seed, pos); return @round(main + secondary); } pub fn heightI(seed: u64, pos: vm.Vector2) i32 { return @intFromFloat(heightF(seed, pos)); } pub fn heightIv(seed: u64, pos: vm.Vector2x8) vm.i32x8 { return @intFromFloat(heightFv(seed, pos)); }