aboutsummaryrefslogtreecommitdiffstats
path: root/include/world.h
diff options
context:
space:
mode:
authordrumsetmonkey <abelleisle@roadrunner.com>2016-03-21 08:17:06 -0400
committerdrumsetmonkey <abelleisle@roadrunner.com>2016-03-21 08:17:06 -0400
commit51c6e601c3d6451294506b72213244e3aee9822f (patch)
treeff811ba8bec3c207eacd126f6e5e3764abca8a70 /include/world.h
parentbbdc924d409f74594bd8c8b0d4bf55d5e5f32209 (diff)
parent8dae5eeac2c6254bb8288c0479c193ab185a312f (diff)
Created currency and new inventory
Diffstat (limited to 'include/world.h')
-rw-r--r--include/world.h221
1 files changed, 117 insertions, 104 deletions
diff --git a/include/world.h b/include/world.h
index 2290b18..a2469ff 100644
--- a/include/world.h
+++ b/include/world.h
@@ -1,6 +1,6 @@
/** @file world.h
* @brief The world system.
- *
+ *
* This file contains the classes and variables necessary to create an in-game
* world.
*/
@@ -96,7 +96,7 @@ public:
vec2 end;
bool in;
std::vector<Structures *> build;
-
+
Village(const char *meme, World *w);
~Village(void){}
};
@@ -107,112 +107,118 @@ public:
class World {
protected:
+
/**
* The line array.
+ *
* This array is created through 'new' in World::generate(), with an amount
* of elements provided by the function.
*/
-
+
std::vector<WorldData> worldData;
-
+
/**
* Starting x coordinate.
+ *
* This x value is the point at which line[0] should reside, can be used to
* calculate the width of the world.
*/
-
+
int worldStart;
-
+
/**
* Handle physics for a single entity.
+ *
* This function handles gravity and death for an entity. The public version
* of this, World::detect(), handles all entities in the world as well as
* the player. World::singleDetect() should never be used outside of
* World::detect(), which is why it is declared private.
*/
-
- void singleDetect(Entity *e);
-
+
+ void singleDetect( Entity *e );
+
/**
* Empties all entity vectors.
+ *
* Each entity vector is iterated through, calling delete for each entry.
* Once all specific vectors are cleared, the general entity vector is
* emptied of the pointers to those other vectors. This function should only
* be called in World's destructor, as there shouldn't be another reason to
* call this function.
*/
-
- void deleteEntities(void);
-
+
+ void deleteEntities( void );
+
/**
* Number of lines in the world.
+ *
* While this number is helpful for knowing the world's width, it is kept
* private for security reasons. To compensate for this,
* World::getTheWidth() is provided (see below).
*/
-
+
unsigned int lineCount;
-
+
/**
* An array of star coordinates.
*/
-
+
std::vector<vec2> star;
-
+
/**
* The Texturec object that holds the background sprites for this world.
*/
-
+
Texturec *bgTex;
/**
* Defines the set of background images that should be used for this world.
*/
-
+
WorldBGType bgType;
-
+
/**
* The Mix_Music object that holds the background soundtrack for the world.
*/
-
+
Mix_Music *bgmObj;
-
+
/**
* The file path of the song wished to be loaded by bgmObj.
*/
-
+
std::string bgm;
-
- std::vector<std::string>bgFiles;
- std::vector<std::string>bgFilesIndoors;
-
+
+ std::vector<std::string> bgFiles;
+ std::vector<std::string> bgFilesIndoors;
+
public:
/**
* The filename of the XML file for the world to the left; NULL if no world
* is present.
*/
-
- char *toLeft;
-
+
+ std::string toLeft;
+
/**
* The filename of the XML file for the world to the right; NULL if no world
* is present.
*/
-
- char *toRight;
-
+
+ std::string toRight;
+
/**
* Sets what XML file to use for loading the world to the left.
*/
-
- char *setToLeft(const char *file);
-
+
+ std::string setToLeft( std::string file );
+
/**
* Sets what XML file to use for loading the world to the right.
*/
-
- char *setToRight(const char *file);
+
+ std::string setToRight( std::string file );
/**
* A vector of pointers to every NPC, Structure, Mob, and Object in this
@@ -227,38 +233,38 @@ public:
std::vector<NPC *> npc;
std::vector<Merchant *> merchant;
-
+
/**
* A vector of all Structures in this world.
*/
-
+
std::vector<Structures *> build;
-
+
/**
* A vector of all Mobs in this world.
*/
-
+
std::vector<Mob *> mob;
-
+
/**
* A vector of all Objects in this world.
*/
-
+
std::vector<Object *> object;
-
+
/**
* A vector of all particles in this world.
*/
-
+
std::vector<Particles> particles;
-
-
+
+
std::vector<Village *> village;
-
+
/**
* A vector of all light elements in this world.
*/
-
+
std::vector<Light> light;
/**
@@ -266,168 +272,175 @@ public:
*/
std::vector<std::string> sTexLoc;
-
+
/**
* NULLifies pointers and allocates necessary memory. This should be
* followed by some combination of setBackground(), setBGM(), or
* generate().
*/
-
+
World( void );
-
+
/**
* Frees resources taken by the world.
*/
-
+
virtual ~World(void);
-
+
/**
* Adds a structure to the world, with the specified subtype and
* coordinates. `inside` is a file name for the IndoorWorld XML file that
* this structure will lead to; if NULL the player won't be able to enter
* the structure.
*/
-
+
void addStructure(BUILD_SUB subtype,float x,float y, std::string tex, std::string inside);
-
+
/**
* Adds a Mob to the world with the specified type and coordinates.
*/
-
+
void addMob(int type,float x,float y);
-
+
/**
* Adds a Mob to the world with a handler function that can be called by
* certain mobs to trigger events.
*/
-
+
void addMob(int t,float x,float y,void (*hey)(Mob *));
-
+
/**
* Adds an NPC to the world with the specified coordinates.
*/
-
+
void addNPC(float x,float y);
-
+
/**
* Adds a Merchant to the world at the specified coordinates.
*/
-
+
void addMerchant(float x, float y);
-
+
/**
* Adds an object to the world with the specified item id and coordinates.
* If `pickupDialog` is not NULL, that string will display in a dialog box
* upon object interaction.
*/
-
+
void addObject( std::string in, std::string pickupDialog, float x, float y);
-
+
/**
* Adds a particle to the world with the specified coordinates, dimensions,
* velocity, color and duration (time to live).
*/
-
+
void addParticle(float x, float y, float w, float h, float vx, float vy, Color color, int duration);
-
+
/**
* Adds a light to the world with the specified coordinates and color.
*/
-
+
void addLight(vec2 xy, Color color);
-
+
/**
* Updates the coordinates of everything in the world that has coordinates
* and a velocity. The provided delta time is used for smoother updating.
*/
-
- void update(Player *p,unsigned int delta);
-
+
+ void update( Player *p, unsigned int delta );
+
/**
* Generate a world of the provided width. Worlds are drawn centered on the
* y-axis, so the reachable coordinates on the world would be from negative
* half-width to positive half-width.
*/
-
+
virtual void generate(unsigned int width);
-
+
/**
* Sets the background theme, collecting the required textures into a
* Texturec object.
*/
-
+
void setBackground(WorldBGType bgt);
-
+
/**
* Sets the background music for the world, required for the world to be
* playable.
*/
-
+
void setBGM(std::string path);
/**
* Sets the worlds style folder
*/
- void setStyle(std::string pre);
-
+ void setStyle(std::string pre);
+
/**
* Plays/stops this world's BGM. If `prev` is not NULL, that world's BGM
* will be faded out followed by the fading in of this world's BGM.
*/
-
+
void bgmPlay(World *prev) const;
-
+
/**
* Draw the world and entities based on the player's coordinates.
*/
virtual void draw(Player *p);
-
+
/**
* Handles collision between the entities and the world, as well as entity
* death.
*/
-
+
void detect(Player *p);
-
+
/**
* Attempts to let the player enter the left-linked world specified by
* `toLeft`. Returns the world to the left if the movement is possible,
* otherwise returns this world.
*/
-
+
World *goWorldLeft(Player *p);
-
+
/**
* Attempts to let the player enter the right-linked world specified by
* `toRight`. Returns the world to the right if the movement is possible,
* otherwise returns this world.
*/
-
+
World *goWorldRight(Player *p);
-
+
/**
* This function looks for any structure the player is standing in front of
* that also have an inside world. Returns the inside world if those
* conditions are met, otherwise returns this world.
*/
-
+
World *goInsideStructure(Player *p);
-
+
/**
* Adds a hole between the specified y coordinates. If the player falls in
* this hole the game will exit.
*/
-
+
void addHole(unsigned int start,unsigned int end);
-
- /*
- * Get's the world's width.
+
+ /**
+ * Adds a hill to the world, given the peak's coordinates and how wide the
+ * hill can be.
*/
-
+
+ void addHill( ivec2 peak, unsigned int width );
+
+ /**
+ * Gets the world's width.
+ */
+
int getTheWidth(void) const;
-
+
void save(void);
void load(void);
};
@@ -435,19 +448,19 @@ public:
/*
* IndoorWorld - Indoor settings stored in a World class
*/
-
+
class IndoorWorld : public World {
public:
IndoorWorld(void);
~IndoorWorld(void);
-
+
void generate(unsigned int width); // Generates a flat world of width 'width'
void draw(Player *p); // Draws the world (ignores layers)
};
/**
* The arena class - creates an arena.
- *
+ *
* This world, when created, expects a pointer to a Mob. This mob will be
* transported to a temporary world with the player, and the Mob will be
* killed upon exiting the arena.
@@ -470,18 +483,18 @@ public:
*/
Arena( World *leave, Player *p, Mob *m );
-
+
/**
* Frees resources taken by the arena.
*/
-
+
~Arena( void );
-
+
/**
* Attempts to exit the world, returning the player to the world they were
* last in.
*/
-
+
World *exitArena( Player *p );
};