mirror of https://github.com/OpenRCT2/OpenRCT2.git
Move gClimateNext to GameState_t (#21231)
This commit is contained in:
parent
f55eeff2e0
commit
7ca5b1cd65
|
@ -221,7 +221,7 @@ private:
|
|||
GfxDrawSprite(dpi, ImageId(currentWeatherSpriteId), screenCoords);
|
||||
|
||||
// Next weather
|
||||
auto nextWeatherSpriteId = ClimateGetWeatherSpriteId(gClimateNext);
|
||||
auto nextWeatherSpriteId = ClimateGetWeatherSpriteId(GetGameState().ClimateNext);
|
||||
if (currentWeatherSpriteId != nextWeatherSpriteId)
|
||||
{
|
||||
if (gClimateUpdateTimer < 960)
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "Date.h"
|
||||
#include "world/Climate.h"
|
||||
#include "world/Location.hpp"
|
||||
|
||||
#include <array>
|
||||
|
@ -24,6 +25,7 @@ namespace OpenRCT2
|
|||
struct GameState_t
|
||||
{
|
||||
uint32_t CurrentTicks{};
|
||||
ClimateState ClimateNext;
|
||||
money64 Cash;
|
||||
money64 InitialCash;
|
||||
};
|
||||
|
|
|
@ -780,11 +780,11 @@ namespace OpenRCT2
|
|||
|
||||
void ReadWriteClimateChunk(GameState_t& gameState, OrcaStream& os)
|
||||
{
|
||||
os.ReadWriteChunk(ParkFileChunkType::CLIMATE, [](OrcaStream::ChunkStream& cs) {
|
||||
os.ReadWriteChunk(ParkFileChunkType::CLIMATE, [&gameState](OrcaStream::ChunkStream& cs) {
|
||||
cs.ReadWrite(gClimate);
|
||||
cs.ReadWrite(gClimateUpdateTimer);
|
||||
|
||||
for (auto* cl : { &gClimateCurrent, &gClimateNext })
|
||||
for (auto* cl : { &gClimateCurrent, &gameState.ClimateNext })
|
||||
{
|
||||
cs.ReadWrite(cl->Weather);
|
||||
cs.ReadWrite(cl->Temperature);
|
||||
|
|
|
@ -184,7 +184,7 @@ namespace RCT1
|
|||
ImportResearch();
|
||||
ImportParkName();
|
||||
ImportParkFlags(gameState);
|
||||
ImportClimate();
|
||||
ImportClimate(gameState);
|
||||
ImportScenarioNameDetails();
|
||||
ImportScenarioObjective();
|
||||
ImportSavedView();
|
||||
|
@ -2276,7 +2276,7 @@ namespace RCT1
|
|||
}
|
||||
}
|
||||
|
||||
void ImportClimate()
|
||||
void ImportClimate(GameState_t& gameState)
|
||||
{
|
||||
gClimate = ClimateType{ _s4.Climate };
|
||||
gClimateUpdateTimer = _s4.ClimateTimer;
|
||||
|
@ -2285,11 +2285,11 @@ namespace RCT1
|
|||
gClimateCurrent.WeatherEffect = WeatherEffectType::None;
|
||||
gClimateCurrent.WeatherGloom = _s4.WeatherGloom;
|
||||
gClimateCurrent.Level = static_cast<WeatherLevel>(_s4.Rain);
|
||||
gClimateNext.Temperature = _s4.TargetTemperature;
|
||||
gClimateNext.Weather = WeatherType{ _s4.TargetWeather };
|
||||
gClimateNext.WeatherEffect = WeatherEffectType::None;
|
||||
gClimateNext.WeatherGloom = _s4.TargetWeatherGloom;
|
||||
gClimateNext.Level = static_cast<WeatherLevel>(_s4.TargetRain);
|
||||
gameState.ClimateNext.Temperature = _s4.TargetTemperature;
|
||||
gameState.ClimateNext.Weather = WeatherType{ _s4.TargetWeather };
|
||||
gameState.ClimateNext.WeatherEffect = WeatherEffectType::None;
|
||||
gameState.ClimateNext.WeatherGloom = _s4.TargetWeatherGloom;
|
||||
gameState.ClimateNext.Level = static_cast<WeatherLevel>(_s4.TargetRain);
|
||||
}
|
||||
|
||||
void ImportScenarioNameDetails()
|
||||
|
|
|
@ -457,15 +457,15 @@ namespace RCT2
|
|||
// Pad013CA747
|
||||
gClimateUpdateTimer = _s6.ClimateUpdateTimer;
|
||||
gClimateCurrent.Weather = WeatherType{ _s6.CurrentWeather };
|
||||
gClimateNext.Weather = WeatherType{ _s6.NextWeather };
|
||||
gameState.ClimateNext.Weather = WeatherType{ _s6.NextWeather };
|
||||
gClimateCurrent.Temperature = _s6.Temperature;
|
||||
gClimateNext.Temperature = _s6.NextTemperature;
|
||||
gameState.ClimateNext.Temperature = _s6.NextTemperature;
|
||||
gClimateCurrent.WeatherEffect = WeatherEffectType{ _s6.CurrentWeatherEffect };
|
||||
gClimateNext.WeatherEffect = WeatherEffectType{ _s6.NextWeatherEffect };
|
||||
gameState.ClimateNext.WeatherEffect = WeatherEffectType{ _s6.NextWeatherEffect };
|
||||
gClimateCurrent.WeatherGloom = _s6.CurrentWeatherGloom;
|
||||
gClimateNext.WeatherGloom = _s6.NextWeatherGloom;
|
||||
gameState.ClimateNext.WeatherGloom = _s6.NextWeatherGloom;
|
||||
gClimateCurrent.Level = static_cast<WeatherLevel>(_s6.CurrentWeatherLevel);
|
||||
gClimateNext.Level = static_cast<WeatherLevel>(_s6.NextWeatherLevel);
|
||||
gameState.ClimateNext.Level = static_cast<WeatherLevel>(_s6.NextWeatherLevel);
|
||||
|
||||
// News items
|
||||
News::InitQueue();
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#ifdef ENABLE_SCRIPTING
|
||||
|
||||
# include "../../../Context.h"
|
||||
# include "../../../GameState.h"
|
||||
# include "../../../common.h"
|
||||
# include "../../../core/String.hpp"
|
||||
# include "../../../world/Climate.h"
|
||||
|
@ -112,8 +113,9 @@ namespace OpenRCT2::Scripting
|
|||
|
||||
std::shared_ptr<ScClimateState> future_get() const
|
||||
{
|
||||
std::string weatherType = WeatherTypeToString(gClimateNext.Weather);
|
||||
return std::make_shared<ScClimateState>(weatherType, gClimateNext.Temperature);
|
||||
auto& gameState = OpenRCT2::GetGameState();
|
||||
std::string weatherType = WeatherTypeToString(gameState.ClimateNext.Weather);
|
||||
return std::make_shared<ScClimateState>(weatherType, gameState.ClimateNext.Temperature);
|
||||
}
|
||||
|
||||
static void Register(duk_context* ctx)
|
||||
|
|
|
@ -56,7 +56,6 @@ extern const FilterPaletteID ClimateWeatherGloomColours[4];
|
|||
// Climate data
|
||||
ClimateType gClimate;
|
||||
ClimateState gClimateCurrent;
|
||||
ClimateState gClimateNext;
|
||||
uint16_t gClimateUpdateTimer;
|
||||
uint16_t gClimateLightningFlash;
|
||||
|
||||
|
@ -123,6 +122,8 @@ void ClimateUpdate()
|
|||
{
|
||||
PROFILED_FUNCTION();
|
||||
|
||||
auto& gameState = GetGameState();
|
||||
|
||||
// Only do climate logic if playing (not in scenario editor or title screen)
|
||||
if (gScreenFlags & (~SCREEN_FLAGS_PLAYING))
|
||||
return;
|
||||
|
@ -138,39 +139,40 @@ void ClimateUpdate()
|
|||
}
|
||||
gClimateUpdateTimer--;
|
||||
}
|
||||
else if (!(GetGameState().CurrentTicks & 0x7F))
|
||||
else if (!(gameState.CurrentTicks & 0x7F))
|
||||
{
|
||||
if (gClimateCurrent.Temperature == gClimateNext.Temperature)
|
||||
if (gClimateCurrent.Temperature == gameState.ClimateNext.Temperature)
|
||||
{
|
||||
if (gClimateCurrent.WeatherGloom == gClimateNext.WeatherGloom)
|
||||
if (gClimateCurrent.WeatherGloom == gameState.ClimateNext.WeatherGloom)
|
||||
{
|
||||
gClimateCurrent.WeatherEffect = gClimateNext.WeatherEffect;
|
||||
gClimateCurrent.WeatherEffect = gameState.ClimateNext.WeatherEffect;
|
||||
_thunderTimer = 0;
|
||||
_lightningTimer = 0;
|
||||
|
||||
if (gClimateCurrent.Level == gClimateNext.Level)
|
||||
if (gClimateCurrent.Level == gameState.ClimateNext.Level)
|
||||
{
|
||||
gClimateCurrent.Weather = gClimateNext.Weather;
|
||||
gClimateCurrent.Weather = gameState.ClimateNext.Weather;
|
||||
ClimateDetermineFutureWeather(ScenarioRand());
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CLIMATE);
|
||||
ContextBroadcastIntent(&intent);
|
||||
}
|
||||
else if (gClimateNext.Level <= WeatherLevel::Heavy)
|
||||
else if (gameState.ClimateNext.Level <= WeatherLevel::Heavy)
|
||||
{
|
||||
gClimateCurrent.Level = static_cast<WeatherLevel>(ClimateStepWeatherLevel(
|
||||
static_cast<int8_t>(gClimateCurrent.Level), static_cast<int8_t>(gClimateNext.Level)));
|
||||
static_cast<int8_t>(gClimateCurrent.Level), static_cast<int8_t>(gameState.ClimateNext.Level)));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gClimateCurrent.WeatherGloom = ClimateStepWeatherLevel(
|
||||
gClimateCurrent.WeatherGloom, gClimateNext.WeatherGloom);
|
||||
gClimateCurrent.WeatherGloom, gameState.ClimateNext.WeatherGloom);
|
||||
GfxInvalidateScreen();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gClimateCurrent.Temperature = ClimateStepWeatherLevel(gClimateCurrent.Temperature, gClimateNext.Temperature);
|
||||
gClimateCurrent.Temperature = ClimateStepWeatherLevel(
|
||||
gClimateCurrent.Temperature, gameState.ClimateNext.Temperature);
|
||||
auto intent = Intent(INTENT_ACTION_UPDATE_CLIMATE);
|
||||
ContextBroadcastIntent(&intent);
|
||||
}
|
||||
|
@ -298,18 +300,19 @@ static int8_t ClimateStepWeatherLevel(int8_t currentWeatherLevel, int8_t nextWea
|
|||
static void ClimateDetermineFutureWeather(int32_t randomDistribution)
|
||||
{
|
||||
int32_t month = GetDate().GetMonth();
|
||||
auto& gameState = GetGameState();
|
||||
|
||||
// Generate a random variable with values 0 up to DistributionSize-1 and chose weather from the distribution table
|
||||
// accordingly
|
||||
const WeatherTransition* transition = &ClimateTransitions[static_cast<uint8_t>(gClimate)][month];
|
||||
WeatherType nextWeather = (transition->Distribution[((randomDistribution & 0xFF) * transition->DistributionSize) >> 8]);
|
||||
gClimateNext.Weather = nextWeather;
|
||||
gameState.ClimateNext.Weather = nextWeather;
|
||||
|
||||
const auto nextWeatherState = &ClimateWeatherData[EnumValue(nextWeather)];
|
||||
gClimateNext.Temperature = transition->BaseTemperature + nextWeatherState->TemperatureDelta;
|
||||
gClimateNext.WeatherEffect = nextWeatherState->EffectLevel;
|
||||
gClimateNext.WeatherGloom = nextWeatherState->GloomLevel;
|
||||
gClimateNext.Level = nextWeatherState->Level;
|
||||
gameState.ClimateNext.Temperature = transition->BaseTemperature + nextWeatherState->TemperatureDelta;
|
||||
gameState.ClimateNext.WeatherEffect = nextWeatherState->EffectLevel;
|
||||
gameState.ClimateNext.WeatherGloom = nextWeatherState->GloomLevel;
|
||||
gameState.ClimateNext.Level = nextWeatherState->Level;
|
||||
|
||||
gClimateUpdateTimer = 1920;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,6 @@ struct ClimateState
|
|||
|
||||
extern ClimateType gClimate;
|
||||
extern ClimateState gClimateCurrent;
|
||||
extern ClimateState gClimateNext;
|
||||
extern uint16_t gClimateUpdateTimer;
|
||||
extern uint16_t gClimateLightningFlash;
|
||||
|
||||
|
|
Loading…
Reference in New Issue