/*
* Copyright 2010 OpenXcom Developers.
*
* This file is part of OpenXcom.
*
* OpenXcom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenXcom 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenXcom. If not, see .
*/
#include "ResourcePack.h"
#include "../Engine/Palette.h"
#include "../Engine/Font.h"
#include "../Engine/Surface.h"
#include "../Engine/SurfaceSet.h"
#include "../Engine/Music.h"
#include "../Geoscape/Globe.h"
#include "../Geoscape/Polygon.h"
#include "../Geoscape/Polyline.h"
#include "../Engine/SoundSet.h"
namespace OpenXcom
{
/**
* Initializes a blank resource set pointing to a folder.
*/
ResourcePack::ResourcePack() : _palettes(), _fonts(), _surfaces(), _sets(), _polygons(), _musics()
{
}
/**
* Deletes all the loaded resources.
*/
ResourcePack::~ResourcePack()
{
for (std::map::iterator i = _fonts.begin(); i != _fonts.end(); ++i)
{
delete i->second;
}
for (std::map::iterator i = _surfaces.begin(); i != _surfaces.end(); ++i)
{
delete i->second;
}
for (std::map::iterator i = _sets.begin(); i != _sets.end(); ++i)
{
delete i->second;
}
for (std::list::iterator i = _polygons.begin(); i != _polygons.end(); ++i)
{
delete *i;
}
for (std::list::iterator i = _polylines.begin(); i != _polylines.end(); ++i)
{
delete *i;
}
for (std::map::iterator i = _palettes.begin(); i != _palettes.end(); ++i)
{
delete i->second;
}
for (std::map::iterator i = _musics.begin(); i != _musics.end(); ++i)
{
delete i->second;
}
for (std::map::iterator i = _sounds.begin(); i != _sounds.end(); ++i)
{
delete i->second;
}
}
/**
* Returns a specific font from the resource set.
* @param name Name of the font.
* @return Pointer to the font.
*/
Font *const ResourcePack::getFont(const std::string &name) const
{
return _fonts.find(name)->second;
}
/**
* Returns a specific surface from the resource set.
* @param name Name of the surface.
* @return Pointer to the surface.
*/
Surface *const ResourcePack::getSurface(const std::string &name) const
{
return _surfaces.find(name)->second;
}
/**
* Returns a specific surface set from the resource set.
* @param name Name of the surface set.
* @return Pointer to the surface set.
*/
SurfaceSet *const ResourcePack::getSurfaceSet(const std::string &name) const
{
return _sets.find(name)->second;
}
/**
* Returns the list of polygons in the resource set.
* @return Pointer to the list of polygons.
*/
std::list *const ResourcePack::getPolygons()
{
return &_polygons;
}
/**
* Returns the list of polylines in the resource set.
* @return Pointer to the list of polylines.
*/
std::list *const ResourcePack::getPolylines()
{
return &_polylines;
}
/**
* Returns a specific music from the resource set.
* @param name Name of the music.
* @return Pointer to the music.
*/
Music *const ResourcePack::getMusic(const std::string &name) const
{
return _musics.find(name)->second;
}
/**
* Returns a specific sound set from the resource set.
* @param name Name of the sound set.
* @return Pointer to the sound set.
*/
SoundSet *const ResourcePack::getSoundSet(const std::string &name) const
{
return _sounds.find(name)->second;
}
/**
* Returns a specific palette from the resource set.
* @param name Name of the palette.
* @return Pointer to the palette.
*/
Palette *const ResourcePack::getPalette(const std::string &name) const
{
return _palettes.find(name)->second;
}
/**
* Changes the palette of all the graphics in the resource set.
* @param colors Pointer to the set of colors.
* @param firstcolor Offset of the first color to replace.
* @param ncolors Amount of colors to replace.
*/
void ResourcePack::setPalette(SDL_Color *colors, int firstcolor, int ncolors)
{
for (std::map::iterator i = _fonts.begin(); i != _fonts.end(); ++i)
{
i->second->getSurface()->setPalette(colors, firstcolor, ncolors);
}
for (std::map::iterator i = _surfaces.begin(); i != _surfaces.end(); ++i)
{
i->second->setPalette(colors, firstcolor, ncolors);
}
for (std::map::iterator i = _sets.begin(); i != _sets.end(); ++i)
{
i->second->setPalette(colors, firstcolor, ncolors);
}
}
/**
* Returns the list of voxeldata in the resource set.
* @return Pointer to the list of voxeldata.
*/
std::vector *const ResourcePack::getVoxelData()
{
return &_voxelData;
}
}