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
|