aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/entities.hpp3
-rw-r--r--include/world.hpp337
2 files changed, 275 insertions, 65 deletions
diff --git a/include/entities.hpp b/include/entities.hpp
index ce2e14d..7487bbe 100644
--- a/include/entities.hpp
+++ b/include/entities.hpp
@@ -207,6 +207,9 @@ public:
// tells direction entity is facing
bool right, left;
+ // tells if the entity is from another world
+ char outnabout;
+
// set to 1 if entity is on the ground, 0 if in the air
unsigned char ground;
diff --git a/include/world.hpp b/include/world.hpp
index c40f5f5..74f9cb7 100644
--- a/include/world.hpp
+++ b/include/world.hpp
@@ -1,24 +1,15 @@
-/* ----------------------------------------------------------------------------
-** The world stuffs.
-**
-** This file contains the classes and variables necessary to create an in-game
-** world... "and stuffs".
-** --------------------------------------------------------------------------*/
#ifndef WORLD_H
#define WORLD_H
-/* ----------------------------------------------------------------------------
-** Includes section
-** --------------------------------------------------------------------------*/
+/**
+ * @file world.hpp
+ * @brief The world system
+ */
// local game includes
#include <common.hpp>
#include <entities.hpp>
-/* ----------------------------------------------------------------------------
-** Structures section
-** --------------------------------------------------------------------------*/
-
/**
* The background type enum.
* This enum contains all different possibilities for world backgrounds; used
@@ -47,164 +38,363 @@ enum class WorldWeather : unsigned char {
* lines. Dirt color and grass properties are also kept track of here.
*/
typedef struct {
- bool grassUnpressed;
- float grassHeight[2];
- float groundHeight;
- unsigned char groundColor;
+ bool grassUnpressed; /**< squishes grass if false */
+ float grassHeight[2]; /**< height of the two grass blades */
+ float groundHeight; /**< height of the 'line' */
+ unsigned char groundColor; /**< a value that affects the ground's color */
} WorldData;
+/**
+ * Contains info necessary for switching worlds.
+ * This pair contains a pointer to the new world, and the new set of
+ * coordinates the player should be at in that world.
+ */
typedef std::pair<World *, vec2> WorldSwitchInfo;
-/* ----------------------------------------------------------------------------
-** Variables section
-** --------------------------------------------------------------------------*/
-
-// affects brightness of world elements when drawn
+/**
+ * Alters how bright world elements are drawn.
+ * This value is based off of the current time of day (tick count), set in
+ * main.cpp.
+ */
extern int worldShade;
-// the path to the currently loaded XML file.
+/**
+ * The file path to the currently loaded XML file.
+ */
extern std::string currentXML;
-// defines how many game ticks it takes for a day to elapse
+/**
+ * Defines how many game ticks it takes to go from day to night or vice versa.
+ */
constexpr const unsigned int DAY_CYCLE = 12000;
-// velocity of player when moved by user
+/**
+ * Defines the velocity of player when moved by the keyboard
+ */
constexpr const float PLAYER_SPEED_CONSTANT = 0.15f;
-// maximum pull of gravity in one game tick
+/**
+ * Defines the strongest pull gravity can have on an entity.
+ * This is the most that can be subtracted from an entity's velocity in one
+ * game tick.
+ */
constexpr const float GRAVITY_CONSTANT = 0.001f;
-// height of the floor in an indoor world
+/**
+ * Defines the thickness of the floor in an indoor world.
+ */
constexpr const unsigned int INDOOR_FLOOR_THICKNESS = 50;
+
+/**
+ * Defines how far each floor can be from the next (height).
+ */
constexpr const unsigned int INDOOR_FLOOR_HEIGHTT = 400;
-constexpr const unsigned int INDOOR_FLOOR_HEIGHT = (INDOOR_FLOOR_HEIGHTT + INDOOR_FLOOR_THICKNESS);
-/* ----------------------------------------------------------------------------
-** Classes / function prototypes section
-** --------------------------------------------------------------------------*/
+/**
+ * Gets a combined height of the floor and the area before it.
+ * This value is commonly used for operations like moving between floors.
+ */
+constexpr const unsigned int INDOOR_FLOOR_HEIGHT = (INDOOR_FLOOR_HEIGHTT + INDOOR_FLOOR_THICKNESS);
/**
- * The village class, used to group structures into villages.
+ * The village class.
+ * This class defines an area in a world that is considered to be a village,
+ * and provides a welcome message when the player enters the area.
*/
class Village {
public:
+ /**
+ * The name of the village.
+ */
std::string name;
+
+ /**
+ * The start and end coordinates of the village.
+ */
vec2 start, end;
+
+ /**
+ * A "player in village" flag.
+ * This flag is used to trigger displaying the welcome message.
+ */
bool in;
+ /**
+ * Constructs a village with the given name, inside the given world.
+ */
Village(std::string meme, World *w);
+
+ /**
+ * Destructs the village.
+ */
~Village(void){}
};
/**
- * The world class. This class does everything a world should do.
+ * The world class.
+ * This class handles entity creation, management, and deletion. Most
+ * world-related operations have to be done through this class, such as
+ * drawing.
*/
class World {
protected:
- // an array of all the world's ground data
+ /**
+ * An array of all the world's ground data, populated through
+ * World::generate().
+ *
+ * @see generate()
+ */
std::vector<WorldData> worldData;
- // the world's current weather
+ /**
+ * Contains the current state of weather in the world.
+ */
WorldWeather weather;
- // the size of `worldData`
+ /**
+ * Contains the size of the 'worldData' array.
+ */
unsigned int lineCount;
- // the left-most (negative) coordinate of the worldStart
+ /**
+ * The starting x-coordinate of the world.
+ */
float worldStart;
- // holds / handles textures for background elements
+ /**
+ * Handles textures for the background elements.
+ */
TextureIterator bgTex;
- // defines what type of background is being used
+ /**
+ * Defines the set of background images being used for the world.
+ *
+ * @see setBackground()
+ */
WorldBGType bgType;
- // an SDL_mixer object for the world's BGM
+ /**
+ * SDL_Mixer's object for the loaded BGM.
+ */
Mix_Music *bgmObj;
- // the pathname of the loaded BGM
+ /**
+ * The filename of the world's BGM file.
+ *
+ * @see setBGM()
+ */
std::string bgm;
- // XML file names of worlds to the left and right, empty if nonexistant
+ /**
+ * The path to the XML file of the world to the left.
+ *
+ * @see setToLeft()
+ */
std::string toLeft;
+
+ /**
+ * The path to the XML file of the world to the right.
+ *
+ * @see setToRight()
+ */
std::string toRight;
- // structure texture file paths
+ /**
+ * A vector of paths for the structure textures.
+ * The appearance of structures depends on the world's theme.
+ *
+ * @see setStyle()
+ */
std::vector<std::string> sTexLoc;
- // TODO
+ /**
+ * The paths of files to be used for the background textures.
+ *
+ * @see setStyle()
+ */
std::vector<std::string> bgFiles;
+
+ /**
+ * The paths of files to be used for the indoor background textures.
+ *
+ * @see setStyle()
+ */
std::vector<std::string> bgFilesIndoors;
- // an array of star coordinates
+ /**
+ * Contains randomly generated coordinates for stars.
+ */
std::vector<vec2> star;
- // entity vectors
+ /**
+ * A vector of all light elements in the world.
+ *
+ * @see addLight()
+ * @see getLastLight()
+ */
std::vector<Light> light;
+
+ /**
+ * A vector of all mobs in the world.
+ *
+ * @see addMob()
+ * @see getLastMob()
+ * @see getNearMob()
+ */
std::vector<Mob *> mob;
+
+ /**
+ * A vector of all objects in the world.
+ *
+ * @see addObject()
+ */
std::vector<Object> object;
+
+ /**
+ * A vector of all particles in the world.
+ *
+ * @see addParticle()
+ */
std::vector<Particles> particles;
+
+ /**
+ * A vector of all structures in the world.
+ *
+ * @see addStructure()
+ * @see getStructurePos()
+ */
std::vector<Structures *> build;
+
+ /**
+ * A vector of all villages in the world.
+ *
+ * @see addVillage()
+ */
std::vector<Village> village;
- // handles death, gravity, etc. for a single entity
+ /**
+ * Handles death, gravity, etc. for a single entity
+ */
virtual void singleDetect(Entity *e);
- // frees entities and clears vectors that contain them
+ /**
+ * Destroys entities and clears vectors that contain them.
+ * This function is only called in the world destructor.
+ */
void deleteEntities(void);
-
-protected:
+ /**
+ * Draws background textures.
+ */
void drawBackgrounds();
public:
- // entity vectors that need to be public because we're based
+ /**
+ * A vector of pointers to all entities from the other vectors.
+ * This is used to mass-manage entities, or operate on entities
+ * outside of what the world does.
+ *
+ * @see getNearInteractable()
+ */
std::vector<Entity *> entity;
+ /**
+ * A vector of all NPCs in the world.
+ *
+ * @see addNPC()
+ */
std::vector<NPC *> npc;
+
+ /**
+ * A vector of all merchants in the world.
+ *
+ * @see addMerchant()
+ */
std::vector<Merchant *> merchant;
- // the world constructor, prepares variables
+ /**
+ * Constructs the world, resets variables.
+ */
World(void);
- // destructor, frees used memory
+ /**
+ * Destructs the world, frees memory.
+ */
virtual ~World(void);
- // generates a world of the specified width
+ /**
+ * Generates a world of the specified width.
+ * This will populate the 'worldData' array and create star coordinates.
+ * It's necessary to call this function to actually use the world.
+ */
void generate(int width);
- // draws everything to the screen
+ /**
+ * Draws everything the world handles to the screen (and the player).
+ * Drawing is based off of the player so that off-screen elements are not
+ * drawn.
+ */
virtual void draw(Player *p);
- // handles collisions/death of player and all entities
+ /**
+ * Handles physics for all entities and the player.
+ *
+ * @see singleDetect()
+ */
void detect(Player *p);
- // updates entities, moving them and such
+ /**
+ * Updates entity positions, time of day, and music.
+ */
void update(Player *p, unsigned int delta, unsigned int ticks);
- // gets the world's width in TODO
+ /**
+ * Gets the width of the world, presumably in pixels.
+ * TODO
+ */
int getTheWidth(void) const;
- // gets the starting x coordinate of the world
+ /**
+ * Gets the starting x-coordinate of the world.
+ *
+ * @see worldStart
+ */
float getWorldStart(void) const;
- // gets a pointer to the most recently added light
+ /**
+ * Gets a pointer to the most recently created light.
+ * This is used to update properties of the light outside of the
+ * world class.
+ */
Light *getLastLight(void);
- // gets a pointer to the most recently added mob
+ /**
+ * Gets a pointer ot the most recently created mob.
+ * This is used to update properties of the mob outside of the
+ * world class.
+ */
Mob *getLastMob(void);
- // gets the nearest interactable entity to the given one
+ /**
+ * Finds the entity nearest to the provided one.
+ */
Entity *getNearInteractable(Entity &e);
+ /**
+ * Finds the mob nearest to the given entity.
+ */
Mob *getNearMob(Entity &e);
- // gets the coordinates of the `index`th structure
+ /**
+ * Gets the coordinates of the `index`th structure.
+ */
vec2 getStructurePos(int index);
- // gets the texture path of the `index`th structure
+ /**
+ * Gets the texture path of the `index`th structure
+ */
std::string getSTextureLocation(unsigned int index) const;
// saves the world's data to an XML file
@@ -239,12 +429,29 @@ public:
WorldSwitchInfo goWorldLeft(Player *p);
WorldSwitchInfo goWorldRight(Player *p);
- // attempts to move an NPC to the left adjacent world, returning true on success
+ /**
+ * Attempts to move an NPC to the left adjacent world, returning true on success.
+ */
bool goWorldLeft(NPC *e);
+ /**
+ * Attempts to move an NPC to the world to the right, returning true on success.
+ */
+ bool goWorldRight(NPC *e);
+
// attempts to enter a structure that the player would be standing in front of
WorldSwitchInfo goInsideStructure(Player *p);
+ /**
+ * Adopts an NPC from another world, taking its ownership.
+ */
+ void adoptNPC(NPC *e);
+
+ /**
+ * Adopts a mob from another world, taking its ownership.
+ */
+ void adoptMob(Mob *e);
+
// adds a hole at the specified start and end x-coordinates
void addHole(unsigned int start,unsigned int end);