blob: 470d22b1e9badabc95378dffafee7797e9c212ab (
plain)
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
|
#pragma once
#include "../std/map.hpp"
#include "../std/list.hpp"
#include "../std/function.hpp"
#include "../base/mutex.hpp"
namespace anim
{
class Controller;
// Interface for single animation task
class Task
{
public:
typedef function<void()> TCallback;
enum EState
{
EReady,
EInProgress,
ECancelled,
EEnded
};
private:
EState m_State;
map<EState, list<TCallback> > m_Callbacks;
void PerformCallbacks(EState state);
threads::Mutex m_mutex;
Controller * m_controller;
protected:
void SetState(EState state);
friend class Controller;
void SetController(Controller * controller);
public:
Task();
virtual ~Task();
Controller * GetController() const;
EState State() const;
virtual void OnStart(double ts);
virtual void OnStep(double ts);
virtual void OnEnd(double ts);
virtual void OnCancel(double ts);
void Start();
void Cancel();
void End();
bool IsCancelled() const;
bool IsEnded() const;
bool IsRunning() const;
bool IsReady() const;
void Lock();
void Unlock();
/// is this animation task animate something,
/// which is directly changing visual appearance.
virtual bool IsVisual() const;
void AddCallback(EState state, TCallback const & cb);
};
}
|