File: atlasloader.h

package info (click to toggle)
fife 0.4.2-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 25,204 kB
  • sloc: cpp: 42,642; xml: 18,881; python: 13,521; makefile: 23
file content (132 lines) | stat: -rw-r--r-- 4,269 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/***************************************************************************
 *   Copyright (C) 2005-2019 by the FIFE team                              *
 *   http://www.fifengine.net                                              *
 *   This file is part of FIFE.                                            *
 *                                                                         *
 *   FIFE is free software; you can redistribute it and/or                 *
 *   modify it under the terms of the GNU Lesser General Public            *
 *   License as published by the Free Software Foundation; either          *
 *   version 2.1 of the License, or (at your option) any later version.    *
 *                                                                         *
 *   This library is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   Lesser General Public License for more details.                       *
 *                                                                         *
 *   You should have received a copy of the GNU Lesser General Public      *
 *   License along with this library; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
 ***************************************************************************/

#ifndef FIFE_ATLAS_LOADER_H
#define FIFE_ATLAS_LOADER_H

// Standard C++ library includes

// 3rd party library includes

// FIFE includes
// These includes are split up in two parts, separated by one empty line
// First block: files included from the FIFE root src directory
// Second block: files included from the same folder
#include "util/structures/rect.h" 
#include "video/image.h" 
#include "video/imagemanager.h" 

#include "iatlasloader.h"

class TiXmlElement;

namespace FIFE {
	class VFS;
	class ImageManager;
	class AnimationManager;

	struct AtlasData {
		Rect rect;
		ImagePtr image;
	};

	class Atlas {
	public:
		Atlas(const std::string& name)
			: m_name(name) {;}
		~Atlas() {;}


		/** Returns the number of subimages that belongs to this atlas.
		*/
		size_t getImageCount() const;

		/** Returns an (packed) Image for this atlas.
		*/
		ImagePtr& getPackedImage();

		/** Return an Image of given id.
		*/
		ImagePtr getImage(const std::string& id);

		/** Return an Image of given (serial) index in atlas
		*/
		ImagePtr getImage(uint32_t index);

		/** Adds new information about subimage that belongs to this atlas.
		*  @remarks This is essential function in parsing atlas files.
		*  @returns True, when image of given name hasn't been added before.
		*/
		bool addImage(const std::string& imagename, const AtlasData& data);

		/** Sets the image for atlas to use it for rendering.
		*  @remarks Should only be used during loading stage
		*/
		void setPackedImage(const ImagePtr& image);

		const std::string& getName() const;
	protected:
		typedef std::map<std::string, AtlasData> SubimageMap;
		SubimageMap m_subimages;
		ImagePtr m_image;

		// Unique atlas name
		std::string m_name;
	};

	class AtlasLoader : public IAtlasLoader {
	public:
		AtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager);

		virtual ~AtlasLoader();

		/** 
		* @see IAtlasLoader::isLoadable
		*/
		virtual bool isLoadable(const std::string& filename);

		/** 
		* @see IAtlasLoader::load
		*/
		virtual AtlasPtr load(const std::string& filename);

		/** 
		* @see IAtlasLoader::loadMultiple
		*/
		virtual std::vector<AtlasPtr> loadMultiple(const std::string& filename);

	private:
		AtlasPtr loadAtlas(const std::string& filename, TiXmlElement* atlasElem);

		Model* m_model;
		VFS* m_vfs;
		ImageManager* m_imageManager;
		AnimationManager* m_animationManager;
	};

	/** convenience function for creating the default fife atlas loader
	 *  deleting the object returned from this function is the
	 *  responsibility of the caller
	 */
	AtlasLoader* createDefaultAtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager);
}

#endif