| 20 | } |
| 21 | |
| 22 | List<Particle> EntitySplashConfig::doSplash(Vec2F position, Vec2F velocity, World* world) const { |
| 23 | List<Particle> particles; |
| 24 | if (std::fabs(velocity[1]) >= splashSpeedMin) { |
| 25 | auto liquidDb = Root::singleton().liquidsDatabase(); |
| 26 | Vec2I bottom = Vec2I::floor(position + splashBottomSensor); |
| 27 | Vec2I top = Vec2I::floor(position + splashTopSensor); |
| 28 | if (world->liquidLevel(bottom).level - world->liquidLevel(top).level >= splashMinWaterLevel) { |
| 29 | LiquidId liquidType; |
| 30 | auto bottomLiquid = world->liquidLevel(bottom); |
| 31 | auto topLiquid = world->liquidLevel(top); |
| 32 | if (bottomLiquid.level > 0 && (int)bottomLiquid.liquid) |
| 33 | liquidType = bottomLiquid.liquid; |
| 34 | else |
| 35 | liquidType = topLiquid.liquid; |
| 36 | Color particleColor = Color::rgba(liquidDb->liquidSettings(liquidType)->liquidColor); |
| 37 | for (int i = 0; i < numSplashParticles; ++i) { |
| 38 | Particle newSplashParticle = splashParticle; |
| 39 | newSplashParticle.position = position; |
| 40 | newSplashParticle.velocity[1] = std::fabs(velocity[1]) * splashYVelocityFactor; |
| 41 | newSplashParticle.color = particleColor; |
| 42 | newSplashParticle.applyVariance(splashParticleVariance); |
| 43 | particles.append(newSplashParticle); |
| 44 | } |
| 45 | } |
| 46 | } |
| 47 | return particles; |
| 48 | } |
| 49 | |
| 50 | } |
no test coverage detected