dl
dl_animation_info.h
浏览该文件的文档.
1
12#pragma once
13
14#include "dl_type.h"
15#include "io/dl_json.h"
16
17
18namespace dl
19{
20 constexpr unsigned ANIMATION_FTIME = 125;
21
24 {
25 struct Node
26 {
27 unsigned _beg = 0;
28 unsigned _skip = 0;
30 unsigned _dir = 1;
31 unsigned _count = 0;
32 };
33 std::string _type = ""; // sheet.动画在一张图上 multi.多张图组成的动画
34 std::string _format = "{}_{}";
35 unsigned _skip = 0;
37 unsigned _dir = 1;
38 unsigned _count = 0; // sheet.0表示sheet的所有精灵 multi.表示1张
39 Position _offset = {}; // 整体偏移
40
41 std::unordered_map<std::string, Node, string_hash, std::equal_to<>> _allAni;
42 };
43
44 inline void to_json(json& j, const AnimationInfo& info)
45 {
46 j = json{
47 {"type", info._type},
48 {"format", info._format},
49 {"skip", info._skip},
50 {"ftime", info._ftime},
51 {"dir", info._dir},
52 {"count", info._count},
53 {"offset", info._offset},
54 };
55 json j_ani = {};
56 for (auto& iter : info._allAni)
57 {
58 AnimationInfo::Node node = iter.second;
59 json j_node;
60 j_node["name"] = iter.first;
61 j_node["beg"] = node._beg;
62 j_node["skip"] = node._skip;
63 j_node["ftime"] = node._ftime;
64 j_node["dir"] = node._dir;
65 j_node["count"] = node._count;
66 j_ani.push_back(j_node);
67 }
68 j["ani"] = j_ani;
69 }
70 inline void from_json(const json& j, AnimationInfo& info)
71 {
73 Json::Get(j, "type", info._type);
74 Json::Get(j, "format", info._format);
75 Json::Get(j, "skip", info._skip);
76 Json::Get(j, "ftime", info._ftime);
77 Json::Get(j, "dir", info._dir);
78 Json::Get(j, "count", info._count);
79 Json::Get(j, "offset", info._offset);
80 json j_ani;
81 Json::Get(j, "ani", j_ani);
82 for (auto& iter : j_ani)
83 {
84 std::string name;
86 Json::Get(iter, "name", name);
87 Json::Get(iter, "beg", node._beg);
88 if (!Json::Get(iter, "skip", node._skip))
89 node._skip = info._skip;
90 if (!Json::Get(iter, "ftime", node._ftime))
91 node._ftime = info._ftime;
92 if (!Json::Get(iter, "dir", node._dir))
93 node._dir = info._dir;
94 if (!Json::Get(iter, "count", node._count))
95 node._count = info._count;
96 auto iter1 = info._allAni.find(name);
97 if (iter1 != info._allAni.end())
98 {
99 log_warn("子动画名重复,将覆盖:{}", name);
100 }
101 info._allAni[name] = node;
102 }
103 }
104}
json格式相关
nlohmann::json json
#define log_warn(...)
通用类型
bool Get(const json &j, const std::string &name, T &t)
从json返回子元素值,不存在则返回false,打印日志
Position2 Position
void from_json(const json &j, Array< T, N > &arr)
constexpr unsigned ANIMATION_FTIME
void to_json(json &j, const Array< T, N > &arr)
std::unordered_map< std::string, Node, string_hash, std::equal_to<> > _allAni
临时关闭json日志