// // Lol Engine // // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://www.wtfpl.net/ for more details. // #include <lol/engine-internal.h> namespace lol { /* * Tiler implementation class */ static class TilerData { friend class Tiler; public: TilerData() { } private: Dict tilesets; } tilerdata; static TilerData * const data = &tilerdata; /* * Public Tiler class */ TileSet *Tiler::Register(String const &path, ivec2 size, ivec2 count) { return Tiler::Register(path.C(), size, count); } TileSet *Tiler::Register(char const *path, ivec2 size, ivec2 count) { int id = data->tilesets.MakeSlot(path); TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id); if (!tileset) { tileset = new TileSet(path, size, count); data->tilesets.SetEntity(id, tileset); } return tileset; } TileSet *Tiler::Register(String const &path) { return Tiler::Register(path.C()); } TileSet *Tiler::Register(char const *path) { int id = data->tilesets.MakeSlot(path); TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id); if (!tileset) { tileset = new TileSet(path); data->tilesets.SetEntity(id, tileset); } return tileset; } TileSet *Tiler::Register(String const &path, Image* image, ivec2 size, ivec2 count) { return Tiler::Register(path.C(), image, size, count); } TileSet *Tiler::Register(char const *path, Image* image, ivec2 size, ivec2 count) { int id = data->tilesets.MakeSlot(path); TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id); if (!tileset) { tileset = new TileSet(path, image, size, count); data->tilesets.SetEntity(id, tileset); } return tileset; } TileSet *Tiler::Register(String const &path, Image* image) { return Tiler::Register(path.C(), image); } TileSet *Tiler::Register(char const *path, Image* image) { int id = data->tilesets.MakeSlot(path); TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id); if (!tileset) { tileset = new TileSet(path, image); data->tilesets.SetEntity(id, tileset); } return tileset; } void Tiler::Deregister(TileSet *tileset) { data->tilesets.RemoveSlot(tileset); } } /* namespace lol */