diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ui.cpp | 12 | ||||
-rw-r--r-- | src/world.cpp | 128 |
2 files changed, 93 insertions, 47 deletions
@@ -52,7 +52,6 @@ static char dialogBoxText[512]; static char *dialogOptText[4]; static float dialogOptLoc[4][3]; static unsigned char dialogOptCount = 0; -static bool dialogPassive = false; static bool typeOutDone = true; extern Menu* currentMenu; @@ -114,6 +113,8 @@ namespace ui { bool debug=false; bool posFlag=false; + bool dialogPassive = false; + /* * Dialog stuff that needs to be 'public'. @@ -555,9 +556,10 @@ namespace ui { if(dialogImportant){ setFontColor(255,255,255); - if(fadeIntensity == 255){ + if(fadeIntensity == 255 || dialogPassive){ setFontSize(24); putStringCentered(offset.x,offset.y,rtext); + setFontSize(16); } }else{ @@ -602,7 +604,7 @@ namespace ui { Mix_PlayChannel(1,dialogClick,0); } - }else if(!dialogImportant && !fadeIntensity){ + }if(!fadeIntensity){ vec2 hub = { (SCREEN_WIDTH/2+offset.x)-fontSize*10, (offset.y+SCREEN_HEIGHT/2)-fontSize @@ -1182,6 +1184,10 @@ DONE: return; } switch(SDL_KEY){ + case SDLK_w: + dialogPassive = true; + importantText("Welcome to Meme-Town"); + break; case SDLK_a: left = false; break; diff --git a/src/world.cpp b/src/world.cpp index 2012d32..d039bca 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -17,39 +17,25 @@ bool worldInside = false; // True if player is inside a structure WEATHER weather = SUNNY; -// const char *bgPaths[2][7]={ -// {"assets/bg.png", // Daytime background -// "assets/bgn.png", // Nighttime background -// "assets/bgFarMountain.png", // Furthest layer -// "assets/forestTileBack.png", // Closer layer -// "assets/forestTileMid.png", // Near layer -// "assets/forestTileFront.png", // Closest layer -// "assets/dirt.png"}, // Dirt -// {"assets/bgWoodTile.png", -// NULL, -// NULL, -// NULL, -// NULL, -// NULL} -// }; - -const std::string bgPaths[2][8]={ - {"bg.png", // Daytime background - "bgn.png", // Nighttime background - "bgFarMountain.png", // Furthest layer - "forestTileBack.png", // Closer layer - "forestTileMid.png", // Near layer - "forestTileFront.png", // Closest layer - "dirt.png", // Dirt - "grass.png"}, // Grass - {"bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png", - "bgWoodTile.png"} + +const std::string bgPaths[2][9]={ + {"bg.png", // Daytime background + "bgn.png", // Nighttime background + "bgFarMountain.png", // Furthest layer + "forestTileFar.png", // Furthest away Tree Layer + "forestTileBack.png", // Closer layer + "forestTileMid.png", // Near layer + "forestTileFront.png", // Closest layer + "dirt.png", // Dirt + "grass.png"}, // Grass + {"bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png", + "bgWoodTile.png"} }; const std::string buildPaths[] = { "townhall.png", @@ -61,10 +47,11 @@ const std::string buildPaths[] = { "townhall.png", "lampPost1.png", "brazzier.png"}; -const float bgDraw[3][3]={ +const float bgDraw[4][3]={ {100,240,.6 }, {150,250,.4 }, - {255,255,.25} + {200,255,.25}, + {255,255,.1} }; float worldGetYBase(World *w){ @@ -342,7 +329,7 @@ void World::update(Player *p,unsigned int delta){ if(e->type != STRUCTURET && e->canMove){ e->loc.x += e->vel.x * delta; if(e->vel.x < 0)e->left = true; - else if(e->vel.x > 0)e->left = false; + else if(e->vel.x > 0)e->left = false; } } @@ -489,10 +476,10 @@ void World::draw(Player *p){ glEnd(); /* - * Draw three layers of trees. + * Draw four layers of trees. */ - for(i = 0; i < 3; i++){ + for(i = 0; i < 4; i++){ bgTex->bindNext(); safeSetColorA(bgDraw[i][0]-bgshade,bgDraw[i][0]-bgshade,bgDraw[i][0]-bgshade,bgDraw[i][1]); @@ -590,8 +577,7 @@ void World::draw(Player *p){ } for(auto &b : current->build){ b->draw(); - } - + } /* * Draw the layer up until the grass portion, which is done later. */ @@ -735,7 +721,6 @@ void World::draw(Player *p){ o->loc.y-=(yoff-DRAW_Y_OFFSET); } } - /* * If we're drawing the closest/last world, handle and draw the player. @@ -955,6 +940,7 @@ void World::singleDetect(Entity *e){ } void World::detect(Player *p){ + //static std::thread villageThread; World *hey = this; /* @@ -962,6 +948,9 @@ void World::detect(Player *p){ */ singleDetect(p); + //villageLogic(this); + //villageThread = std::thread(villageLogic, this); + /* * Handle all remaining entities in this world. @@ -988,10 +977,38 @@ void World::detect(Player *p){ } what++; }what=0; + for(auto &b : build){ + switch(b->bsubtype){ + case FOUNTAIN: + for(int r = 0; r < (rand()%25)+10;r++){ + addParticle( rand()%HLINE*3 + b->loc.x + b->width/2, + b->loc.y + b->height, + HLINE*1.25, + HLINE*1.25, + rand()%2 == 0?-(rand()%7)*.01:(rand()%7)*.01, + ((4+rand()%6)*.05), + {0,0,255}, + 2500); + + particles.back()->fountain = true; + } + break; + case FIRE_PIT: + for(int r = 0; r < (rand()%20)+10;r++){ + addParticle(rand()%(int)(b->width/2) + b->loc.x+b->width/4, b->loc.y+3*HLINE, HLINE, HLINE, rand()%2 == 0?-(rand()%3)*.01:(rand()%3)*.01,((4+rand()%6)*.005), {255,0,0}, 400); + particles.back()->gravity = false; + particles.back()->behind = true; + } + break; + default: break; + } + } + /*if(hey->infront){ hey = hey->infront; goto LOOOOP; }*/ + //villageThread.join(); } void World::addStructure(BUILD_SUB sub, float x,float y, char *tex, const char *inside){ build.push_back(new Structures()); @@ -1135,7 +1152,7 @@ World *World::goWorldRight(Player *p){ if(toRight && p->loc.x + p->width > -x_start - HLINE * 15){ tmp = loadWorldFromXML(toRight); - p->loc.x = tmp->x_start + HLINE * 10; + p->loc.x = tmp->x_start + (int)HLINE * 10; p->loc.y = tmp->line[0].y; return tmp; @@ -1479,6 +1496,7 @@ extern World *currentWorld; World *loadWorldFromXML(const char *path){ XMLDocument xml; XMLElement *wxml; + XMLElement *vil; World *tmp; float spawnx; @@ -1499,11 +1517,17 @@ World *loadWorldFromXML(const char *path){ xml.LoadFile(currentXML); wxml = xml.FirstChildElement("World"); + vil = xml.FirstChildElement("World")->FirstChildElement("village"); if(wxml){ wxml = wxml->FirstChildElement(); Indoor = false; tmp = new World(); + if(vil){ + vil = vil->FirstChildElement(); + //tmp->village.push_back(vil->Attribute("name")); + + } }else if((wxml = xml.FirstChildElement("IndoorWorld"))){ wxml = wxml->FirstChildElement(); Indoor = true; @@ -1512,7 +1536,6 @@ World *loadWorldFromXML(const char *path){ while(wxml){ name = wxml->Name(); - if(!strcmp(name,"link")){ if((ptr = wxml->Attribute("left"))) tmp->setToLeft(ptr); @@ -1577,9 +1600,26 @@ World *loadWorldFromXML(const char *path){ tmp->addMob(MS_TRIGGER,wxml->FloatAttribute("x"),0,commonTriggerFunc); tmp->mob.back()->heyid = wxml->Attribute("id"); } - + wxml = wxml->NextSiblingElement(); } + + while(vil){ + name = vil->Name(); + if(!strcmp(name,"structure")){ + ptr = vil->Attribute("inside"); + tmp->addStructure((BUILD_SUB)vil->UnsignedAttribute("type"), + vil->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR ? + getRand() % tmp->getTheWidth() / 2.0f : + spawnx, + 100, + (char*)vil->Attribute("texture"), + ptr); + + //tmp->village.back().build.push_back(tmp->build.back()); + } + vil = vil->NextSiblingElement(); + } std::ifstream dat (((std::string)currentXML + ".dat").c_str()); if(dat.good()){ |