载入中...
搜索中...
未找到
SpineAtlas.h
浏览该文件的文档.
1#pragma once
2
3#include <string>
4#include <unordered_map>
5#include <vector>
6
7namespace eve::animation {
8
15public:
16 SpineAtlas() = default;
17 ~SpineAtlas() = default;
18
19 SpineAtlas(const SpineAtlas &) = delete;
20 SpineAtlas &operator=(const SpineAtlas &) = delete;
21
22 bool loadFromText(const std::string &text, std::string *error = nullptr);
23 bool loadFromFile(const std::string &path, std::string *error = nullptr);
24
25 void clear();
26
27 int getPageCount() const { return static_cast<int>(pages_.size()); }
28 std::string getPageName(int pageIndex) const;
29 int getPageWidth(int pageIndex) const;
30 int getPageHeight(int pageIndex) const;
31
32 int getRegionCount() const { return static_cast<int>(regions_.size()); }
33 int findRegion(const std::string &name) const;
34 std::string getRegionName(int index) const;
35 int getRegionPage(int index) const;
36 int getRegionX(int index) const;
37 int getRegionY(int index) const;
38 int getRegionWidth(int index) const;
39 int getRegionHeight(int index) const;
40 int getRegionOriginalWidth(int index) const;
41 int getRegionOriginalHeight(int index) const;
42 int getRegionOffsetX(int index) const;
43 int getRegionOffsetY(int index) const;
44 bool getRegionRotate(int index) const;
45
47 void getRegionUV(int index, int texW, int texH, float &u0, float &v0, float &u1,
48 float &v1) const;
49
50private:
51 struct Page {
52 std::string name;
53 int width = 0;
54 int height = 0;
55 };
56
57 struct Region {
58 std::string name;
59 int pageIndex = 0;
60 int x = 0, y = 0, w = 0, h = 0;
61 int origW = 0, origH = 0;
62 int offsetX = 0, offsetY = 0;
63 bool rotate = false;
64 };
65
66 void checkPage(int index) const;
67 void checkRegion(int index) const;
68
69 std::vector<Page> pages_;
70 std::vector<Region> regions_;
71 std::unordered_map<std::string, int> regionByName_;
72};
73
74} // namespace eve::animation
int y
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
int h
int w
std::string error
int width
const char * name
Definition RockMesh.cpp:21
Esoteric Spine .atlas text parser (region rectangles + page metadata). Does not load image pixels — b...
Definition SpineAtlas.h:14
int getRegionY(int index) const
int getPageHeight(int pageIndex) const
int getRegionOriginalWidth(int index) const
std::string getPageName(int pageIndex) const
SpineAtlas(const SpineAtlas &)=delete
std::string getRegionName(int index) const
bool loadFromFile(const std::string &path, std::string *error=nullptr)
int getPageWidth(int pageIndex) const
void getRegionUV(int index, int texW, int texH, float &u0, float &v0, float &u1, float &v1) const
Normalized UVs for a texture of texW×texH (usually page size).
int getRegionOriginalHeight(int index) const
int getRegionOffsetY(int index) const
bool getRegionRotate(int index) const
SpineAtlas & operator=(const SpineAtlas &)=delete
int getRegionPage(int index) const
int getRegionWidth(int index) const
int getRegionX(int index) const
int getRegionHeight(int index) const
int findRegion(const std::string &name) const
bool loadFromText(const std::string &text, std::string *error=nullptr)
int getRegionOffsetX(int index) const