aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components.cpp177
-rw-r--r--src/engine.cpp2
-rw-r--r--src/ui.cpp9
-rw-r--r--src/world.cpp52
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);
}
diff --git a/src/ui.cpp b/src/ui.cpp
index 922e5be..40339a0 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -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();
+ }
}