| 17 | std::vector<Ripple> Ripples = {}; |
| 18 | |
| 19 | void SpawnRipple(const Vector3& pos, int roomNumber, float size, int flags, const Vector3& normal) |
| 20 | { |
| 21 | constexpr auto LIFE_WATER_SURFACE_MAX = 1.0f; |
| 22 | constexpr auto LIFE_WATER_SURFACE_MIN = LIFE_WATER_SURFACE_MAX / 2; |
| 23 | constexpr auto LIFE_GROUND_MAX = 0.4f; |
| 24 | constexpr auto LIFE_GROUND_MIN = LIFE_GROUND_MAX / 2; |
| 25 | constexpr auto FADE_FAST_COEFF = 1 / 3.0f; |
| 26 | constexpr auto FADE_SLOW_COEFF = 0.5f; |
| 27 | constexpr auto COLOR_WHITE = Vector4(1.0f, 1.0f, 1.0f, RIPPLE_OPACITY_MAX); |
| 28 | |
| 29 | auto& ripple = GetNewEffect(Ripples, RIPPLE_COUNT_MAX); |
| 30 | |
| 31 | float lifeInSec = (flags & (int)RippleFlags::OnGround) ? |
| 32 | Random::GenerateFloat(LIFE_GROUND_MIN, LIFE_GROUND_MAX) : |
| 33 | Random::GenerateFloat(LIFE_WATER_SURFACE_MIN, LIFE_WATER_SURFACE_MAX); |
| 34 | float fadeDurationInSec = lifeInSec * ((ripple.Flags & ((int)RippleFlags::SlowFade)) ? FADE_SLOW_COEFF : FADE_FAST_COEFF); |
| 35 | |
| 36 | ripple.SpriteIndex = Objects[ID_DEFAULT_SPRITES].meshIndex + SPR_RIPPLES; |
| 37 | ripple.Position = pos; |
| 38 | ripple.RoomNumber = roomNumber; |
| 39 | ripple.Normal = normal; |
| 40 | ripple.Color = COLOR_WHITE; |
| 41 | ripple.Life = |
| 42 | ripple.LifeMax = round(lifeInSec * FPS); |
| 43 | ripple.Size = size; |
| 44 | ripple.FadeDuration = round(fadeDurationInSec * FPS); |
| 45 | ripple.Flags = flags; |
| 46 | } |
| 47 | |
| 48 | void UpdateRipples() |
| 49 | { |