This repository has been archived by the owner on Jan 25, 2023. It is now read-only.
/
ObjectAnimation.h
78 lines (64 loc) · 3.01 KB
/
ObjectAnimation.h
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
// Copyright (c) 2008-2023 the Urho3D project
// License: MIT
#pragma once
#include "../Resource/Resource.h"
#include "../Scene/AnimationDefs.h"
namespace Urho3D
{
class ValueAnimation;
class ValueAnimationInfo;
class XMLElement;
class JSONValue;
/// Object animation class, an object animation include one or more attribute animations and theirs wrap mode and speed for an Animatable object.
class URHO3D_API ObjectAnimation : public Resource
{
URHO3D_OBJECT(ObjectAnimation, Resource);
public:
/// Construct.
explicit ObjectAnimation(Context* context);
/// Destruct.
~ObjectAnimation() override;
/// Register object factory.
/// @nobind
static void RegisterObject(Context* context);
/// Load resource from stream. May be called from a worker thread. Return true if successful.
bool BeginLoad(Deserializer& source) override;
/// Save resource. Return true if successful.
bool Save(Serializer& dest) const override;
/// Load from XML data. Return true if successful.
bool LoadXML(const XMLElement& source);
/// Save as XML data. Return true if successful.
bool SaveXML(XMLElement& dest) const;
/// Load from JSON data. Return true if successful.
bool LoadJSON(const JSONValue& source);
/// Save as JSON data. Return true if successful.
bool SaveJSON(JSONValue& dest) const;
/// Add attribute animation, attribute name can in following format: "attribute" or "#0/#1/attribute" or ""#0/#1/@component#1/attribute.
void AddAttributeAnimation
(const String& name, ValueAnimation* attributeAnimation, WrapMode wrapMode = WM_LOOP, float speed = 1.0f);
/// Remove attribute animation, attribute name can in following format: "attribute" or "#0/#1/attribute" or ""#0/#1/@component#1/attribute.
void RemoveAttributeAnimation(const String& name);
/// Remove attribute animation.
void RemoveAttributeAnimation(ValueAnimation* attributeAnimation);
/// Return attribute animation by name.
/// @property{get_attributeAnimations}
ValueAnimation* GetAttributeAnimation(const String& name) const;
/// Return attribute animation wrap mode by name.
/// @property{get_wrapModes}
WrapMode GetAttributeAnimationWrapMode(const String& name) const;
/// Return attribute animation speed by name.
/// @property{get_speeds}
float GetAttributeAnimationSpeed(const String& name) const;
/// Return all attribute animations infos.
const HashMap<String, SharedPtr<ValueAnimationInfo>>& GetAttributeAnimationInfos() const { return attributeAnimationInfos_; }
/// Return attribute animation info by name.
ValueAnimationInfo* GetAttributeAnimationInfo(const String& name) const;
private:
/// Send attribute animation added event.
void SendAttributeAnimationAddedEvent(const String& name);
/// Send attribute animation remove event.
void SendAttributeAnimationRemovedEvent(const String& name);
/// Name to attribute animation info mapping.
HashMap<String, SharedPtr<ValueAnimationInfo>> attributeAnimationInfos_;
};
}