Files
firestorm/Gameleap/code/mw4/Code/MW4/HeatManager.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

262 lines
5.4 KiB
C++

#pragma once
#include "MW4.hpp"
namespace Adept
{
class Effect;
}
namespace MechWarrior4
{
class Mech;
void HeatSecurityCheckStart();
void HeatSecurityCheckStop();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// HeatObject
//
class HeatObject: public Stuff::Plug
{
public:
HeatObject(Stuff::Scalar time_applied, Stuff::Scalar heat_applied, bool is_permanent = false) :
Stuff::Plug(Stuff::Plug::DefaultData)
{
timesApplied=(int)(time_applied / 0.5f);
heatApplied=(Stuff::Scalar)(heat_applied / timesApplied);
currentCount=0;
isPermanent = is_permanent;
}
HeatObject(Stuff::Scalar heat_applied, bool is_permanent = true) :
Stuff::Plug(Stuff::Plug::DefaultData)
{
timesApplied=0;
heatApplied=heat_applied;
currentCount=0;
isPermanent = is_permanent;
}
~HeatObject() {}
int timesApplied;
Stuff::Scalar heatApplied;
int currentCount;
bool isPermanent;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// HeatManager
//
typedef Adept::Receiver__ClassData HeatManager__ClassData;
typedef Adept::Receiver__Message HeatManager__Message;
class HeatManager:
public Adept::Receiver
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Inheritance Support
//
public:
typedef HeatManager__ClassData ClassData;
typedef HeatManager__Message Message;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construction, Destruction, Testing
//
public:
static void
InitializeClass();
static void
TerminateClass();
HeatManager(
Stuff::Scalar max_heat,
Stuff::Scalar current_heat,
Stuff::Scalar max_coolant,
Stuff::Scalar current_coolant,
Mech *parent,
Adept::ResourceID stream_id
);
~HeatManager();
void
Reuse();
void
TestInstance();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Simulation support
//
public:
bool shutdown;
//
//------------
//Heat Support
//------------
//
bool
Execute();
void
AddHeat(Stuff::Scalar added_heat);
HeatObject*
AddHeatObject(Stuff::Scalar time_applied, Stuff::Scalar heat_applied, bool is_permanent=false);
HeatObject*
AddHeatObject(Stuff::Scalar heat_applied, bool is_permanent=true);
Stuff::Scalar
GetHeat()
{Check_Object(this); return heatValue;}
Stuff::Scalar
GetMaxHeat()
{Check_Object(this); return maxHeat;}
Stuff::Scalar
GetHeatPercentage()
{
Check_Object(this);
if (maxHeat == 0.0f)
return 0.0f;
Stuff::Scalar heat_percent = (Stuff::Scalar)(heatValue / maxHeat);
Clamp(heat_percent,0.0f,1.0f);
return heat_percent;
}
Stuff::Scalar
EstimateMaxCurrentHeat();
void
ApplyMovementHeat(Stuff::Scalar current_rate, Stuff::Scalar max_rate);
Stuff::ChainOf<HeatObject *> heatObjects;
//
//---------------
//Coolant Support
//---------------
//
void
AddCoolant(Stuff::Scalar added_coolant)
{Check_Object(this); coolantValue += added_coolant;
Clamp(coolantValue, 0.0f, maxCoolant);
isCoolantDirty = 1;}
Stuff::Scalar
GetCoolant()
{Check_Object(this); return coolantValue;}
Stuff::Scalar
GetCoolantPercentage()
{
Check_Object(this);
if (maxCoolant == 0.0f)
return 0.0f;
Scalar percent = coolantValue / maxCoolant;
Clamp(percent, 0.0f, 1.0f);
return percent;
}
Stuff::Scalar
GetMaxCoolant()
{Check_Object(this); return maxCoolant;}
void
SetMaxCoolant(Stuff::Scalar max_coolant)
{Check_Object(this); maxCoolant = max_coolant;}
void SetCooling(int new_int);
int
IsCooling()
{Check_Object(this); return (isCooling&&(coolantValue>0));}
//
//Heat Effects
//
Stuff::Scalar
GetSpeedMultiplier();
Stuff::Scalar
GetTorsoTwistMultiplier();
//Note these are used for the HUD only. The return an int value of the percentage
void
SetCoolantPercentage();
void
SetHeatPercentage();
void
SetCoolantPercentage(Stuff::Scalar percentage);
void
SetHeatPercentage(Stuff::Scalar percentage);
bool
OverrideShutDown();
int heatPercentage;
int coolantPercentage;
int isHeatDirty;
int isCoolantDirty;
Stuff::Time lastTime;
Stuff::Time lastCoolTime;
Stuff::SlotOf<Adept::Effect *>
coolantEffect;
Stuff::SlotOf<Adept::Effect *>
overHeatEffect;
static bool g_OverrideHeatOption;
protected:
Stuff::Scalar
heatValue;
Stuff::Scalar
maxHeat;
Stuff::Scalar
coolantValue;
Stuff::Scalar
maxCoolant;
int isCooling;
bool m_shuttingDown;
bool m_startingUp;
Stuff::Scalar
m_movementHeat;
Stuff::Scalar
m_doubleMovementHeat;
Stuff::Scalar
m_heatEffectsSpeed;
Stuff::Scalar
m_shutDownTime;
Stuff::Time
m_shutDownTimer;
Stuff::Time
m_startUpTimer;
Stuff::Time
m_overHeatCheckTime;
Stuff::Time
m_overHeatTimer;
// MSL 5.03 Lava
Stuff::Time
m_maxHeatTimer;
bool
over90;
// MSL 5.03 Lava
bool
atMaxHeat;
Mech *m_parentMech;
HeatObject *m_movementHeatObject;
};
}