| 526 | } |
| 527 | |
| 528 | void EnvironmentController::SpawnDustParticles(const ScriptInterfaceLevel& level) |
| 529 | { |
| 530 | for (int i = 0; i < DUST_SPAWN_DENSITY; i++) |
| 531 | { |
| 532 | // TODO: Use functions in Math::Random namespace. |
| 533 | auto pos = Camera.pos.ToVector3i() + Vector3i( |
| 534 | (rand() % DUST_SPAWN_RADIUS) - (DUST_SPAWN_RADIUS / 2), |
| 535 | (rand() % DUST_SPAWN_RADIUS) - (DUST_SPAWN_RADIUS / 2), |
| 536 | (rand() % DUST_SPAWN_RADIUS) - (DUST_SPAWN_RADIUS / 2)); |
| 537 | |
| 538 | int roomNumber = Camera.pos.RoomNumber; |
| 539 | if (!IsPointInRoom(pos, roomNumber)) |
| 540 | roomNumber = FindRoomNumber(pos, Camera.pos.RoomNumber, true); |
| 541 | |
| 542 | if (!IsPointInRoom(pos, roomNumber) || roomNumber == NO_VALUE) |
| 543 | continue; |
| 544 | |
| 545 | // Check if water room. |
| 546 | if (!TestEnvironment(RoomEnvFlags::ENV_FLAG_WATER, roomNumber)) |
| 547 | continue; |
| 548 | |
| 549 | auto part = WeatherParticle(); |
| 550 | part.Velocity = Random::GenerateDirection() * DUST_VELOCITY_MAX; |
| 551 | part.Size = Random::GenerateFloat(DUST_SIZE_MAX / 2, DUST_SIZE_MAX); |
| 552 | part.Type = WeatherType::None; |
| 553 | part.Life = DUST_LIFE + Random::GenerateInt(-10, 10); |
| 554 | part.RoomNumber = roomNumber; |
| 555 | part.Position = pos.ToVector3(); |
| 556 | part.Stopped = false; |
| 557 | part.Enabled = true; |
| 558 | part.StartLife = part.Life; |
| 559 | Particles.push_back(part); |
| 560 | } |
| 561 | } |
| 562 | |
| 563 | void EnvironmentController::SpawnWeatherParticles(const ScriptInterfaceLevel& level) |
| 564 | { |
nothing calls this directly
no test coverage detected