From 599425c0380630197005c9ecc86604396d612f81 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan <tullivan99@gmail.com> Date: Tue, 12 Jan 2016 08:49:12 -0500 Subject: inside? --- include/common.h | 2 ++ include/entities.h | 4 +-- include/world.h | 4 +-- src/common.cpp | 3 ++- src/entities.cpp | 4 --- src/gameplay.cpp | 54 +++++++++++++++++++++++++++++++++----- src/ui.cpp | 5 ++-- src/world.cpp | 30 ++++++++++++--------- xml/playerSpawnHill1.xml | 4 +-- xml/playerSpawnHill1_Building1.xml | 9 +++++++ 10 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 xml/playerSpawnHill1_Building1.xml diff --git a/include/common.h b/include/common.h index 22ecb22..be32019 100644 --- a/include/common.h +++ b/include/common.h @@ -203,4 +203,6 @@ unsigned int millis(void); int getdir(const char *dir, std::vector<std::string> &files); void strVectorSortAlpha(std::vector<std::string> *v); +extern void *NULLPTR; + #endif // COMMON_H diff --git a/include/entities.h b/include/entities.h index d7ad2c0..1e6d316 100644 --- a/include/entities.h +++ b/include/entities.h @@ -198,15 +198,13 @@ public: typedef struct { EntitySavePacket esp; - World *inWorld; - World *inside; BUILD_SUB bsubtype; } __attribute__ ((packed)) StructuresSavePacket; class Structures : public Entity{ public: World *inWorld; - World *inside; + World **inside; BUILD_SUB bsubtype; Structures(); diff --git a/include/world.h b/include/world.h index ef37365..27936f7 100644 --- a/include/world.h +++ b/include/world.h @@ -176,8 +176,8 @@ public: std::vector<Particles *> particles; std::vector<Light > light; - void addStructure(BUILD_SUB sub,float x,float y,World *inside); - void addVillage(int bCount, int npcMin, int npcMax,World *inside); + void addStructure(BUILD_SUB sub,float x,float y,World **inside);//,World **outside); + void addVillage(int bCount, int npcMin, int npcMax,World **inside); void addMob(int t,float x,float y); void addMob(int t,float x,float y,void (*hey)(Mob *)); void addNPC(float x,float y); 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; } } } diff --git a/xml/playerSpawnHill1.xml b/xml/playerSpawnHill1.xml index 5ad31b0..12d55fc 100644 --- a/xml/playerSpawnHill1.xml +++ b/xml/playerSpawnHill1.xml @@ -3,13 +3,13 @@ <style background="0" bgm="assets/music/embark.wav" /> <generation type="Random" width="800" /> - <link right="playerSpawnHill2.xml" /> + <!--<link right="playerSpawnHill2.xml" />--> <mob type="1" /> <npc name="Ralph" hasDialog="true" /> <npc name="Johnny" hasDialog="true" /> - <structure type="6"/> + <structure type="5" inside="playerSpawnHill1_Building1.xml" /> </World> diff --git a/xml/playerSpawnHill1_Building1.xml b/xml/playerSpawnHill1_Building1.xml new file mode 100644 index 0000000..a9245e7 --- /dev/null +++ b/xml/playerSpawnHill1_Building1.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<IndoorWorld> + <style background="1" bgm="assets/music/theme_jazz.wav" /> + <generation type="Random" width="400" /> + + <link outside="playerSpawnHill1.xml" /> + +</IndoorWorld> + -- cgit v1.2.3 From 9765c6303b763a60a2d917fc3c334b30e0fbbcfa Mon Sep 17 00:00:00 2001 From: drumsetmonkey <abelleisle@roadrunner.com> Date: Tue, 12 Jan 2016 21:28:22 -0500 Subject: Fixed nvidia GLSL bug --- main.cpp | 54 ++++++++++++++++++++++++++---------------------------- test.frag | 12 +++++++----- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/main.cpp b/main.cpp index 79c7250..c363875 100644 --- a/main.cpp +++ b/main.cpp @@ -341,43 +341,41 @@ int main(/*int argc, char *argv[]*/){ * Initializes our shaders so that the game has shadows. */ - #ifdef SHADERS - std::cout << "Initializing shaders!" << std::endl; + std::cout << "Initializing shaders!" << std::endl; - fragShader = glCreateShader(GL_FRAGMENT_SHADER); + fragShader = glCreateShader(GL_FRAGMENT_SHADER); - std::string shaderFileContents = readFile("test.frag"); - const GLchar *shaderSource = shaderFileContents.c_str(); + std::string shaderFileContents = readFile("test.frag"); + const GLchar *shaderSource = shaderFileContents.c_str(); - GLint bufferln = GL_FALSE; - int logLength; + GLint bufferln = GL_FALSE; + int logLength; - glShaderSource(fragShader, 1, &shaderSource, NULL); - glCompileShader(fragShader); + glShaderSource(fragShader, 1, &shaderSource, NULL); + glCompileShader(fragShader); - glGetShaderiv(fragShader, GL_COMPILE_STATUS, &bufferln); - glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength); - std::vector<char>fragShaderError((logLength > 1) ? logLength : 1); - glGetShaderInfoLog(fragShader, logLength, NULL, &fragShaderError[0]); - std::cout << &fragShaderError[0] << std::endl; - - if(bufferln == GL_FALSE){ - std::cout << "Error compiling shader" << std::endl; - } + glGetShaderiv(fragShader, GL_COMPILE_STATUS, &bufferln); + glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength); + std::vector<char>fragShaderError((logLength > 1) ? logLength : 1); + glGetShaderInfoLog(fragShader, logLength, NULL, &fragShaderError[0]); + std::cout << &fragShaderError[0] << std::endl; + + if(bufferln == GL_FALSE){ + std::cout << "Error compiling shader" << std::endl; + } - shaderProgram = glCreateProgram(); - glAttachShader(shaderProgram, fragShader); - glLinkProgram(shaderProgram); - glValidateProgram(shaderProgram); + shaderProgram = glCreateProgram(); + glAttachShader(shaderProgram, fragShader); + glLinkProgram(shaderProgram); + glValidateProgram(shaderProgram); - glGetProgramiv(shaderProgram, GL_LINK_STATUS, &bufferln); - glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &logLength); - std::vector<char> programError( (logLength > 1) ? logLength : 1 ); - glGetProgramInfoLog(shaderProgram, logLength, NULL, &programError[0]); - std::cout << &programError[0] << std::endl; + glGetProgramiv(shaderProgram, GL_LINK_STATUS, &bufferln); + glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &logLength); + std::vector<char> programError( (logLength > 1) ? logLength : 1 ); + glGetProgramInfoLog(shaderProgram, logLength, NULL, &programError[0]); + std::cout << &programError[0] << std::endl; - #endif //SHADERS //glEnable(GL_DEPTH_TEST); //THIS DOESN'T WORK ON LINUX glEnable(GL_MULTISAMPLE); diff --git a/test.frag b/test.frag index 5c9054e..07b4a8a 100644 --- a/test.frag +++ b/test.frag @@ -2,7 +2,7 @@ uniform sampler2D sampler; uniform int numLight; -uniform vec2 lightLocation[1024]; +uniform vec2 lightLocation[64]; uniform vec3 lightColor; uniform float amb; @@ -10,20 +10,22 @@ float b = .0005; float minLight = .05; float radius = sqrt(1.0 / (b * minLight)); +//float radius = b*minlight; + void main(){ - vec4 color = vec4(0.0f,0.0f,0.0f,0.0f); + vec4 color = vec4(0.0,0.0,0.0,0.0); for(int i = 0; i < numLight; i++){ vec2 loc = lightLocation[i]; float dist = length(loc - gl_FragCoord.xy); //float attenuation=1.0/(1.0+0.01*dist+0.00000000001*dist*dist); float attenuation = clamp(1.0 - dist*dist/(radius*radius), 0.0, 1.0); attenuation *= attenuation; - color += vec4(attenuation, attenuation, attenuation, 1.0f) * vec4(lightColor, 1.0f); + color += vec4(attenuation, attenuation, attenuation, 1.0) * vec4(lightColor, 1.0); } vec2 coords = gl_TexCoord[0].st; vec4 tex = texture2D(sampler, coords); - color += vec4(amb,amb,amb,1.0f+amb); + color += vec4(amb,amb,amb,1.0+amb); gl_FragColor = tex * vec4(color)*tex.a; } @@ -34,4 +36,4 @@ void main(){ .00008 500 .00002 1000 .00005 2000 -*/ +*/ \ No newline at end of file -- cgit v1.2.3