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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
#pragma once
#include <any>
class object;
class ship;
struct weapon;
class ship_subsys;
struct object_ship_wing_point_team;
enum class ArrivalLocation;
#define HOOK_DEFINE_CONDITIONS static const SCP_unordered_map<SCP_string, const std::unique_ptr<const ParseableCondition>> conditions
namespace scripting {
class EvaluatableCondition {
public:
virtual bool evaluate(const std::any& /*conditionContext*/) const {
return false;
};
virtual ~EvaluatableCondition() = default;
};
class ParseableCondition {
public:
SCP_string documentation;
virtual std::unique_ptr<EvaluatableCondition> parse(const SCP_string& /*input*/) const {
return make_unique<EvaluatableCondition>();
};
ParseableCondition() : documentation("Invalid Condition. Will never evaluate.") { }
virtual ~ParseableCondition() = default;
protected:
ParseableCondition(SCP_string documentation_) : documentation(std::move(documentation_)) { }
};
namespace hooks {
// ---- Hook Condition System Conditions ----
struct ControlActionConditions {
HOOK_DEFINE_CONDITIONS;
int action_index;
};
struct ShipSourceConditions {
HOOK_DEFINE_CONDITIONS;
const ship* source_shipp;
};
struct CollisionConditions {
HOOK_DEFINE_CONDITIONS;
struct ParticipatingObjects {
const object *objp_a, *objp_b;
} participating_objects;
};
struct ShipDeathConditions {
HOOK_DEFINE_CONDITIONS;
const ship* dying_shipp;
};
struct SubsystemDeathConditions {
HOOK_DEFINE_CONDITIONS;
const ship* affected_shipp;
const ship_subsys* destroyed_subsys; // As of yet unused
};
struct ShipDepartConditions {
HOOK_DEFINE_CONDITIONS;
const ship* leaving_shipp;
};
struct WeaponDeathConditions {
HOOK_DEFINE_CONDITIONS;
const weapon* dying_wep;
};
struct ObjectDeathConditions {
HOOK_DEFINE_CONDITIONS;
const object* dying_objp;
};
struct ShipArriveConditions {
HOOK_DEFINE_CONDITIONS;
const ship* spawned_shipp;
ArrivalLocation arrival_location; // As of yet unused
const object* spawn_anchor_objp; // As of yet unused
};
struct WeaponCreatedConditions {
HOOK_DEFINE_CONDITIONS;
const weapon* spawned_wep;
const object* parent_objp;
};
struct WeaponEquippedConditions {
HOOK_DEFINE_CONDITIONS;
const ship* user_shipp;
const object* target_objp; // As of yet unused
};
struct WeaponUsedConditions {
HOOK_DEFINE_CONDITIONS;
const ship* user_shipp;
const object* target; // As of yet unused
SCP_vector<int> weaponclasses;
bool isPrimary; // As of yet unused
};
struct WeaponSelectedConditions {
HOOK_DEFINE_CONDITIONS;
const ship* user_shipp;
int weaponclass, weaponclass_prev;
bool isPrimary; // As of yet unused
};
struct WeaponDeselectedConditions {
HOOK_DEFINE_CONDITIONS;
const ship* user_shipp;
int weaponclass, weaponclass_prev;
bool isPrimary; // As of yet unused
};
struct ObjectDrawConditions {
HOOK_DEFINE_CONDITIONS;
const object* drawn_from_objp;
};
struct KeyPressConditions {
HOOK_DEFINE_CONDITIONS;
int keycode;
};
struct CommOrderConditions {
HOOK_DEFINE_CONDITIONS;
const ship* source;
const object* target;
const object_ship_wing_point_team* reciever; // As of yet unused
};
} // namespace hooks
}
#undef HOOK_DEFINE_CONDITIONS
|