Toggle navigation
ivorium
iv_components
Example project
GitHub
Main Page
Modules
Classes
Files
File List
File Members
ivorium_graphics
Animation
Animation
AnimNode.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
AnimConnector.hpp
"
4
#include "../../Defs.hpp"
5
#include <
ivorium_core/ivorium_core.hpp
>
6
7
namespace
iv
8
{
9
10
extern
TableId
AnimNode_DebugTable
;
11
class
AnimSystem;
12
15
class
AnimNodeI
16
{
17
public
:
18
ClientMarker
cm
;
19
20
AnimNodeI
(
Instance
*
inst
);
21
~AnimNodeI
();
22
23
Instance
*
instance
()
const
;
24
void
status
(
TableDebugView
* view );
25
29
AnimNodeI
*
label
( std::string
const
& );
30
std::string
const
&
label
()
const
;
31
34
virtual
void
StringIO_SetTarget
(
const
char
* source,
Context
const
* context ){}
35
virtual
std::string
StringIO_GetTarget
(
Context
const
* context ){
return
""
; }
36
37
//------------------------- anim graph ----------------------------------
40
void
anim_setParent
(
AnimConnector
* );
41
void
anim_unsetParent
(
AnimConnector
* );
42
AnimConnector
*
anim_getParent
();
43
46
void
anim_addChild
(
AnimConnector
* );
47
void
anim_removeChild
(
AnimConnector
* );
48
void
anim_eachChild
( std::function<
void
(
AnimConnector
* ) >
const
& );
49
50
//------------------------- update algorithm ----------------------------------------
51
55
void
System_UpdateStart
();
56
60
void
System_UpdateEnd
();
61
65
std::optional< unsigned >
System_UpdateId
()
const
;
66
70
void
Connector_RequestStep
(
Anim_float
step_distance );
71
75
void
Connector_UpdateDistance
(
Anim_float
new_distance );
76
77
//------------------------- update read fields -------------------------------------------
81
Anim_float
Step
();
82
87
bool
Active
();
88
92
void
Activate
();
93
98
Anim_float
Distance
();
99
102
bool
IsInTarget
();
103
107
Anim_float
Speed
()
const
;
108
AnimNodeI
*
Speed
(
Anim_float
);
109
AnimNodeI
*
Speed_inf
();
110
111
protected
:
112
// AnimNodeI
113
virtual
void
UpdateLastTarget
(){};
114
virtual
bool
TargetStabilized
(){
return
true
; }
115
116
static
const
constexpr
unsigned
ActiveCooldownFrames
= 5;
117
118
protected
:
119
// identity
120
Instance
*
inst
;
121
AnimSystem
*
as
;
122
std::string
_label
;
123
Anim_float
_speed
;
124
bool
_anim_initialized
;
125
126
// structure
127
AnimConnector
*
_parent
;
128
std::unordered_set< AnimConnector * >
_children
;
129
130
//
131
std::optional< unsigned >
_activation_id
;
132
unsigned
_active_cooldown
;
133
bool
_active
;
134
135
Anim_float
_distance_start
;
136
Anim_float
_distance_end
;
137
Anim_float
_distance_working
;
138
139
Anim_float
_requested_step
;
140
141
std::optional< unsigned >
_update_id
;
142
143
bool
in_target_notified
;
144
};
145
148
template
<
class
T >
149
class
AnimNode
:
public
AnimNodeI
150
{
151
public
:
152
ClientMarker
cm
;
153
AnimNode
(
Instance
* inst, T
const
& initial_value );
154
void
status
(
TableDebugView
* view );
155
156
AnimNode< T >
*
label
( std::string
const
& );
157
std::string
const
&
label
()
const
;
158
159
virtual
void
StringIO_SetTarget
(
const
char
* source,
Context
const
* context )
override
;
160
virtual
std::string
StringIO_GetTarget
(
Context
const
* context )
override
;
161
162
//--------------------- anim state and update ----------------------------------------
165
Anim_float
Speed
()
const
;
166
AnimNode< T >
*
Speed
(
Anim_float
);
167
AnimNode< T >
*
Speed_inf
();
168
172
AnimNode< T >
*
Target
( T
const
& target );
173
T
const
&
Target
();
174
178
T
const
&
LastTarget
();
179
182
bool
IsInTarget
();
183
bool
IsInTarget
( T
const
& target );
184
185
private
:
186
virtual
void
UpdateLastTarget()
override
;
187
virtual
bool
TargetStabilized()
override
;
188
189
private
:
190
T _target;
191
T _last_target;
192
};
193
194
}
195
196
#include "
AnimNode.inl
"