X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmap%2FMap.h;h=e0a95dd9bca2d062447249a1b9a88b02ae3dfd5f;hb=d97b7038c28058a76e7214e0dce0394fd8b67cff;hp=ab0728b765ba8ec363c20d27f3a7e0b9e8e70454;hpb=ed792d6d00d822384d79d049e644e372f7c3b4cd;p=l2e.git diff --git a/src/map/Map.h b/src/map/Map.h index ab0728b..e0a95dd 100644 --- a/src/map/Map.h +++ b/src/map/Map.h @@ -1,50 +1,77 @@ -/* - * Map.h - * - * Created on: Sep 29, 2012 - * Author: holy - */ - #ifndef MAP_MAP_H_ #define MAP_MAP_H_ -#include "fwd.h" -#include "../geometry/Vector.h" -#include "../graphics/fwd.h" +namespace map { + class Area; + class Tile; + class Trigger; +} +namespace math { + template + class Vector; +} + +#include "Entity.h" #include namespace map { +/// Represents a single map in the game. +/// Maps are made up of uniform areas of tiles. +/// The looks of a tile is defined by the Tileset() sprite with Tile::Offset() +/// as the column and row in the sprite. +/// Maps can be propulated with triggers and entities. Those are or use with +/// MapState and are not handled by the map itself. +/// Positions are expressed either as pixel or tile coordinates depending on +/// function purpose with (0|0) being the top left corner and positive values +/// extending to the right and down respectively. class Map { +public: + static const int TYPE_ID = 602; + public: Map(); ~Map() { } public: + /// The sprite used as the tileset. const graphics::Sprite *Tileset() const { return tileset; } - const Area *AreaAt(const geometry::Vector &) const; - const Tile *TileAt(const geometry::Vector &) const; - Trigger *TriggerAt(const geometry::Vector &); - geometry::Vector TileCoordinates(const geometry::Vector &) const; + /// Returns the Area at given pixel coordinates or 0 if off the map. + Area *AreaAt(const math::Vector &); + const Area *AreaAt(const math::Vector &) const; + /// Returns the Tile at given pixel coordinates or 0 if off the map. + Tile *TileAt(const math::Vector &); + const Tile *TileAt(const math::Vector &) const; + /// Returns the Trigger at given pixel coordinates or 0 if off the map. + /// Multiple triggers are not supported. The first one found is returned. + Trigger *TriggerAt(const math::Vector &); + /// The battle background image for this map if neither the tile nor the + /// area has one specified. + SDL_Surface *BattleBackgroundAt(const math::Vector &); + /// Convert coordinates pixel to tile. + math::Vector TileCoordinates(const math::Vector &) const; - Entity **EntitiesBegin() { return &entities; } - Entity **EntitiesEnd() { return (&entities) + numEntities; } + Entity *EntitiesBegin() { return entities; } + Entity *EntitiesEnd() { return entities + numEntities; } - void Render(SDL_Surface *dest, const geometry::Vector &offset) const; - void RenderDebug(SDL_Surface *dest, const geometry::Vector &offset) const; + /// Render the map. + /// Entities are not rendered by this function. + void Render( + SDL_Surface *dest, + const math::Vector &offset, + unsigned int frame) const; + /// Render a debugging overlay that includes collision and trigger + /// information. + void RenderDebug(SDL_Surface *dest, const math::Vector &offset) const; -// temporary setters -public: - void SetTileset(const graphics::Sprite *t) { tileset = t; } - void SetAreas(Area *a, int num) { areas = a; numAreas = num; } - void SetTriggers(Trigger *t, int num) { triggers = t; numTriggers = num; } - void SetEntities(Entity *e, int num) { entities = e; numEntities = num; } - void SetWidth(int w) { width = w; } + static void CreateTypeDescription(); + static void Construct(void *); private: const graphics::Sprite *tileset; + SDL_Surface *battlebg; Area *areas; int numAreas; Trigger *triggers; @@ -57,4 +84,4 @@ private: } -#endif /* MAP_MAP_H_ */ +#endif