code wiki / (root) / nx_beach_water_surface.nx

nx_beach_water_surface.nx source

↩ module page · 23 lines · 929 B

1// Continuous still-water geometry; Q8 coordinates and Q16 ray parameters. 2import "nx_wasm_craft.nx" 3struct BeachWaterRay { 4 origin_x_q8: i64, 5 origin_y_q8: i64, 6 origin_z_q8: i64, 7 direction_x_q8: i64, 8 direction_y_q8: i64, 9 direction_z_q8: i64, 10 max_parameter_q16: i64, 11} 12// Inputs are native arena values validated by their owning world boundary. 13// -1 is a miss; zero is contact at the surface. Waves and rendering remain separate. 14func beach_water_hit(base: i64, ray: *BeachWaterRay, level_q8: i64) -> i64 { 15 if ray.direction_y_q8 == 0 { return -1 } 16 let parameter: i64=(level_q8-ray.origin_y_q8)*65536/ray.direction_y_q8 17 if parameter < 0 || parameter > ray.max_parameter_q16 { return -1 } 18 let x: i64=ray.origin_x_q8+ray.direction_x_q8*parameter/65536 19 let z: i64=ray.origin_z_q8+ray.direction_z_q8*parameter/65536 20 let bed: i64=wc_surface_source(base,x,z) 21 if bed < 0 || bed >= level_q8 { return -1 } 22 return parameter 23}