115 lines
3.2 KiB
C++
115 lines
3.2 KiB
C++
#pragma once
|
|
#include "design/effector.h"
|
|
#include "design/design.h"
|
|
#include "util/basic_type.h"
|
|
#include "util/hex_grid.h"
|
|
|
|
class SaveMessage;
|
|
|
|
enum HexFlags {
|
|
HF_Active = 0x1,
|
|
HF_Destroyed = 0x2,
|
|
HF_NoHP = 0x4,
|
|
HF_Gone = 0x8,
|
|
HF_NoRepair = 0x10,
|
|
};
|
|
|
|
enum DamageFlags {
|
|
DF_DestroyedObject = 0x40000000,
|
|
};
|
|
|
|
namespace net {
|
|
struct Message;
|
|
};
|
|
|
|
class CScriptAny;
|
|
class Blueprint {
|
|
public:
|
|
struct HexStatus {
|
|
unsigned char flags;
|
|
unsigned char hp;
|
|
};
|
|
|
|
struct SysStatus {
|
|
unsigned short workingHexes;
|
|
EffectStatus status;
|
|
};
|
|
|
|
const Design* design;
|
|
HexStatus* hexes;
|
|
SysStatus* subsystems;
|
|
BasicType* states;
|
|
double* effectorStates;
|
|
EffectorTarget* effectorTargets;
|
|
double currentHP;
|
|
double quadrantHP[4];
|
|
float removedHP;
|
|
double shipEffectiveness;
|
|
unsigned statusID;
|
|
unsigned short destroyedHexes;
|
|
bool designChanged;
|
|
bool hpDelta;
|
|
bool holdFire;
|
|
float hpFactor;
|
|
vec2i repairingHex;
|
|
CScriptAny** data;
|
|
|
|
HexStatus* getHexStatus(unsigned index);
|
|
HexStatus* getHexStatus(unsigned x, unsigned y);
|
|
SysStatus* getSysStatus(unsigned index);
|
|
SysStatus* getSysStatus(unsigned x, unsigned y);
|
|
CScriptAny* getHookData(unsigned index);
|
|
|
|
Blueprint();
|
|
|
|
void destroy(Object* obj);
|
|
void preClear();
|
|
~Blueprint();
|
|
|
|
void init(Object* obj);
|
|
float think(Object* obj, double time);
|
|
void ownerChange(Object* obj, Empire* prevEmpire, Empire* newEmpire);
|
|
|
|
bool hasTagActive(int index);
|
|
double getTagEfficiency(int index, bool ignoreInactive = true);
|
|
double getEfficiencySum(int variable, int tag = -1, bool ignoreInactive = true);
|
|
double getEfficiencyFactor(int variable, int tag = -1, bool ignoreInactive = true);
|
|
|
|
bool doesAutoTarget(Object* obj, Object* target);
|
|
bool canTarget(Object* obj, Object* target);
|
|
|
|
void target(Object* obj, Object* target, TargetFlags flags = TF_Target);
|
|
void target(Object* obj, unsigned efftrIndex, Object* target, TargetFlags flags = TF_Target);
|
|
void target(Object* obj, const Subsystem* sys, Object* target, TargetFlags flags = TF_Target);
|
|
void clearTracking(Object* obj);
|
|
Object* getCombatTarget();
|
|
|
|
vec3d getOptimalFacing(int sysVariable, int tag = -1, bool ignoreInactive = true);
|
|
|
|
void damage(Object* obj, DamageEvent& evt, const vec2u& hex);
|
|
void damage_internal(Object* obj, DamageEvent& evt, const vec2u& hex);
|
|
|
|
void damage(Object* obj, DamageEvent& evt, const vec2u& hex, HexGridAdjacency dir, bool runGlobal);
|
|
void damage(Object* obj, DamageEvent& evt, const vec2u& hex, bool runGlobal);
|
|
bool globalDamage(Object* obj, DamageEvent& evt);
|
|
|
|
void damage(Object* obj, DamageEvent& evt, const vec2d& direction);
|
|
void damage(Object* obj, DamageEvent& evt, double position, const vec2d& direction);
|
|
void damage(Object* obj, DamageEvent& evt, const vec2u& position, const vec2d& endPoint);
|
|
void create(Object* obj, const Design* design);
|
|
void start(Object* obj, bool fromRetrofit = false);
|
|
void retrofit(Object* obj, const Design* design);
|
|
|
|
double repair(Object* obj, double amount);
|
|
double repair(Object* obj, const vec2u& hex, double amount);
|
|
|
|
void sendDetails(Object* obj, net::Message& msg);
|
|
void recvDetails(Object* obj, net::Message& msg);
|
|
|
|
bool sendDelta(Object* obj, net::Message& msg);
|
|
void recvDelta(Object* obj, net::Message& msg);
|
|
|
|
void save(Object* obj, SaveMessage& file);
|
|
void load(Object* obj, SaveMessage& file);
|
|
};
|