15 #ifndef MOTIVE_ANIM_TABLE_H_
16 #define MOTIVE_ANIM_TABLE_H_
19 #include <unordered_map>
22 #include "motive/anim.h"
28 struct AnimTableEmbeddedFb;
29 struct AnimListEmbeddedFb;
31 class TableDescriberInterface;
53 typedef std::vector<std::string> ListFileNames;
59 typedef std::vector<ListFileNames> TableFileNames;
69 typedef const char*
LoadFn(
const char* file_name, std::string* scratch_buf);
107 const AnimIndex idx = CalculateIndex(
object, anim_idx);
108 return idx == kInvalidAnimIndex ?
nullptr : anims_[idx];
119 return defining_anims_[object];
124 int NumObjects()
const {
return static_cast<int>(indices_.size()); }
129 return static_cast<int>(indices_[object].size());
137 typedef uint16_t AnimIndex;
138 typedef std::vector<AnimIndex> AnimList;
139 typedef std::pair<std::string, AnimIndex> NameToIndex;
140 static const AnimIndex kInvalidAnimIndex =
static_cast<AnimIndex
>(-1);
142 bool Load(TableDescriberInterface* describer,
LoadFn* load_fn);
143 void AnimNames(std::vector<const char*>* anim_names)
const;
144 size_t MaxAnimIndex()
const;
145 size_t GatherObjectAnims(
int object,
const RigAnim** anims)
const;
146 void CalculateDefiningAnims();
149 auto map_entry = name_map_.find(anim_name);
150 if (map_entry == name_map_.end())
return nullptr;
151 return anims_[map_entry->second];
154 AnimIndex CalculateIndex(
int object,
int anim_idx)
const {
155 assert(0 <=
object &&
object < static_cast<int>(indices_.size()));
156 const AnimList& list = indices_[object];
158 assert(0 <= anim_idx && anim_idx < static_cast<int>(list.size()));
159 return list[anim_idx];
164 std::vector<AnimList> indices_;
169 std::vector<RigAnim> defining_anims_;
174 std::unordered_map<std::string, AnimIndex> name_map_;
177 std::vector<RigAnim*> anims_;
182 #endif // MOTIVE_ANIM_TABLE_H_
const RigAnim * QueryByName(const char *anim_name) const
Definition: anim_table.h:113
const RigAnim & DefiningAnim(int object) const
Return animation that defines the complete rig of this object.
Definition: anim_table.h:118
Animation for a RigMotivator. Drives a fully rigged model.
Definition: anim.h:72
const char * LoadFn(const char *file_name, std::string *scratch_buf)
Definition: anim_table.h:69
const RigAnim * Query(int object, int anim_idx) const
Definition: anim_table.h:106
int NumObjects() const
Definition: anim_table.h:124
bool InitFromAnimFileNames(const TableFileNames &table_names, LoadFn *load_fn)
int NumAnims(int object) const
Definition: anim_table.h:128
bool InitFromFlatBuffers(const AnimTableFb &table_fb, LoadFn *load_fn)
Hold animation lists for several object types.
Definition: anim_table.h:48
int NumUniqueAnims() const
Definition: anim_table.h:134