animation_cache.h
1 /*************************************************************************/
2 /* animation_cache.h */
3 /*************************************************************************/
4 /* This file is part of: */
5 /* GODOT ENGINE */
6 /* http://www.godotengine.org */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
9 /* */
10 /* Permission is hereby granted, free of charge, to any person obtaining */
11 /* a copy of this software and associated documentation files (the */
12 /* "Software"), to deal in the Software without restriction, including */
13 /* without limitation the rights to use, copy, modify, merge, publish, */
14 /* distribute, sublicense, and/or sell copies of the Software, and to */
15 /* permit persons to whom the Software is furnished to do so, subject to */
16 /* the following conditions: */
17 /* */
18 /* The above copyright notice and this permission notice shall be */
19 /* included in all copies or substantial portions of the Software. */
20 /* */
21 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
22 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
23 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
24 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
25 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
26 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
27 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
28 /*************************************************************************/
29 #ifndef ANIMATION_CACHE_H
30 #define ANIMATION_CACHE_H
31 
32 #include "scene/resources/animation.h"
33 #include "scene/3d/skeleton.h"
34 
35 class AnimationCache : public Object {
36 
37  OBJ_TYPE(AnimationCache,Object);
38 
39  struct Path {
40 
41  RES resource;
42  Object *object;
43  Skeleton *skeleton; // haxor
44  Node *node;
45  Spatial *spatial;
46 
47  int bone_idx;
48  StringName property;
49  bool valid;
50  Path() { object=NULL; skeleton=NULL; node=NULL; bone_idx=-1; valid=false; spatial=NULL; }
51  };
52 
53  Set<Node*> connected_nodes;
54  Vector<Path> path_cache;
55 
56  Node *root;
57  Ref<Animation> animation;
58  bool cache_dirty;
59  bool cache_valid;
60 
61  void _node_exit_tree(Node *p_node);
62 
63  void _clear_cache();
64  void _update_cache();
65  void _animation_changed();
66 
67 protected:
68 
69  static void _bind_methods();
70 
71 public:
72 
73  void set_track_transform(int p_idx,const Transform& p_transform);
74  void set_track_value(int p_idx,const Variant& p_value);
75  void call_track(int p_idx,const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error);
76 
77  void set_all(float p_time, float p_delta=0);
78 
79  void set_animation(const Ref<Animation>& p_animation);
80  void set_root(Node* p_root);
81 
83 };
84 
85 #endif // ANIMATION_CACHE_H
Definition: variant.h:74
Definition: node.h:42
Definition: string_db.h:48
Definition: transform.h:38
Definition: skeleton.h:38
Definition: object.h:317
Definition: animation_cache.h:35
Definition: spatial.h:56
Definition: variant.h:379