File: BuiltinActionDefinition.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 (37 lines) | stat: -rw-r--r-- 1,091 bytes parent folder | download | duplicates (2)
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
#pragma once

#include "ActionDefinition.h"

#include "expression/Value.h"

namespace actions {

template <typename TAction>
class BuiltinActionDefinition : public ActionDefinition {
	using ActionValueType = typename TAction::ValueType;

  public:
	BuiltinActionDefinition(SCP_string name)
		: ActionDefinition(std::move(name), {{"parameter", expression::ValueTypeTraits<ActionValueType>::type}})
	{
	}
	~BuiltinActionDefinition() override = default;

	flagset<ProgramContextFlags> getRequiredContext() const override
	{
		return flagset<ProgramContextFlags>(TAction::getRequiredExecutionContextFlags());
	}

	std::unique_ptr<Action> createAction(
		const SCP_unordered_map<SCP_string, expression::ActionExpression>& parameterExpressions) const override
	{
		const auto paramIter = parameterExpressions.find("parameter");

		// This should have been caught earlier
		Assertion(paramIter != parameterExpressions.cend(), "Could not find built-in parameter!");

		return std::unique_ptr<Action>(new TAction(paramIter->second.template asTyped<ActionValueType>()));
	}
};

} // namespace actions