File: hook_conditions.h

package info (click to toggle)
freespace2 24.0.2%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: trixie
  • size: 43,188 kB
  • sloc: cpp: 583,107; ansic: 21,729; python: 1,174; sh: 464; makefile: 248; xml: 181
file content (134 lines) | stat: -rw-r--r-- 2,835 bytes parent folder | download
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
#pragma once

#include <linb/any.hpp>

class object;
class ship;
struct weapon;
class ship_subsys;

#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 linb::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;
	int 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;
};

}
}

#undef HOOK_DEFINE_CONDITIONS