File: hook_conditions.h

package info (click to toggle)
freespace2 24.2.0%2Brepack-3
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 43,740 kB
  • sloc: cpp: 595,005; ansic: 21,741; python: 1,174; sh: 457; makefile: 243; xml: 181
file content (140 lines) | stat: -rw-r--r-- 2,946 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
135
136
137
138
139
140
#pragma once

#include <linb/any.hpp>

class object;
class ship;
struct weapon;
class ship_subsys;
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 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;
	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;
};

}
}

#undef HOOK_DEFINE_CONDITIONS