1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef ENV_RESOURCE_HANDLER_H
#define ENV_RESOURCE_HANDLER_H
#include <vector>
#include "Sim/Misc/GlobalConstants.h"
#include "System/float3.h"
class CUnit;
// updates time-varying global environment (wind, tidal) energy resources
class EnvResourceHandler
{
CR_DECLARE_STRUCT(EnvResourceHandler)
public:
EnvResourceHandler() { ResetState(); }
EnvResourceHandler(const EnvResourceHandler&) = delete;
EnvResourceHandler& operator = (const EnvResourceHandler&) = delete;
void ResetState();
void LoadTidal(float curStrength) { curTidalStrength = curStrength; }
void LoadWind(float minStrength, float maxStrength);
void Update();
bool AddGenerator(CUnit* u);
bool DelGenerator(CUnit* u);
float GetMaxWindStrength() const { return maxWindStrength; }
float GetMinWindStrength() const { return minWindStrength; }
float GetAverageWindStrength() const { return ((minWindStrength + maxWindStrength) * 0.5f); }
float GetCurrentWindStrength() const { return curWindStrength; }
float GetCurrentTidalStrength() const { return curTidalStrength; }
const float3& GetCurrentWindVec() const { return curWindVec; }
const float3& GetCurrentWindDir() const { return curWindDir; }
private:
// update all generators every 15 seconds
static constexpr int WIND_UPDATE_RATE = 15 * GAME_SPEED;
float curTidalStrength = 0.0f;
float curWindStrength = 0.0f;
float minWindStrength = 0.0f;
float maxWindStrength = 0.0f;
float3 curWindDir;
float3 curWindVec; // curWindDir * curWindStrength
float3 newWindVec;
float3 oldWindVec;
int windDirTimer = 0;
std::vector<int> allGeneratorIDs;
std::vector<int> newGeneratorIDs;
};
extern EnvResourceHandler envResHandler;
#endif
|