aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2016-01-12 08:49:12 -0500
committerClyne Sullivan <tullivan99@gmail.com>2016-01-12 08:49:12 -0500
commit599425c0380630197005c9ecc86604396d612f81 (patch)
treee9660c0b9c0ae1c015e2c25281e758ff75018604 /src
parent1574754cdaca14d68459cc520b63b6b3c449ecbd (diff)
inside?
Diffstat (limited to 'src')
-rw-r--r--src/common.cpp3
-rw-r--r--src/entities.cpp4
-rw-r--r--src/gameplay.cpp54
-rw-r--r--src/ui.cpp5
-rw-r--r--src/world.cpp30
5 files changed, 71 insertions, 25 deletions
diff --git a/src/common.cpp b/src/common.cpp
index 6307790..84515c3 100644
--- a/src/common.cpp
+++ b/src/common.cpp
@@ -10,6 +10,8 @@
#include <vector>
#endif // __WIN32__
+void *NULLPTR = NULL;
+
#ifndef __WIN32__
unsigned int millis(void){
@@ -84,7 +86,6 @@ void strVectorSortAlpha(std::vector<std::string> *v){
change = false;
for(unsigned int i=0;i<v->size()-1;i++){
if(v[0][i] > v[0][i+1]){
- std::cout<<"swap "<<v[0][i]<<" <-> "<<v[0][i+1]<<std::endl;
std::swap(v[0][i],v[0][i+1]);
change = true;
}
diff --git a/src/entities.cpp b/src/entities.cpp
index 627946b..b4c34d9 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -673,8 +673,6 @@ char *Structures::save(void){
esp = baseSave();
memcpy(&ssp->esp,esp,sizeof(EntitySavePacket));
delete[] esp;
- ssp->inWorld = inWorld;
- ssp->inside = inside;
ssp->bsubtype = bsubtype;
return (char *)ssp;
}
@@ -682,8 +680,6 @@ char *Structures::save(void){
void Structures::load(char *s){
StructuresSavePacket *ssp = (StructuresSavePacket *)s;
baseLoad((char *)&ssp->esp);
- inWorld = ssp->inWorld;
- inside = ssp->inside;
bsubtype = ssp->bsubtype;
}
diff --git a/src/gameplay.cpp b/src/gameplay.cpp
index 55161f9..d647270 100644
--- a/src/gameplay.cpp
+++ b/src/gameplay.cpp
@@ -153,8 +153,12 @@ void initEverything(void){
const char *name;
std::vector<std::string> xmlFiles;
static char *file;
+
+ static bool Indoor = false;
bool dialog;
float spawnx;
+ World **yoyo;//,**yoyo2;
+
XMLDocument xml;
XMLElement *wxml;
@@ -181,9 +185,17 @@ void initEverything(void){
std::cout<<std::endl<<"Loading "<<file<<" ..."<<std::endl<<std::endl;
xml.LoadFile(file);
- wxml = xml.FirstChildElement("World")->FirstChildElement();
+ wxml = xml.FirstChildElement("World");//->FirstChildElement();
- earth.push_back(new World());
+ if(wxml){
+ wxml = wxml->FirstChildElement();
+ earth.push_back(new World());
+ Indoor = false;
+ }else if((wxml = xml.FirstChildElement("IndoorWorld"))){
+ wxml = wxml->FirstChildElement();
+ earth.push_back(new IndoorWorld());
+ Indoor = true;
+ }
for(auto &l : earthlnk){
if(!strcmp(file+4,l.name)){
@@ -209,12 +221,28 @@ void initEverything(void){
break;
}
}
+ }else if(Indoor && !strcmp(name,"link") && wxml->Attribute("outside")){
+ for(auto &l : earthlnk){
+ if(!strcmp(l.name,wxml->Attribute("outside"))){
+ for(auto &b : l.ptr->build){
+ if(*b->inside == earth.back()){
+ ((IndoorWorld *)*b->inside)->outside = l.ptr;
+ }
+ }
+ break;
+ }
+ }
}else if(!strcmp(name,"style")){
earth.back()->setBackground((WORLD_BG_TYPE)wxml->UnsignedAttribute("background"));
earth.back()->setBGM(wxml->Attribute("bgm"));
}else if(!strcmp(name,"generation")){
if(!strcmp(wxml->Attribute("type"),"Random")){
- earth.back()->generate(wxml->UnsignedAttribute("width"));
+ if(Indoor)
+ ((IndoorWorld *)earth.back())->generate(wxml->UnsignedAttribute("width"));
+ else
+ earth.back()->generate(wxml->UnsignedAttribute("width"));
+ }else if(Indoor){
+ abort();
}
}else if(!strcmp(name,"mob")){
if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR)
@@ -245,10 +273,24 @@ SKIP:
npcd.push_back((NPCDialog){earth.back()->npc.back(),0});
}
}else if(!strcmp(name,"structure")){
- /*if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR)
- earth.back()->addStructure((getRand() % earth.back()->getTheWidth() / 2.0f,100);
+ if(wxml->Attribute("inside")){
+ for(auto &l : earthlnk){
+ if(!strcmp(l.name,wxml->Attribute("inside"))){
+ yoyo = &l.ptr;
+ break;
+ }
+ }
+ }
+ /*for(auto &l : earthlnk){
+ if(!strcmp(file+4,l.name)){
+ yoyo2 = &l.ptr;
+ break;
+ }
+ }*/
+ if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR)
+ earth.back()->addStructure((BUILD_SUB)wxml->UnsignedAttribute("type"),getRand() % earth.back()->getTheWidth() / 2.0f,100,yoyo);//,yoyo2);
else
- earth.back()->addNPC(wxml->FloatAttribute("x"),wxml->FloatAttribute("y"));*/
+ earth.back()->addStructure((BUILD_SUB)wxml->UnsignedAttribute("type"),spawnx,wxml->FloatAttribute("y"),yoyo);//,yoyo2);
}
wxml = wxml->NextSiblingElement();
diff --git a/src/ui.cpp b/src/ui.cpp
index 0d01033..616eb82 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -718,8 +718,9 @@ DONE:
//delete &tmp;
toggleBlackFast();
}
- }else
+ }else{
currentWorld=currentWorld->goInsideStructure(player);
+ }
break;
case SDLK_i:
currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible
@@ -823,7 +824,7 @@ DONE:
currentWorld->addLight({player->loc.x + SCREEN_WIDTH/2, player->loc.y},{1.0f,1.0f,1.0f});
break;
case SDLK_g:
- currentWorld->addStructure(LAMP_POST, player->loc.x, player->loc.y, currentWorld);
+ //currentWorld->addStructure(LAMP_POST, player->loc.x, player->loc.y, currentWorld);
break;
default:
break;
diff --git a/src/world.cpp b/src/world.cpp
index 451a022..19e9fbc 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -185,8 +185,6 @@ void World::load(std::ifstream *i){
}
}
-void *NULLPTR = NULL;
-
World::World(void){
bgm = NULL;
@@ -1057,21 +1055,28 @@ LOOOOP:
goto LOOOOP;
}
}
-void World::addStructure(BUILD_SUB sub, float x,float y,World *inside){
+void World::addStructure(BUILD_SUB sub, float x,float y,World **inside){//,World **outside){
build.push_back(new Structures());
build.back()->spawn(sub,x,y,this);
build.back()->inWorld=this;
- build.back()->inside = (World *)inside;
- ((IndoorWorld *)inside)->outside = this;
+ build.back()->inside = inside;
+ //std::cout<<"yo"<<std::endl;
+
+
+// void * |void ** - *|void ** | void **
+ //((IndoorWorld *)inside[0])->outside = outside;
+
+
+ //std::cout<<"yo"<<std::endl;
entity.push_back(build.back());
}
-void World::addVillage(int bCount, int npcMin, int npcMax,World *inside){
+void World::addVillage(int bCount, int npcMin, int npcMax,World **inside){
std::cout << npcMin << ", " << npcMax << std::endl;
//int xwasd;
for(int i = 0; i < bCount; i++){
- addStructure(HOUSE,x_start + (i * 300),100,inside);
+ addStructure(HOUSE,x_start + (i * 300),100,inside);//,(World **)&NULLPTR);
/*std::cout<<"1\n";
HERE:
xwasd = (rand()%(int)x+1000*HLINE);
@@ -1197,24 +1202,25 @@ World *World::goInsideStructure(Player *p){
if(!thing.size()){
for(auto &b : build){
if(p->loc.x > b->loc.x &&
- p->loc.x + p->width < b->loc.x + b->width ){
+ p->loc.x + p->width < b->loc.x + b->width &&
+ *b->inside != this ){
thing.push_back(this);
ui::toggleBlackFast();
ui::waitForCover();
ui::toggleBlackFast();
- return (World *)b->inside;
+ return (World *)*b->inside;
}
}
}else{
for(auto &b : ((World *)thing.back())->build){
- if(b->inside == this){
- World *tmp = (World *)thing.back();
+ if(*b->inside == this){
+ //World *tmp = (World *)thing.back();
p->loc.x = b->loc.x + (b->width / 2) - (p->width / 2);
thing.erase(thing.end()-1);
ui::toggleBlackFast();
ui::waitForCover();
ui::toggleBlackFast();
- return tmp;
+ return ((IndoorWorld *)(*b->inside))->outside;
}
}
}