Skip to content

Commit 81017dc

Browse files
committed
Add weather control exports
1 parent 258e1e7 commit 81017dc

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

src/xrEngine/Environment.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,20 @@ void CEnvironment::StopWFX ()
397397
#endif
398398
}
399399

400+
void CEnvironment::SetEnvDesc(LPCSTR weather_section, CEnvDescriptor*& e)
401+
{
402+
for (const auto& [key, descriptors] : WeatherCycles) {
403+
for (CEnvDescriptor* descriptor : descriptors) {
404+
if (descriptor->m_identifier == weather_section) {
405+
e = descriptor;
406+
return;
407+
}
408+
}
409+
}
410+
411+
Msg("!Could not set env descriptor from section %s", weather_section);
412+
}
413+
400414
IC bool lb_env_pred(const CEnvDescriptor* x, float val)
401415
{ return x->exec_time < val; }
402416

src/xrEngine/Environment.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ class ENGINE_API CEnvironment
241241

242242
void calculate_dynamic_sun_dir();
243243
public:
244+
void SetEnvDesc(LPCSTR weather_section, CEnvDescriptor*& e);
245+
244246
static bool sort_env_pred (const CEnvDescriptor* x, const CEnvDescriptor* y)
245247
{ return x->exec_time < y->exec_time; }
246248
static bool sort_env_etl_pred (const CEnvDescriptor* x, const CEnvDescriptor* y)
@@ -326,14 +328,15 @@ class ENGINE_API CEnvironment
326328
void OnDeviceCreate ();
327329
void OnDeviceDestroy ();
328330

331+
float GetGameTime() { return fGameTime; }
332+
329333
// editor-related
330334
#ifdef _EDITOR
331335
public:
332336
float ed_from_time ;
333337
float ed_to_time ;
334338
public:
335339
void ED_Reload ();
336-
float GetGameTime (){return fGameTime;}
337340
#else // #ifdef _EDITOR
338341

339342
bool m_paused;

src/xrGame/level_script.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,47 @@ CScriptGameObject *get_object_by_id(u16 id)
177177
return pGameObject->lua_game_object();
178178
}
179179

180+
LPCSTR get_past_wdesc()
181+
{
182+
return (g_pGamePersistent->Environment().Current[0] ? g_pGamePersistent->Environment().Current[0]->m_identifier.c_str() : "null");
183+
}
184+
185+
LPCSTR get_next_wdesc()
186+
{
187+
return (g_pGamePersistent->Environment().Current[1] ? g_pGamePersistent->Environment().Current[1]->m_identifier.c_str() : "null");
188+
}
189+
190+
float get_past_wdesc_execution_time()
191+
{
192+
return (g_pGamePersistent->Environment().Current[0] ? g_pGamePersistent->Environment().Current[0]->exec_time : -1.f);
193+
}
194+
195+
float get_next_wdesc_execution_time()
196+
{
197+
return (g_pGamePersistent->Environment().Current[1] ? g_pGamePersistent->Environment().Current[1]->exec_time : -1.f);
198+
}
199+
200+
float get_weather_game_time()
201+
{
202+
return (&g_pGamePersistent->Environment() ? g_pGamePersistent->Environment().GetGameTime() : -1.f);
203+
}
204+
205+
void set_past_wdesc(LPCSTR WeatherSection)
206+
{
207+
if (&g_pGamePersistent->Environment())
208+
{
209+
g_pGamePersistent->Environment().SetEnvDesc(WeatherSection, g_pGamePersistent->Environment().Current[0]);
210+
}
211+
}
212+
213+
void set_next_wdesc(LPCSTR WeatherSection)
214+
{
215+
if (&g_pGamePersistent->Environment())
216+
{
217+
g_pGamePersistent->Environment().SetEnvDesc(WeatherSection, g_pGamePersistent->Environment().Current[1]);
218+
}
219+
}
220+
180221
LPCSTR get_weather ()
181222
{
182223
return (*g_pGamePersistent->Environment().GetWeather());
@@ -960,6 +1001,13 @@ void CLevel::script_register(lua_State *L)
9601001
def("get_weather", get_weather),
9611002
def("set_weather", set_weather),
9621003
def("set_weather_fx", set_weather_fx),
1004+
def("set_past_weather", set_past_wdesc),
1005+
def("set_next_weather", set_next_wdesc),
1006+
def("get_weather_game_time", get_weather_game_time),
1007+
def("get_past_wdesc_execution_time", get_past_wdesc_execution_time),
1008+
def("get_next_wdesc_execution_time", get_next_wdesc_execution_time),
1009+
def("get_past_weather", get_past_wdesc),
1010+
def("get_next_weather", get_next_wdesc),
9631011
def("start_weather_fx_from_time", start_weather_fx_from_time),
9641012
def("is_wfx_playing", is_wfx_playing),
9651013
def("get_wfx_time", get_wfx_time),

0 commit comments

Comments
 (0)