File: SetDirectionAction.cpp

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 (39 lines) | stat: -rw-r--r-- 927 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
38
39

#include "SetDirectionAction.h"

#include "math/vecmat.h"
#include "parse/parselo.h"

#include <utility>

namespace actions {
namespace types {

flagset<ProgramContextFlags> SetDirectionAction::getRequiredExecutionContextFlags()
{
	return flagset<ProgramContextFlags>{};
}

SetDirectionAction::SetDirectionAction(expression::TypedActionExpression<vec3d> newDirExpression)
	: m_newDirExpression(std::move(newDirExpression))
{
}
SetDirectionAction::~SetDirectionAction() = default;

ActionResult SetDirectionAction::execute(ProgramLocals& locals) const
{
	auto dir = m_newDirExpression.execute(locals.variables);

	vm_vec_normalize_safe(&dir);

	locals.variables.setValue({"locals", "direction"}, expression::Value(dir));
	return ActionResult::Finished;
}

std::unique_ptr<Action> SetDirectionAction::clone() const
{
	return std::unique_ptr<Action>(new SetDirectionAction(*this));
}

} // namespace types
} // namespace actions