File: AngleKey.h

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (61 lines) | stat: -rw-r--r-- 1,296 bytes parent folder | download | duplicates (3)
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
#pragma once

#include "math/Quaternion.h"
#include "math/FloatTools.h"
#include <sigc++/trackable.h>
#include <functional>

class Entity;

namespace entity
{

/// Wrapper for an "angle" spawnarg
class AngleKey: public sigc::trackable
{
private:
	std::function<void()> _angleChanged;

    float _value;

public:
    static const float IDENTITY;

    AngleKey(const std::function<void()>& angleChanged) :
        _angleChanged(angleChanged),
        _value(IDENTITY)
    {}

    float getValue() const
    {
        return _value;
    }

    void setValue(float value)
    {
        _value = value;
    }

    // Callback method invoked when the corresponding spawnarg changes
    void angleChanged(const std::string& value);

    void write(Entity* entity) const
    {
        writeToEntity(_value, entity);
    }

    // Writes the given angle value as angle spawnarg to the given entity
    // Doesn't remove a pre-existing angle key even if its future value will be 0
    static void writeToEntity(double angle, Entity* entity);

    // Returns the new angle value rotated by the given quaternion
    static float getRotatedValue(float angle, const Quaternion& rotation);

private:
    float getNormalisedAngle(float angle)
    {
	    return float_mod(angle, 360.0f);
    }
};

} // namespace