This commit is contained in:
Aria 2025-03-21 22:23:30 +11:00
commit 9c94d113d3
Signed by untrusted user who does not match committer: aria
GPG key ID: 19AB7AA462B8AB3B
10260 changed files with 1237388 additions and 0 deletions

View file

@ -0,0 +1,47 @@
#ifndef STAR_FLOWING_LIQUID_AGENT_HPP
#define STAR_FLOWING_LIQUID_AGENT_HPP
#include "StarRandom.hpp"
#include "StarVector.hpp"
#include "StarLiquidTypes.hpp"
namespace Star {
STAR_CLASS(LivingWorldAgent);
STAR_CLASS(LivingWorldFacade);
STAR_CLASS(FlowingLiquidAgent);
class FlowingLiquidAgent {
public:
FlowingLiquidAgent();
void bind(LivingWorldFacadePtr world, LivingWorldAgent* livingWorld);
void processLocation(Vec2I const& location);
private:
LiquidLevel getLiquidLevel(int x, int y);
bool hasBackground(int x, int y);
bool isOcean(int x, int y);
LiquidId oceanLiquid(int x, int y);
uint16_t oceanLiquidPressure(int x, int y);
void moveLiquid(int x, int y, int dx, int dy, LiquidLevel proposedSourceLevel, LiquidLevel proposedTargetLevel);
void setLiquidLevel(int x, int y, LiquidLevel level);
bool moveLiquidDown(Vec2I c, LiquidLevel above, bool attemptMoveOut);
bool moveLiquidSideWays(Vec2I c, int fountain);
int checkMoveLiquidSideways(int x, int y, LiquidLevel level);
bool moveLiquidUpwards(Vec2I c, LiquidLevel level);
bool moveLiquidOut(Vec2I c);
bool sanityCheckLiquid(LiquidLevel const& level) const;
LivingWorldAgent* m_livingWorld;
RandomSource m_random;
LivingWorldFacadePtr m_world;
};
}
#endif