WOWCube Docs logo
WOWCube Docs
Mission Control
Section Shortcuts
APIExamplesSourceWOWConnectChangelog
Filters
SDK and language defaults persist in cookies.
SDK version
Navigation Tree
Collapsed by default, focused on the active path.
Made byMcKay Seamons
GitHub
  1. Home
  2. Docs
  3. Source
  4. SpriteAtlas.h
Mission NodeSDK 6.2C++gfx

SpriteAtlas.h

SDK Source File: SpriteAtlas.h

Source / SDK 6.2 / C++ / gfx

SpriteAtlas.h

SpriteAtlas.h
CPP
1/* Copyright Statement:
2 *
3 * (C) 2021-2024 Cubios Inc. All rights reserved.
4 */
5#pragma once
6
7#include "Scene.h"
8#include "SceneObject.h"
9#include "Math/Rect2.h"
10
11#include <string>
12#include <unordered_map>
13
14namespace Cubios
15{
16namespace Gfx
17{
18 class SpriteAtlasBase;
19 class SpriteAtlasElement: public Cubios::SceneObject
20 {
21 public:
22 SpriteAtlasElement(SpriteAtlasBase* host, const Cubios::Math::Rect2& rc);
23 virtual ~SpriteAtlasElement();
24
25 void Render() override;
26
27 virtual SpriteAtlasElement* Copy();
28
29 protected:
30 Cubios::Math::Rect2 rc;
31 SpriteAtlasBase* host;
32 };
33
34 class SpriteAtlasBase
35 {
36 public:
37 SpriteAtlasBase(Cubios::Scene* scene): scene(scene) {}
38
39 public:
40 u32_t resourceId;
41 Cubios::Scene* scene;
42 };
43
44 template <typename T>
45 class SpriteAtlas: public SpriteAtlasBase
46 {
47 static_assert(std::is_base_of<Cubios::Gfx::SpriteAtlasElement, T>::value, "T must inherit from Cubios::Gtf::SpriteAtlasElement");
48
49 public:
50 SpriteAtlas(std::string name, Cubios::Scene* scene);
51 virtual ~SpriteAtlas();
52
53 bool AddSprite(uint32_t id, const Cubios::Math::Rect2& rc);
54 bool RemoveSprite(uint32_t id);
55
56 T* operator[](uint32_t);
57 T* Get(uint32_t ind);
58
59 private:
60 std::unordered_map<uint32_t,T*> elements;
61 };
62}
63}
64
65
66namespace Cubios
67{
68 namespace Gfx
69 {
70 template <typename T>
71 SpriteAtlas<T>::SpriteAtlas(std::string name, Cubios::Scene* scene):SpriteAtlasBase(scene)
72 {
73 this->resourceId = Cubios::GFX_getAssetId(name.c_str());
74 }
75
76 template <typename T>
77 SpriteAtlas<T>::~SpriteAtlas()
78 {}
79
80 template <typename T>
81 bool SpriteAtlas<T>::AddSprite(uint32_t id, const Cubios::Math::Rect2& rc)
82 {
83 bool ret = true;
84
85 if(this->scene->CreateObjectWithID(id,new T(this,rc)))
86 {
87 this->elements[id] = dynamic_cast<T*>(this->scene->operator[](id));
88 }
89 else
90 {
91 LOG_e("SpriteAtlas::AddSprite: Resource with id %d already exists\n",id);
92 ret = false;
93 }
94
95 return ret;
96 }
97
98 template <typename T>
99 bool SpriteAtlas<T>::RemoveSprite(uint32_t id)
100 {
101 bool ret = true;
102 typename std::unordered_map<uint32_t, T*>::iterator it = this->elements.find(id);
103
104 if(it!=this->elements.end())
105 {
106 if(this->elements[id]!=nullptr)
107 {
108 delete this->elements[id];
109 }
110
111 this->elements.erase(it);
112 }
113 else
114 {
115 ret = false;
116 }
117
118 return ret;
119 }
120
121 template <typename T>
122 T* SpriteAtlas<T>::operator[](uint32_t ind)
123 {
124 return this->elements[ind];
125 }
126
127 template <typename T>
128 T* SpriteAtlas<T>::Get(uint32_t ind)
129 {
130 return this->elements[ind];
131 }
132 }
133}
134
135
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.
Context Rail

Related nodes

AnimatedSprite.cpp
Source / SDK 6.2 / C++ / gfx
AnimatedSprite.h
Source / SDK 6.2 / C++ / gfx
Background.cpp
Source / SDK 6.2 / C++ / gfx
Background.h
Source / SDK 6.2 / C++ / gfx
Previous Node
SpriteAtlas.cpp
Source / SDK 6.2 / C++ / gfx
Next Node
Text.cpp
Source / SDK 6.2 / C++ / gfx