glm::vec3 ryno_math::get_rand_dir(F32 p_min, F32 p_max, F32 y_min, F32 y_max){ F32 pitch = rand_float_range(p_min, p_max) * DEG_TO_RAD; F32 yaw = rand_float_range(y_min, y_max) * DEG_TO_RAD; F32 x = sin(yaw); F32 y = -cos(yaw)*sin(pitch); F32 z = -cos(pitch)*cos(yaw); return normalize(glm::vec3(x, y, z)); }
Vector2 _rand_point_in_nn_grid_cell(uint cell) { assert(nn_cell_width > 0.0f && nn_cell_height > 0.0f); assert(cell < nn_grid_cells); uint x = cell % nn_grid_width; uint y = cell / nn_grid_width; float x_min = (float)x * nn_cell_width; float y_min = (float)y * nn_cell_height; return vec2( rand_float_range(x_min, x_min + nn_cell_width), rand_float_range(y_min, y_min + nn_cell_height)); }
DArray _gen_navpoints(DArray geometry, DArray platforms) { DArray points = darray_create(sizeof(Vector2), 0); darray_append_multi(&points, platforms.data, platforms.size); uint fail_count = 0; do { Vector2 navpoint = vec2(rand_float_range(0.0f, SCREEN_WIDTH), rand_float_range(0.0f, SCREEN_HEIGHT)); float wdist = ai_wall_distance(navpoint, geometry); float pdist = _point_distance(navpoint, points); if(wdist >= min_wall_distance && pdist >= min_point_distance) { darray_append(&points, (void*)&navpoint); fail_count = 0; } else { fail_count++; } } while(fail_count < 1200); return points; }
Ryno::ColorRGBA ryno_math::rand_color_range(ColorRGBA& min, ColorRGBA& max) { return ColorRGBA(rand_float_range(min.r, max.r), rand_float_range(min.g, max.g), rand_float_range(min.b, max.b), rand_float_range(min.a, max.a)); }
glm::vec3 ryno_math::rand_vec3_range(glm::vec3 min, glm::vec3 max){ return glm::vec3(rand_float_range(min.x, max.x), rand_float_range(min.y, max.y), rand_float_range(min.z, max.z)); }
U32 ryno_math::rand_int_range(U32 min, U32 max){ return (U32)rand_float_range(min, max); }