git repos / blockattack-game

blame: source/code/sago/SagoDataHolder.cpp

normal view · raw

82da8a1c sago007 2015-12-19 18:00 1
/*
47fef8e8 sago007 2016-11-24 21:37 2
Copyright (c) 2015 Poul Sander
82da8a1c sago007 2015-12-19 18:00 3
47fef8e8 sago007 2016-11-24 21:37 4
Permission is hereby granted, free of charge, to any person
47fef8e8 sago007 2016-11-24 21:37 5
obtaining a copy of this software and associated documentation files
47fef8e8 sago007 2016-11-24 21:37 6
(the "Software"), to deal in the Software without restriction,
47fef8e8 sago007 2016-11-24 21:37 7
including without limitation the rights to use, copy, modify, merge,
47fef8e8 sago007 2016-11-24 21:37 8
publish, distribute, sublicense, and/or sell copies of the Software,
47fef8e8 sago007 2016-11-24 21:37 9
and to permit persons to whom the Software is furnished to do so,
47fef8e8 sago007 2016-11-24 21:37 10
subject to the following conditions:
82da8a1c sago007 2015-12-19 18:00 11
47fef8e8 sago007 2016-11-24 21:37 12
The above copyright notice and this permission notice shall be
47fef8e8 sago007 2016-11-24 21:37 13
included in all copies or substantial portions of the Software.
82da8a1c sago007 2015-12-19 18:00 14
47fef8e8 sago007 2016-11-24 21:37 15
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
47fef8e8 sago007 2016-11-24 21:37 16
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47fef8e8 sago007 2016-11-24 21:37 17
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
47fef8e8 sago007 2016-11-24 21:37 18
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
47fef8e8 sago007 2016-11-24 21:37 19
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
47fef8e8 sago007 2016-11-24 21:37 20
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
47fef8e8 sago007 2016-11-24 21:37 21
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
47fef8e8 sago007 2016-11-24 21:37 22
SOFTWARE.
82da8a1c sago007 2015-12-19 18:00 23
*/
82da8a1c sago007 2015-12-19 18:00 24
82da8a1c sago007 2015-12-19 18:00 25
#include "SagoDataHolder.hpp"
82da8a1c sago007 2015-12-19 18:00 26
#include <iostream>
82da8a1c sago007 2015-12-19 18:00 27
#include <map>
82da8a1c sago007 2015-12-19 18:00 28
#include <vector>
82da8a1c sago007 2015-12-19 18:00 29
#include <physfs.h>
82da8a1c sago007 2015-12-19 18:00 30
#include <memory>
b81f58ad sago007 2015-12-25 22:48 31
#include <SDL_mixer.h>
c3fc09e9 sago007 2016-01-22 18:31 32
#include "SagoMiscSdl2.hpp"
3dd66f5b sago007 2020-07-04 08:31 33
#include "SagoMisc.hpp"
82da8a1c sago007 2015-12-19 18:00 34
3ebc2c88 Poul Sander 2019-05-22 17:03 35
#if PHYSFS_VER_MAJOR < 3
3ebc2c88 Poul Sander 2019-05-22 17:03 36
#define PHYSFS_readBytes(X,Y,Z) PHYSFS_read(X,Y,1,Z)
3ebc2c88 Poul Sander 2019-05-22 17:03 37
#define PHYSFS_writeBytes(X,Y,Z) PHYSFS_write(X,Y,1,Z)
3ebc2c88 Poul Sander 2019-05-22 17:03 38
#endif
3ebc2c88 Poul Sander 2019-05-22 17:03 39
82da8a1c sago007 2015-12-19 18:00 40
namespace sago {
82da8a1c sago007 2015-12-19 18:00 41
82da8a1c sago007 2015-12-19 18:00 42
struct SagoDataHolder::SagoDataHolderData {
82da8a1c sago007 2015-12-19 18:00 43
	std::map<std::string, SDL_Texture*> textures;
82da8a1c sago007 2015-12-19 18:00 44
	std::map<std::string, std::map<int, TTF_Font*> > fonts;  //font, ptsize
82da8a1c sago007 2015-12-19 18:00 45
	std::map<std::string, Mix_Music*> music;
82da8a1c sago007 2015-12-19 18:00 46
	std::map<std::string, Mix_Chunk*> sounds;
82da8a1c sago007 2015-12-19 18:00 47
	std::vector<SDL_RWops*> rwOpsToFree;
82da8a1c sago007 2015-12-19 18:00 48
	std::vector<std::unique_ptr<char[]>> dataToFree;
e297a2e8 sago007 2016-01-21 18:07 49
	bool verbose = false;
6393ebf8 Poul Sander 2019-05-08 17:40 50
	Uint64 version = 1;
82da8a1c sago007 2015-12-19 18:00 51
	SDL_Renderer* renderer = nullptr;
82da8a1c sago007 2015-12-19 18:00 52
};
82da8a1c sago007 2015-12-19 18:00 53
e297a2e8 sago007 2016-01-21 18:07 54
static void printFileWeLoad(const std::string& value) {
161a010c sago007 2016-05-06 14:00 55
	std::cout << "Loading " << value << "\n";
e297a2e8 sago007 2016-01-21 18:07 56
}
e297a2e8 sago007 2016-01-21 18:07 57
e2252ee5 sago007 2017-04-20 19:02 58
SagoDataHolder::SagoDataHolder() {
e2252ee5 sago007 2017-04-20 19:02 59
	data = new SagoDataHolderData();
e2252ee5 sago007 2017-04-20 19:02 60
}
e2252ee5 sago007 2017-04-20 19:02 61
82da8a1c sago007 2015-12-19 18:00 62
SagoDataHolder::SagoDataHolder(SDL_Renderer* renderer) {
82da8a1c sago007 2015-12-19 18:00 63
	data = new SagoDataHolderData();
82da8a1c sago007 2015-12-19 18:00 64
	data->renderer = renderer;
82da8a1c sago007 2015-12-19 18:00 65
}
82da8a1c sago007 2015-12-19 18:00 66
e2252ee5 sago007 2017-04-20 19:02 67
void SagoDataHolder::invalidateAll(SDL_Renderer* renderer) {
e2252ee5 sago007 2017-04-20 19:02 68
	invalidateAll();
e2252ee5 sago007 2017-04-20 19:02 69
	data->renderer = renderer;
e2252ee5 sago007 2017-04-20 19:02 70
}
e2252ee5 sago007 2017-04-20 19:02 71
e2252ee5 sago007 2017-04-20 19:02 72
void SagoDataHolder::invalidateAll() {
1de94c36 sago007 2017-04-20 19:38 73
	data->version++;
82da8a1c sago007 2015-12-19 18:00 74
	for (auto& item : data->textures) {
82da8a1c sago007 2015-12-19 18:00 75
		SDL_DestroyTexture(item.second);
82da8a1c sago007 2015-12-19 18:00 76
	}
e2252ee5 sago007 2017-04-20 19:02 77
	data->textures.clear();
82da8a1c sago007 2015-12-19 18:00 78
	for (auto& item : data->music) {
82da8a1c sago007 2015-12-19 18:00 79
		Mix_FreeMusic(item.second);
82da8a1c sago007 2015-12-19 18:00 80
	}
e2252ee5 sago007 2017-04-20 19:02 81
	data->music.clear();
82da8a1c sago007 2015-12-19 18:00 82
	for (auto& item : data->sounds) {
82da8a1c sago007 2015-12-19 18:00 83
		Mix_FreeChunk(item.second);
82da8a1c sago007 2015-12-19 18:00 84
	}
e2252ee5 sago007 2017-04-20 19:02 85
	data->sounds.clear();
82da8a1c sago007 2015-12-19 18:00 86
	for (auto& item : data->fonts) {
82da8a1c sago007 2015-12-19 18:00 87
		for (auto& item2 : item.second) {
82da8a1c sago007 2015-12-19 18:00 88
			TTF_CloseFont(item2.second);
82da8a1c sago007 2015-12-19 18:00 89
		}
82da8a1c sago007 2015-12-19 18:00 90
	}
e2252ee5 sago007 2017-04-20 19:02 91
	data->fonts.clear();
82da8a1c sago007 2015-12-19 18:00 92
	for (auto& item : data->rwOpsToFree) {
82da8a1c sago007 2015-12-19 18:00 93
		SDL_FreeRW(item);
82da8a1c sago007 2015-12-19 18:00 94
	}
e2252ee5 sago007 2017-04-20 19:02 95
	data->rwOpsToFree.clear();
e2252ee5 sago007 2017-04-20 19:02 96
}
e2252ee5 sago007 2017-04-20 19:02 97
e2252ee5 sago007 2017-04-20 19:02 98
SagoDataHolder::~SagoDataHolder() {
e2252ee5 sago007 2017-04-20 19:02 99
	invalidateAll();
82da8a1c sago007 2015-12-19 18:00 100
	delete data;
82da8a1c sago007 2015-12-19 18:00 101
}
82da8a1c sago007 2015-12-19 18:00 102
82da8a1c sago007 2015-12-19 18:00 103
SDL_Texture* SagoDataHolder::getTexturePtr(const std::string& textureName) const {
e2252ee5 sago007 2017-04-20 19:02 104
	if (!data->renderer) {
e2252ee5 sago007 2017-04-20 19:02 105
		throw std::runtime_error("SagoDataHolder used before setting the renderer");
e2252ee5 sago007 2017-04-20 19:02 106
	}
82da8a1c sago007 2015-12-19 18:00 107
	SDL_Texture* ret = data->textures[textureName];
82da8a1c sago007 2015-12-19 18:00 108
	if (ret) {
82da8a1c sago007 2015-12-19 18:00 109
		return ret;
82da8a1c sago007 2015-12-19 18:00 110
	}
82da8a1c sago007 2015-12-19 18:00 111
	std::string path = "textures/"+textureName+".png";
e49cda71 Poul Sander 2019-05-22 15:48 112
	if (data->verbose) {
e297a2e8 sago007 2016-01-21 18:07 113
		printFileWeLoad(path);
e297a2e8 sago007 2016-01-21 18:07 114
	}
82da8a1c sago007 2015-12-19 18:00 115
	if (!PHYSFS_exists(path.c_str())) {
5d36f49f Poul Sander 2023-07-11 22:38 116
		// We did not find the png file. Try to see if there are a jpg file.
5d36f49f Poul Sander 2023-07-11 22:38 117
		std::string jpg_path = "textures/"+textureName+".jpg";
5d36f49f Poul Sander 2023-07-11 22:38 118
		if (!PHYSFS_exists(jpg_path.c_str())) {
5d36f49f Poul Sander 2023-07-11 22:38 119
			sago::SagoFatalErrorF("getTextureFailed - Texture does not exist: %s", path.c_str());
5d36f49f Poul Sander 2023-07-11 22:38 120
		}
5d36f49f Poul Sander 2023-07-11 22:38 121
		path = jpg_path;
82da8a1c sago007 2015-12-19 18:00 122
	}
3dd66f5b sago007 2020-07-04 08:31 123
	unsigned int m_size = 0;
3dd66f5b sago007 2020-07-04 08:31 124
	std::unique_ptr<char[]> m_data;
3dd66f5b sago007 2020-07-04 08:31 125
	ReadBytesFromFile(path.c_str(), m_data, m_size);
82da8a1c sago007 2015-12-19 18:00 126
	SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
82da8a1c sago007 2015-12-19 18:00 127
	//The above might fail an return null.
82da8a1c sago007 2015-12-19 18:00 128
	if (!rw) {
e49cda71 Poul Sander 2019-05-22 15:48 129
		std::cerr << "Error. Corrupt data file!\n";
82da8a1c sago007 2015-12-19 18:00 130
		return NULL;
82da8a1c sago007 2015-12-19 18:00 131
	}
82da8a1c sago007 2015-12-19 18:00 132
	SDL_Surface* surface = IMG_Load_RW(rw,true);
82da8a1c sago007 2015-12-19 18:00 133
82da8a1c sago007 2015-12-19 18:00 134
	ret = SDL_CreateTextureFromSurface(data->renderer, surface);
82da8a1c sago007 2015-12-19 18:00 135
82da8a1c sago007 2015-12-19 18:00 136
	if (!ret) {
161a010c sago007 2016-05-06 14:00 137
		std::cerr << "getTextureFailed to load " << path << "\n";
82da8a1c sago007 2015-12-19 18:00 138
	}
82da8a1c sago007 2015-12-19 18:00 139
	SDL_FreeSurface(surface);
82da8a1c sago007 2015-12-19 18:00 140
	data->textures[textureName] = ret;
82da8a1c sago007 2015-12-19 18:00 141
	return ret;
82da8a1c sago007 2015-12-19 18:00 142
}
82da8a1c sago007 2015-12-19 18:00 143
82da8a1c sago007 2015-12-19 18:00 144
TTF_Font* SagoDataHolder::getFontPtr(const std::string& fontName, int ptsize) const {
82da8a1c sago007 2015-12-19 18:00 145
	TTF_Font* ret = data->fonts[fontName][ptsize];
82da8a1c sago007 2015-12-19 18:00 146
	if (ret) {
82da8a1c sago007 2015-12-19 18:00 147
		return ret;
82da8a1c sago007 2015-12-19 18:00 148
	}
82da8a1c sago007 2015-12-19 18:00 149
	std::string path = "fonts/"+fontName+".ttf";
e49cda71 Poul Sander 2019-05-22 15:48 150
	if (data->verbose) {
e297a2e8 sago007 2016-01-21 18:07 151
		printFileWeLoad(path);
e297a2e8 sago007 2016-01-21 18:07 152
	}
82da8a1c sago007 2015-12-19 18:00 153
	if (!PHYSFS_exists(path.c_str())) {
161a010c sago007 2016-05-06 14:00 154
		std::cerr << "getFontPtr - Font does not exists: " << path << "\n";
82da8a1c sago007 2015-12-19 18:00 155
		return ret;
82da8a1c sago007 2015-12-19 18:00 156
	}
3dd66f5b sago007 2020-07-04 08:31 157
	unsigned int m_size = 0;
3dd66f5b sago007 2020-07-04 08:31 158
	std::unique_ptr<char[]> m_data;
3dd66f5b sago007 2020-07-04 08:31 159
	ReadBytesFromFile(path.c_str(), m_data, m_size);
82da8a1c sago007 2015-12-19 18:00 160
82da8a1c sago007 2015-12-19 18:00 161
	SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
82da8a1c sago007 2015-12-19 18:00 162
82da8a1c sago007 2015-12-19 18:00 163
	//The above might fail an return null.
82da8a1c sago007 2015-12-19 18:00 164
	if (!rw) {
e49cda71 Poul Sander 2019-05-22 15:48 165
		std::cerr << "Error: Corrupt data file!\n";
82da8a1c sago007 2015-12-19 18:00 166
		return ret;
82da8a1c sago007 2015-12-19 18:00 167
	}
82da8a1c sago007 2015-12-19 18:00 168
82da8a1c sago007 2015-12-19 18:00 169
	ret = TTF_OpenFontRW(rw, SDL_FALSE, ptsize);
82da8a1c sago007 2015-12-19 18:00 170
	if (!ret) {
161a010c sago007 2016-05-06 14:00 171
		std::cerr << "Error openening font: " << fontName << " because: " << TTF_GetError() << "\n";
82da8a1c sago007 2015-12-19 18:00 172
	}
82da8a1c sago007 2015-12-19 18:00 173
	data->fonts[fontName][ptsize] = ret;
82da8a1c sago007 2015-12-19 18:00 174
	data->dataToFree.push_back(std::move(m_data));
82da8a1c sago007 2015-12-19 18:00 175
	data->rwOpsToFree.push_back(rw);
82da8a1c sago007 2015-12-19 18:00 176
	return ret;
82da8a1c sago007 2015-12-19 18:00 177
}
82da8a1c sago007 2015-12-19 18:00 178
82da8a1c sago007 2015-12-19 18:00 179
Mix_Music* SagoDataHolder::getMusicPtr(const std::string& musicName) const {
82da8a1c sago007 2015-12-19 18:00 180
	Mix_Music* ret = data->music[musicName];
82da8a1c sago007 2015-12-19 18:00 181
	if (ret) {
82da8a1c sago007 2015-12-19 18:00 182
		return ret;
82da8a1c sago007 2015-12-19 18:00 183
	}
82da8a1c sago007 2015-12-19 18:00 184
	std::string path = "music/"+musicName+".ogg";
e49cda71 Poul Sander 2019-05-22 15:48 185
	if (data->verbose) {
e297a2e8 sago007 2016-01-21 18:07 186
		printFileWeLoad(path);
e297a2e8 sago007 2016-01-21 18:07 187
	}
82da8a1c sago007 2015-12-19 18:00 188
	if (!PHYSFS_exists(path.c_str())) {
161a010c sago007 2016-05-06 14:00 189
		std::cerr << "getMusicPtr - Music file does not exists: " << path << "\n";
82da8a1c sago007 2015-12-19 18:00 190
		return ret;
82da8a1c sago007 2015-12-19 18:00 191
	}
3dd66f5b sago007 2020-07-04 08:31 192
	unsigned int m_size = 0;
3dd66f5b sago007 2020-07-04 08:31 193
	std::unique_ptr<char[]> m_data;
3dd66f5b sago007 2020-07-04 08:31 194
	ReadBytesFromFile(path.c_str(), m_data, m_size);
82da8a1c sago007 2015-12-19 18:00 195
	SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
82da8a1c sago007 2015-12-19 18:00 196
82da8a1c sago007 2015-12-19 18:00 197
	//The above might fail an return null.
82da8a1c sago007 2015-12-19 18:00 198
	if (!rw) {
e49cda71 Poul Sander 2019-05-22 15:48 199
		std::cerr << "Error. Corrupt data file!\n";
82da8a1c sago007 2015-12-19 18:00 200
		return NULL;
82da8a1c sago007 2015-12-19 18:00 201
	}
82da8a1c sago007 2015-12-19 18:00 202
82da8a1c sago007 2015-12-19 18:00 203
	ret = Mix_LoadMUS_RW(rw, SDL_TRUE);  //SDL_TRUE causes rw to be freed
82da8a1c sago007 2015-12-19 18:00 204
82da8a1c sago007 2015-12-19 18:00 205
	if (!ret) {
161a010c sago007 2016-05-06 14:00 206
		std::cerr << "getMusicPtr to load " << path << " because: " << Mix_GetError() << "\n";
82da8a1c sago007 2015-12-19 18:00 207
	}
82da8a1c sago007 2015-12-19 18:00 208
	data->music[musicName] = ret;
344e2b89 sago007 2016-01-18 21:33 209
	data->dataToFree.push_back(std::move(m_data));
82da8a1c sago007 2015-12-19 18:00 210
	return ret;
82da8a1c sago007 2015-12-19 18:00 211
}
82da8a1c sago007 2015-12-19 18:00 212
82da8a1c sago007 2015-12-19 18:00 213
82da8a1c sago007 2015-12-19 18:00 214
Mix_Chunk* SagoDataHolder::getSoundPtr(const std::string& soundName) const {
82da8a1c sago007 2015-12-19 18:00 215
	Mix_Chunk* ret = data->sounds[soundName];
82da8a1c sago007 2015-12-19 18:00 216
	if (ret) {
82da8a1c sago007 2015-12-19 18:00 217
		return ret;
82da8a1c sago007 2015-12-19 18:00 218
	}
82da8a1c sago007 2015-12-19 18:00 219
	std::string path = "sounds/"+soundName+".ogg";
e49cda71 Poul Sander 2019-05-22 15:48 220
	if (data->verbose) {
e297a2e8 sago007 2016-01-21 18:07 221
		printFileWeLoad(path);
e297a2e8 sago007 2016-01-21 18:07 222
	}
82da8a1c sago007 2015-12-19 18:00 223
	if (!PHYSFS_exists(path.c_str())) {
161a010c sago007 2016-05-06 14:00 224
		std::cerr << "getSoundPtr - Sound file does not exists: " << path << "\n";
82da8a1c sago007 2015-12-19 18:00 225
		return ret;
82da8a1c sago007 2015-12-19 18:00 226
	}
3dd66f5b sago007 2020-07-04 08:31 227
	unsigned int m_size = 0;
3dd66f5b sago007 2020-07-04 08:31 228
	std::unique_ptr<char[]> m_data;
3dd66f5b sago007 2020-07-04 08:31 229
	ReadBytesFromFile(path.c_str(), m_data, m_size);
82da8a1c sago007 2015-12-19 18:00 230
	SDL_RWops* rw = SDL_RWFromMem (m_data.get(), m_size);
82da8a1c sago007 2015-12-19 18:00 231
82da8a1c sago007 2015-12-19 18:00 232
	//The above might fail an return null.
82da8a1c sago007 2015-12-19 18:00 233
	if (!rw) {
e49cda71 Poul Sander 2019-05-22 15:48 234
		std::cerr << "Error. Corrupt data file!\n";
82da8a1c sago007 2015-12-19 18:00 235
		return NULL;
82da8a1c sago007 2015-12-19 18:00 236
	}
82da8a1c sago007 2015-12-19 18:00 237
82da8a1c sago007 2015-12-19 18:00 238
	ret = Mix_LoadWAV_RW(rw, SDL_TRUE);
82da8a1c sago007 2015-12-19 18:00 239
	data->sounds[soundName] = ret;
344e2b89 sago007 2016-01-18 21:33 240
	data->dataToFree.push_back(std::move(m_data));
82da8a1c sago007 2015-12-19 18:00 241
	return ret;
82da8a1c sago007 2015-12-19 18:00 242
}
82da8a1c sago007 2015-12-19 18:00 243
e297a2e8 sago007 2016-01-21 18:07 244
void SagoDataHolder::setVerbose(bool value) {
e297a2e8 sago007 2016-01-21 18:07 245
	data->verbose = value;
e297a2e8 sago007 2016-01-21 18:07 246
}
e297a2e8 sago007 2016-01-21 18:07 247
1de94c36 sago007 2017-04-20 19:38 248
Uint64 SagoDataHolder::getVersion() const {
1de94c36 sago007 2017-04-20 19:38 249
	return data->version;
1de94c36 sago007 2017-04-20 19:38 250
}
1de94c36 sago007 2017-04-20 19:38 251
e94af580 sago007 2020-12-30 17:45 252
TextureHandler::TextureHandler(const SagoDataHolder* holder, const std::string& textureName) {
1de94c36 sago007 2017-04-20 19:38 253
	this->holder = holder;
6393ebf8 Poul Sander 2019-05-08 17:40 254
	this->version = 0;
1de94c36 sago007 2017-04-20 19:38 255
	this->textureName = textureName;
6393ebf8 Poul Sander 2019-05-08 17:40 256
	this->data = nullptr;
1de94c36 sago007 2017-04-20 19:38 257
}
1de94c36 sago007 2017-04-20 19:38 258
59365d69 Poul Sander 2025-05-25 12:06 259
SDL_Texture* TextureHandler::get() const {
1de94c36 sago007 2017-04-20 19:38 260
	if (version != holder->getVersion()) {
1de94c36 sago007 2017-04-20 19:38 261
		//The holder has been invalidated
1de94c36 sago007 2017-04-20 19:38 262
		this->data = this->holder->getTexturePtr(textureName);
1de94c36 sago007 2017-04-20 19:38 263
	}
1de94c36 sago007 2017-04-20 19:38 264
	return data;
1de94c36 sago007 2017-04-20 19:38 265
}
1de94c36 sago007 2017-04-20 19:38 266
524f188c sago007 2017-04-22 09:01 267
524f188c sago007 2017-04-22 09:01 268
MusicHandler::MusicHandler(const SagoDataHolder* holder, const std::string& musicName) {
524f188c sago007 2017-04-22 09:01 269
	this->holder = holder;
6393ebf8 Poul Sander 2019-05-08 17:40 270
	this->version = 0;
524f188c sago007 2017-04-22 09:01 271
	this->musicName = musicName;
6393ebf8 Poul Sander 2019-05-08 17:40 272
	this->data = nullptr;
524f188c sago007 2017-04-22 09:01 273
}
524f188c sago007 2017-04-22 09:01 274
524f188c sago007 2017-04-22 09:01 275
Mix_Music* MusicHandler::get() {
524f188c sago007 2017-04-22 09:01 276
	if (version != holder->getVersion()) {
524f188c sago007 2017-04-22 09:01 277
		//The holder has been invalidated
524f188c sago007 2017-04-22 09:01 278
		this->data = this->holder->getMusicPtr(musicName);
524f188c sago007 2017-04-22 09:01 279
	}
524f188c sago007 2017-04-22 09:01 280
	return data;
524f188c sago007 2017-04-22 09:01 281
}
524f188c sago007 2017-04-22 09:01 282
524f188c sago007 2017-04-22 09:01 283
SoundHandler::SoundHandler(const SagoDataHolder* holder, const std::string& soundName) {
524f188c sago007 2017-04-22 09:01 284
	this->holder = holder;
6393ebf8 Poul Sander 2019-05-08 17:40 285
	this->version = 0;
524f188c sago007 2017-04-22 09:01 286
	this->soundName = soundName;
6393ebf8 Poul Sander 2019-05-08 17:40 287
	this->data = nullptr;
524f188c sago007 2017-04-22 09:01 288
}
524f188c sago007 2017-04-22 09:01 289
524f188c sago007 2017-04-22 09:01 290
Mix_Chunk* SoundHandler::get() {
524f188c sago007 2017-04-22 09:01 291
	if (version != holder->getVersion()) {
524f188c sago007 2017-04-22 09:01 292
		//The holder has been invalidated
524f188c sago007 2017-04-22 09:01 293
		this->data = this->holder->getSoundPtr(soundName);
524f188c sago007 2017-04-22 09:01 294
	}
524f188c sago007 2017-04-22 09:01 295
	return data;
524f188c sago007 2017-04-22 09:01 296
}
524f188c sago007 2017-04-22 09:01 297
524f188c sago007 2017-04-22 09:01 298
e94af580 sago007 2020-12-30 17:45 299
TextureHandler SagoDataHolder::getTextureHandler(const std::string& textureName) const {
1de94c36 sago007 2017-04-20 19:38 300
	return TextureHandler(this, textureName);
1de94c36 sago007 2017-04-20 19:38 301
}
1de94c36 sago007 2017-04-20 19:38 302
e94af580 sago007 2020-12-30 17:45 303
MusicHandler SagoDataHolder::getMusicHandler(const std::string& musicName) const {
524f188c sago007 2017-04-22 09:01 304
	return MusicHandler(this, musicName);
524f188c sago007 2017-04-22 09:01 305
}
524f188c sago007 2017-04-22 09:01 306
e94af580 sago007 2020-12-30 17:45 307
SoundHandler SagoDataHolder::getSoundHandler(const std::string& soundName) const {
524f188c sago007 2017-04-22 09:01 308
	return SoundHandler(this, soundName);
524f188c sago007 2017-04-22 09:01 309
}
524f188c sago007 2017-04-22 09:01 310
82da8a1c sago007 2015-12-19 18:00 311
} //name space sago
1970-01-01 00:00 312