//////////////////////////////////////////////////////////// //~ Helpers V_ParticleDesc V_DescFromParticleKind(V_ParticleKind kind) { if (kind < 0 || kind >= V_ParticleKind_COUNT) { kind = V_ParticleKind_None; } V_ParticleDesc result; { PERSIST Readonly V_ParticleFlag flags[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) flags, V_ParticlesXList(X) #undef X }; PERSIST Readonly V_ParticleLayer layers[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) layer, V_ParticlesXList(X) #undef X }; PERSIST Readonly f32 stain_rates[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) stain_rate, V_ParticlesXList(X) #undef X }; PERSIST Readonly f32 pen_rates[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) pen_rate, V_ParticlesXList(X) #undef X }; PERSIST Readonly f32 lifetimes[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) lifetime, V_ParticlesXList(X) #undef X }; PERSIST Readonly f32 prune_speed_thresholds[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) prune_speed_threshold, V_ParticlesXList(X) #undef X }; PERSIST Readonly Vec4 base_colors[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) base_color, V_ParticlesXList(X) #undef X }; PERSIST Readonly Vec4 dry_factor[V_ParticleKind_COUNT] = { #define X(name, flags, layer, stain_rate, pen_rate, lifetime, prune_speed_threshold, base_color, dry_factor) dry_factor, V_ParticlesXList(X) #undef X }; result.kind = kind; result.flags = flags[kind]; result.layer = layers[kind]; result.stain_rate = stain_rates[kind]; result.pen_rate = pen_rates[kind]; result.lifetime = lifetimes[kind]; result.prune_speed_threshold = prune_speed_thresholds[kind]; result.base_color = LinearFromSrgb(base_colors[kind]); result.dry_factor = LinearFromSrgb(dry_factor[kind]); } return result; }