mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-07 11:13:53 +03:00
103 lines
2 KiB
C++
103 lines
2 KiB
C++
![]() |
#include "framework.h"
|
||
|
#include "savegame.h"
|
||
|
#include "sky.h"
|
||
|
#include "Sound\sound.h"
|
||
|
#include "Scripting\GameScriptLevel.h"
|
||
|
|
||
|
using namespace TEN::Effects::Sky;
|
||
|
|
||
|
namespace TEN {
|
||
|
namespace Effects {
|
||
|
namespace Sky
|
||
|
{
|
||
|
SkyController Sky;
|
||
|
|
||
|
void SkyController::UpdateSky()
|
||
|
{
|
||
|
GameScriptLevel* level = g_GameFlow->GetLevel(CurrentLevel);
|
||
|
|
||
|
if (level->Layer1.Enabled)
|
||
|
{
|
||
|
Position1 += level->Layer1.CloudSpeed;
|
||
|
if (Position1 <= 9728)
|
||
|
{
|
||
|
if (Position1 < 0)
|
||
|
Position1 += 9728;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Position1 -= 9728;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (level->Layer2.Enabled)
|
||
|
{
|
||
|
Position2 += level->Layer2.CloudSpeed;
|
||
|
if (Position2 <= 9728)
|
||
|
{
|
||
|
if (Position2 < 0)
|
||
|
Position2 += 9728;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Position2 -= 9728;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
auto color = Vector4(level->Layer1.R / 255.0f, level->Layer1.G / 255.0f, level->Layer1.B / 255.0f, 1.0f);
|
||
|
|
||
|
// Storm
|
||
|
if (level->Storm)
|
||
|
{
|
||
|
if (LightningCount || LightningRand)
|
||
|
{
|
||
|
UpdateStorm();
|
||
|
if (StormTimer > -1)
|
||
|
StormTimer--;
|
||
|
if (!StormTimer)
|
||
|
SoundEffect(SFX_TR4_THUNDER_RUMBLE, NULL, 0);
|
||
|
}
|
||
|
else if (!(rand() & 0x7F))
|
||
|
{
|
||
|
LightningCount = (rand() & 0x1F) + 16;
|
||
|
StormTimer = (rand() & 3) + 12;
|
||
|
}
|
||
|
|
||
|
auto flashBrightness = SkyStormColor / 255.0f;
|
||
|
auto r = std::clamp(color.x + flashBrightness, 0.0f, 1.0f);
|
||
|
auto g = std::clamp(color.y + flashBrightness, 0.0f, 1.0f);
|
||
|
auto b = std::clamp(color.z + flashBrightness, 0.0f, 1.0f);
|
||
|
|
||
|
Color = Vector4(r, g, b, color.w);
|
||
|
}
|
||
|
else
|
||
|
Color = color;
|
||
|
}
|
||
|
|
||
|
void SkyController::UpdateStorm()
|
||
|
{
|
||
|
LightningCount--;
|
||
|
|
||
|
if (LightningCount <= 0)
|
||
|
{
|
||
|
SkyStormColor = 0;
|
||
|
LightningRand = 0;
|
||
|
}
|
||
|
else if (LightningCount < 5 && SkyStormColor < 50)
|
||
|
{
|
||
|
auto newColor =SkyStormColor - LightningCount * 2;
|
||
|
if (newColor < 0)
|
||
|
newColor = 0;
|
||
|
SkyStormColor = newColor;
|
||
|
}
|
||
|
else if (LightningCount)
|
||
|
{
|
||
|
LightningRand = ((rand() & 0x1FF - LightningRand) >> 1) + LightningRand;
|
||
|
SkyStormColor2 += LightningRand * SkyStormColor2 >> 8;
|
||
|
SkyStormColor = SkyStormColor2;
|
||
|
if (SkyStormColor > 255)
|
||
|
SkyStormColor = 255;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}}}
|