diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components.cpp | 177 | ||||
-rw-r--r-- | src/engine.cpp | 2 | ||||
-rw-r--r-- | src/ui.cpp | 9 | ||||
-rw-r--r-- | src/world.cpp | 52 |
4 files changed, 58 insertions, 182 deletions
diff --git a/src/components.cpp b/src/components.cpp index f216cd2..7c6091e 100644 --- a/src/components.cpp +++ b/src/components.cpp @@ -7,6 +7,9 @@ #include <ui.hpp> #include <engine.hpp> #include <world.hpp> +#include <brice.hpp> + +static std::vector<std::string> randomDialog (readFileA("assets/dialog_en-us")); void MovementSystem::update(entityx::EntityManager &en, entityx::EventManager &ev, entityx::TimeDelta dt) { @@ -99,155 +102,6 @@ void RenderSystem::update(entityx::EntityManager &en, entityx::EventManager &ev, }); } -/* -void Entity::draw(void) -{ - GLfloat tex_coord[] = {0.0, 0.0, - 1.0, 0.0, - 1.0, 1.0, - - 1.0, 1.0, - 0.0, 1.0, - 0.0, 0.0}; - - GLfloat tex_coordL[] = {1.0, 0.0, - 0.0, 0.0, - 0.0, 1.0, - - 0.0, 1.0, - 1.0, 1.0, - 1.0, 0.0}; - - GLfloat coords[] = {loc.x, loc.y, z, - loc.x + width, loc.y, z, - loc.x + width, loc.y + height, z, - - loc.x + width, loc.y + height, z, - loc.x, loc.y + height, z, - loc.x, loc.y, z}; - - - glActiveTexture(GL_TEXTURE0); - - if (!alive) - return; - - if (type == NPCT) { - NPCp(this)->drawThingy(); - - if (gender == MALE) - glColor3ub(255, 255, 255); - else if (gender == FEMALE) - glColor3ub(255, 105, 180); - } else if (type == MOBT) { - if (Mobp(this)->rider != nullptr) { - Mobp(this)->rider->loc.x = loc.x + width * 0.25f; - Mobp(this)->rider->loc.y = loc.y + height - HLINES(5); - Mobp(this)->rider->vel.y = .12; - Mobp(this)->rider->z = z + 0.01; - } - } - switch(type) { - case PLAYERT: - static int texState = 0; - if (speed && !(game::time::getTickCount() % ((2.0f/speed) < 1 ? 1 : (int)((float)2.0f/(float)speed)))) { - if (++texState == 9) - texState = 1; - glActiveTexture(GL_TEXTURE0); - tex(texState); - } - if (!ground) { - glActiveTexture(GL_TEXTURE0); - tex(0); - } else if (vel.x) { - glActiveTexture(GL_TEXTURE0); - tex(texState); - } else { - glActiveTexture(GL_TEXTURE0); - tex(0); - } - break; - case MOBT: - if (!Mobp(this)->bindTex()) - goto NOPE; - break; - case STRUCTURET: - default: - glActiveTexture(GL_TEXTURE0); - tex(0); - break; - } - - Render::worldShader.use(); - // make the entity hit flash red - if (maxHitDuration-hitDuration) { - float flashAmt = 1-(hitDuration/maxHitDuration); - glUniform4f(Render::worldShader.uniform[WU_tex_color], 1.0, flashAmt, flashAmt, 1.0); - } - - glUniform1i(Render::worldShader.uniform[WU_texture], 0); - Render::worldShader.enable(); - - glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, 0, coords); - if (left) - glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0 ,tex_coordL); - else - glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0 ,tex_coord); - glDrawArrays(GL_TRIANGLES, 0, 6); - - glUniform4f(Render::worldShader.uniform[WU_tex_color], 1.0, 1.0, 1.0, 1.0); -NOPE: -if (near && type != MOBT) - ui::putStringCentered(loc.x+width/2,loc.y-ui::fontSize-game::HLINE/2,name); -if (health != maxHealth) { - - static GLuint frontH = Texture::genColor(Color(255,0,0)); - static GLuint backH = Texture::genColor(Color(150,0,0)); - glUniform1i(Render::worldShader.uniform[WU_texture], 0); - - GLfloat coord_back[] = { - loc.x, loc.y + height, z + 0.1f, - loc.x + width, loc.y + height, z + 0.1f, - loc.x + width, loc.y + height + game::HLINE * 2, z + 0.1f, - - loc.x + width, loc.y + height + game::HLINE * 2, z + 0.1f, - loc.x, loc.y + height + game::HLINE * 2, z + 0.1f, - loc.x, loc.y + height, z + 0.1f, - }; - - GLfloat coord_front[] = { - loc.x, loc.y + height, z, - loc.x + health / maxHealth * width, loc.y + height, z, - loc.x + health / maxHealth * width, loc.y + height + game::HLINE * 2, z, - - loc.x + health / maxHealth * width, loc.y + height + game::HLINE * 2, z, - loc.x, loc.y + height + game::HLINE * 2, z, - loc.x, loc.y + height, z, - }; - - glBindTexture(GL_TEXTURE_2D, backH); - GLfloat tex[] = { 0.0, 0.0, - 1.0, 0.0, - 1.0, 1.0, - - 1.0, 1.0, - 0.0, 1.0, - 0.0, 0.0, - }; - glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, 0, coord_back); - glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0, tex); - glDrawArrays(GL_TRIANGLES, 0, 6); - - glBindTexture(GL_TEXTURE_2D, frontH); - glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, 0, coord_front); - glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0, tex); - glDrawArrays(GL_TRIANGLES, 0, 6); -} - -Render::worldShader.disable(); -Render::worldShader.unuse(); -}*/ - void DialogSystem::configure(entityx::EventManager &ev) { ev.subscribe<MouseClickEvent>(*this); @@ -267,7 +121,10 @@ void DialogSystem::receive(const MouseClickEvent &mce) auto exml = game::engine.getSystem<WorldSystem>()->getXML()->FirstChildElement("Dialog"); int newIndex; - if (exml != nullptr) { + if (d.index == 9999) { + ui::dialogBox(name.name, "", false, randomDialog[d.rindex % randomDialog.size()]); + ui::waitForDialog(); + } else if (exml != nullptr) { while (exml->StrAttribute("name") != name.name) exml = exml->NextSiblingElement(); @@ -275,12 +132,22 @@ void DialogSystem::receive(const MouseClickEvent &mce) while (exml->IntAttribute("id") != d.index) exml = exml->NextSiblingElement(); - auto cxml = exml->FirstChildElement("content"); - if (cxml == nullptr) - return; + auto oxml = exml->FirstChildElement("set"); + if (oxml != nullptr) { + do game::setValue(oxml->StrAttribute("id"), oxml->StrAttribute("value")); + while ((oxml = oxml->NextSiblingElement())); + game::briceUpdate(); + } + - auto content = cxml->GetText() - 1; - while (*++content && isspace(*content)); + auto cxml = exml->FirstChildElement("content"); + const char *content; + if (cxml == nullptr) { + content = randomDialog[d.rindex % randomDialog.size()].c_str(); + } else { + content = cxml->GetText() - 1; + while (*++content && isspace(*content)); + } ui::dialogBox(name.name, "", false, content); ui::waitForDialog(); diff --git a/src/engine.cpp b/src/engine.cpp index 152e3a4..2aa19b0 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -49,7 +49,7 @@ void Engine::update(entityx::TimeDelta dt) { systems.update<InputSystem>(dt); systems.update<MovementSystem>(dt); - //systems.update<DialogSystem>(dt); + systems.update<DialogSystem>(dt); systems.update<WorldSystem>(dt); systems.update<PlayerSystem>(dt); } @@ -575,9 +575,11 @@ namespace ui { } void waitForCover(void) { - fadeIntensity = 0; - while (fadeIntensity < 255); - fadeIntensity = 255; + auto& fi = fadeIntensity; + fi = 0; + while (fi < 255) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + fi = 255; } void waitForUncover(void) { @@ -905,6 +907,7 @@ namespace ui { drawNiceBox(vec2 {x, y}, vec2 {x + SCREEN_WIDTH - HLINES(16), y - SCREEN_HEIGHT / 4}, -7.0); + setFontZ(-7.2f); rtext = typeOut(dialogBoxText); putString(x + HLINES(2), y - fontSize - game::HLINE, rtext); diff --git a/src/world.cpp b/src/world.cpp index 143e105..a0c5641 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -105,9 +105,6 @@ static const float bgDraw[4][3]={ { 255, 255, 0.1 } }; -std::string currentXMLRaw; -XMLDocument currentXMLDoc; - /* ---------------------------------------------------------------------------- ** Functions section ** --------------------------------------------------------------------------*/ @@ -221,11 +218,8 @@ void WorldSystem::load(const std::string& file) world.toLeft = world.toRight = ""; currentXMLFile = file; - std::cout << "ka" << std::endl; game::entities.reset(); - std::cout << "CHOW!!!" << std::endl; game::engine.getSystem<PlayerSystem>()->create(); - std::cout << "chow cow" << std::endl; // iterate through tags while (wxml) { @@ -294,8 +288,6 @@ void WorldSystem::load(const std::string& file) else { auto cxml = xmlDoc.FirstChildElement(tagName.c_str()); if (cxml != nullptr) { - DEBUG_printf("Using custom tag <%s>\n", tagName.c_str()); - entity = game::entities.create(); auto abcd = cxml->FirstChildElement(); @@ -329,7 +321,7 @@ void WorldSystem::load(const std::string& file) if (abcd->Attribute("value") != nullptr) { dim = str2coord(abcd->StrAttribute("value")); } else { - dim = entity.component<Sprite>().get()->getSpriteSize(); + dim = entity.component<Sprite>().get()->getSpriteSize() * game::HLINE; } float cdat[2] = {dim.x, dim.y}; @@ -362,7 +354,7 @@ void WorldSystem::load(const std::string& file) } else if (tname == "Name") { entity.assign<Name>(coalesce(wxml->Attribute("name"), abcd->Attribute("value"))); } else if (tname == "Dialog") { - entity.assign<Dialog>(); + entity.assign<Dialog>((wxml->BoolAttribute("hasDialog") ? 0 : 9999)); } else if (tname == "Grounded") { entity.assign<Grounded>(); } @@ -1193,6 +1185,7 @@ void WorldSystem::detect(entityx::TimeDelta dt) void WorldSystem::goWorldRight(Position& p, Solid &d) { if (!(world.toRight.empty()) && (p.x + d.width > world.startX * -1 - HLINES(15))) { + BREAKPOINT; ui::toggleBlack(); ui::waitForCover(); auto file = world.toRight; @@ -1215,18 +1208,31 @@ void WorldSystem::goWorldLeft(Position& p) void WorldSystem::goWorldPortal(Position& p) { - game::entities.each<Position, Sprite, Portal>( - [&](entityx::Entity entity, Position& loc, Sprite &sprite, Portal &portal) { - (void)entity; - - auto& size = sprite.sprite.front().first.size; - if (!(portal.toFile.empty()) && p.x > loc.x && p.x < loc.x + size.x) { - ui::toggleBlack(); - ui::waitForCover(); - load(portal.toFile); - ui::toggleBlack(); - return; + std::string file; + + if (world.indoor) { + file = world.outdoor; + p.x = world.outdoorCoords.x; // ineffective, player is regen'd + p.y = world.outdoorCoords.y; + } else { + game::entities.each<Position, Solid, Portal>( + [&](entityx::Entity entity, Position& loc, Solid &dim, Portal &portal) { + (void)entity; + if (!(portal.toFile.empty()) && p.x > loc.x && p.x < loc.x + dim.width) { + file = portal.toFile; + world.outdoor = currentXMLFile; + world.outdoorCoords = vec2(loc.x + dim.width / 2, 100); + return; + } } - } - ); + ); + } + + if (!file.empty()) { + std::cout << file << std::endl; + ui::toggleBlack(); + ui::waitForCover(); + load(file); + ui::toggleBlack(); + } } |