float LifeEnvelope() const; /** Alive AND still on/near the map. */ bool bActive = true; }; class AGEOFEONS_API FAoEWeatherSystem { public: /** Bind to a loaded config + world + deterministic seed. */ void Configure(const FAoEEcologyConfig* InConfig, FName InWorldId, int32 InSeed); /** OPT-IN: bind a richer weather.yml config so the ERA's 14-state Markov prior + * season bias drive the roll and its per-state effects apply. When it is NOT * bound (the default), the ecology.yml 5-state path runs byte-identically. Call * after Configure; EraToken is the lowercase era token (e.g. "cretaceous"). */ void UseWeatherConfig(const FAoEWeatherConfig* InWeatherCfg, const FString& InEraToken); /** Set the biome palette (from the world model's BiomeSet). Resets to clear. */ void SetBiomes(const TArray& InBiomes); /** Advance every biome by DeltaSimHours under Season; emit world.weather on a * state change. Returns the number of state changes. */ int32 Advance(float DeltaSimHours, EAoESeason Season, IAoEEventSink* Sink);