aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordrumsetmonkey <abelleisle@roadrunner.com>2015-10-23 08:48:10 -0400
committerdrumsetmonkey <abelleisle@roadrunner.com>2015-10-23 08:48:10 -0400
commit7638fd9e6f3875faca536177083cdd7cb106b4c0 (patch)
tree6c88873020188c55f6618dc261494918b77599a9 /src
parent0b5a24d5c3ea48c748cfa28ae258cd65187f9bf1 (diff)
parentf3693157df0217d9dde1638a46a69b37e997c8fb (diff)
Worked on the new texture library
Diffstat (limited to 'src')
-rw-r--r--src/entities.cpp93
-rw-r--r--src/gameplay.cpp71
-rw-r--r--src/ui.cpp16
-rw-r--r--src/world.cpp2
4 files changed, 107 insertions, 75 deletions
diff --git a/src/entities.cpp b/src/entities.cpp
index 1f45e40..ae8b4c8 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -1,9 +1,10 @@
#include <entities.h>
#include <ui.h>
-extern std::vector<Entity*>entity;
-//extern std::vector<NPC>npc;
-extern std::vector<Structures>build;
+std::vector<Entity *> entity;
+std::vector<NPC *> npc;
+std::vector<Structures *> build;
+std::vector<Mob *> mob;
extern FILE* names;
extern unsigned int loops;
@@ -13,14 +14,18 @@ void Entity::spawn(float x, float y){ //spawns the entity you pass to it based o
loc.y = y;
vel.x = 0;
vel.y = 0;
- alive = true;
- right = true;
- left = false;
- near = false;
- canMove = true;
- ground = false;
+
+ alive = true;
+ right = true;
+ left = false;
+ near = false;
+ canMove = true;
+ ground = false;
+
ticksToUse = 0;
+
if(!maxHealth)health = maxHealth = 1;
+
name = (char*)malloc(16);
getName();
}
@@ -28,48 +33,40 @@ void Entity::spawn(float x, float y){ //spawns the entity you pass to it based o
Player::Player(){ //sets all of the player specific traits on object creation
width = HLINE * 10;
height = HLINE * 16;
- speed = 1;
+
type = PLAYERT; //set type to player
- subtype = 0;
- maxHealth = 100;
- health = maxHealth;
- alive = true;
- ground = false;
- near = true;
- inv = new Inventory(PLAYER_INV_SIZE);
+ subtype = 0;
+ health = maxHealth = 100;
+ speed = 1;
tex = new Texturec(3, "assets/player1.png", "assets/player.png", "assets/player2.png");
+ inv = new Inventory(PLAYER_INV_SIZE);
}
NPC::NPC(){ //sets all of the NPC specific traits on object creation
width = HLINE * 10;
height = HLINE * 16;
- speed = 1;
- type = NPCT; //sets type to npc
+
+ type = NPCT; //sets type to npc
subtype = 0;
- alive = true;
- canMove = true;
- near = false;
+
tex = new Texturec(1,"assets/NPC.png");
inv = new Inventory(NPC_INV_SIZE);
}
Structures::Structures(){ //sets the structure type
- type = STRUCTURET;
- speed = 0;
- alive = true;
- near = false;
+ health = maxHealth = 1;
+
+ alive = false;
+ near = false;
+
tex = new Texturec(1,"assets/house1.png");
}
Mob::Mob(int sub){
width = HLINE * 10;
height = HLINE * 8;
- speed = 1;
type = MOBT; //sets type to MOB
subtype = sub; //SKIRL
- alive = true;
- canMove = true;
- near = false;
if(subtype == 1){//RABBIT
tex = new Texturec(2, "assets/rabbit.png", "assets/rabbit1.png");
}else if(subtype == 2){//BIRD
@@ -233,13 +230,11 @@ void NPC::wander(int timeRun, vec2 *v){ //this makes the entites wander about
}
std::vector<int (*)(NPC *)> AIpreload; // A dynamic array of AI functions that are being preloaded
-std::vector<void *> AIpreaddr; // A dynamic array of pointers to the NPC's that are being assigned the preloads
+std::vector<NPC *> AIpreaddr; // A dynamic array of pointers to the NPC's that are being assigned the preloads
void NPC::addAIFunc(int (*func)(NPC *),bool preload){
if(preload){ // Preload AI functions so that they're given after
-#ifdef DEBUG // the current dialog box is closed
- DEBUG_printf("Preloading an AI %x.\n",func);
-#endif // DEBUG
+ // the current dialog box is closed
AIpreload.push_back(func);
AIpreaddr.push_back(this);
}
@@ -273,30 +268,38 @@ unsigned int Structures::spawn(_TYPE t, float x, float y){ //spawns a structure
loc.x = x;
loc.y = y;
type = t;
+
alive = true;
- health = maxHealth = 1;
/*VILLAGE*/
- if(type == STRUCTURET){
- loc.y=100;
+ switch(type){
+ case STRUCTURET:
width = 50 * HLINE;
height = 40 * HLINE;
/*
- * tempN is the amount of entities that will be spawned in the village. As of 10/21/2015 the village
- * can spawn bewteen 2 and 7 villagers for the starting hut.
+ * tempN is the amount of entities that will be spawned in the village. Currently the village
+ * will spawn bewteen 2 and 7 villagers for the starting hut.
*/
- int tempN = (getRand() % 5 + 2); //amount of villagers that will spawn
+
+ unsigned int tempN = (getRand() % 5 + 2);
+
for(int i=0;i<tempN;i++){
+
/*
* This is where the entities actually spawn.
* A new entity is created with type NPC so polymorphism can be used
*/
- entity.push_back(new NPC()); //create a new entity of NPC type
- NPCp(entity[entity.size()-1])->spawn(loc.x + (float)(i - 5),100); //sets the position of the villager around the village
+
+ npc.push_back(new NPC());
+ npc.back()->spawn(loc.x+(i-5),100);
+
+ entity.push_back(npc.back());
+
}
- return entity.size();
+ break;
}
+ return 0;
}
/*
@@ -305,8 +308,8 @@ unsigned int Structures::spawn(_TYPE t, float x, float y){ //spawns a structure
* See NPC::wander for the explaination of the arguments variables
*/
void Mob::wander(int timeRun, vec2* v){
- switch(subtype){ //SKIRL
- case 1:
+ switch(subtype){
+ case 1: //SKIRL
static int direction; //variable to decide what direction the entity moves
if(ticksToUse == 0){
ticksToUse = timeRun;
diff --git a/src/gameplay.cpp b/src/gameplay.cpp
index f9d2578..1f4b3fe 100644
--- a/src/gameplay.cpp
+++ b/src/gameplay.cpp
@@ -3,12 +3,12 @@
#include <ui.h>
#include <entities.h>
-extern World *currentWorld;
-extern std::vector<Entity*>entity;
-extern std::vector<NPC>npc;
-extern std::vector<Structures *>build;
-extern Player *player;
-extern std::vector<Mob>mob;
+extern World *currentWorld;
+extern Player *player;
+extern std::vector<Entity *> entity;
+extern std::vector<Structures *> build;
+extern std::vector<Mob *> mob;
+extern std::vector<NPC *> npc;
extern void mainLoop(void);
@@ -29,37 +29,66 @@ int giveTestQuest(NPC *speaker){
void initEverything(void){
unsigned int i;
+ /*
+ * Generate a new world.
+ */
+
World *test=new World();
test->generate(SCREEN_WIDTH/2);
+
+ /*
+ * Add two layers, a platform, and a hole to the world.
+ */
+
test->addLayer(400);
test->addLayer(100);
+
test->addPlatform(150,100,100,10);
+
test->addHole(100,150);
+
+ /*
+ * Setup the current world, making the player initially spawn in `test`.
+ */
+
currentWorld=test;
- // Make the player
+ /*
+ * Create the player.
+ */
+
player=new Player();
player->spawn(0,100);
- // Make structures
- entity.push_back(new Entity());
+ /*
+ * Create a structure (this will create villagers when spawned).
+ */
+
build.push_back(new Structures());
- entity[0]=build[0];
-
- build[0]->spawn(STRUCTURET,(rand()%120*HLINE),10);
+ entity.push_back(build.back());
+ build.back()->spawn(STRUCTURET,(rand()%120*HLINE),10);
+
+ /*
+ * Generate an indoor world and link the structure to it.
+ */
+
IndoorWorld *iw=new IndoorWorld();
iw->generate(200);
- build[0]->inside=iw;
+ build.back()->inside=iw;
- entity.push_back(new Mob(1)); //create a new entity of NPC type
- mob.push_back(Mob(1)); //create new NPC
- entity[entity.size()] = &mob[mob.size()-1]; //set the new entity to have the same traits as an NPC
- entity[entity.size()-1]->spawn(200,100); //sets the position of the villager around the village
- entity.pop_back();
-
+ /*
+ * Spawn a mob.
+ */
+ mob.push_back(new Mob(1));
+ entity.push_back(mob.back());
+ mob.back()->spawn(200,100);
+ /*
+ * Link all the entities that were just created to the initial world, and setup a test AI function.
+ */
NPCp(entity[1])->addAIFunc(giveTestQuest,false);
- for(i=0;i<entity.size()+1;i++){
- entity[i]->inWorld=test;
+
+ for(i=0;i<entity.size();i++){
+ entity[i]->inWorld=currentWorld;
}
}
diff --git a/src/ui.cpp b/src/ui.cpp
index f36edeb..9d7de8a 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -6,7 +6,7 @@ extern Player *player; // 'player' should be (must be) defined in main.cpp
extern World *currentWorld; // should/must also be defined in main.cpp
extern std::vector<int (*)(NPC *)> AIpreload; // see entities.cpp
-extern std::vector<void *> AIpreaddr; //
+extern std::vector<NPC *> AIpreaddr; //
extern bool gameRunning;
@@ -261,12 +261,12 @@ namespace ui {
}
unsigned int i;
- if(!dialogBoxExists&&AIpreaddr.size()){ // Flush preloaded AI functions if necessary
- for(i=0;i<AIpreaddr.size();i++){
- NPCp(AIpreaddr.front())->addAIFunc(AIpreload.front(),false);
- AIpreaddr.erase(AIpreaddr.begin());
- AIpreload.erase(AIpreload.begin());
- }
- }
+ //if(!dialogBoxExists&&AIpreaddr.size()){ // Flush preloaded AI functions if necessary
+ //for(i=0;i<AIpreaddr.size();i++){
+ //AIpreaddr.front()->addAIFunc(AIpreload.front(),false);
+ //AIpreaddr.erase(AIpreaddr.begin());
+ //AIpreload.erase(AIpreload.begin());
+ //}
+ //}
}
}
diff --git a/src/world.cpp b/src/world.cpp
index 98b9aa7..a05c155 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -182,7 +182,7 @@ LOOP2: // Draw each world
if(p->ground==1&&i<ph+6&&i>ph-6)cline[i].gs=false;
else cline[i].gs=true;
}
- for(i=0;i<entity.size()+1;i++){
+ for(i=0;i<entity.size();i++){
if(entity[i]->inWorld==this){
entity[i]->draw();
}