File: EffectHostVector.cpp

package info (click to toggle)
freespace2 25.0.0~rc11%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 47,232 kB
  • sloc: cpp: 657,500; ansic: 22,305; sh: 293; python: 200; makefile: 198; xml: 181
file content (47 lines) | stat: -rw-r--r-- 1,618 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
#include "EffectHostVector.h"

#include "math/vecmat.h"

EffectHostVector::EffectHostVector(vec3d position, matrix orientation, vec3d velocity, matrix orientationOverride, bool orientationOverrideRelative) :
	EffectHost(orientationOverride, orientationOverrideRelative), m_position(position), m_orientation(orientation), m_velocity(velocity), m_velocityMagnitudeOverride(std::nullopt) {}

//Vector hosts can never have a parent, so it'll always return global space
std::pair<vec3d, matrix> EffectHostVector::getPositionAndOrientation(bool /*relativeToParent*/, float /*interp*/, const std::optional<vec3d>& tabled_offset) const {
	vec3d pos = m_position;
	if (tabled_offset) {
		vec3d offset;
		vm_vec_unrotate(&offset, &(*tabled_offset), &m_orientation);
		pos += offset;
	}

	//In relative mode, add the override orientation, otherwise just override
	matrix orientation = m_orientationOverrideRelative ? m_orientationOverride * m_orientation : m_orientationOverride;

	return { pos, orientation };
}

vec3d EffectHostVector::getVelocity() const {
	return m_velocity;
}

float EffectHostVector::getVelocityMagnitude() const {
	if (m_velocityMagnitudeOverride)
		return *m_velocityMagnitudeOverride;
	else
		return EffectHost::getVelocityMagnitude();
}

float EffectHostVector::getHostRadius() const {
	if (m_radius)
		return *m_radius;
	else
		return EffectHost::getHostRadius();
};

void EffectHostVector::setVelocityMagnitudeOverride(float velocityMagnitudeOverride) {
	m_velocityMagnitudeOverride.emplace(velocityMagnitudeOverride);
}

void EffectHostVector::setRadius(float radius) {
	m_radius.emplace(radius);
}