From 5432b278f8ed8c9aaeccf1ee7a4da540787f965d Mon Sep 17 00:00:00 2001 From: drumsetmonkey Date: Thu, 12 May 2016 08:03:57 -0400 Subject: [PATCH] RENDERING --- include/common.hpp | 1 + include/entities.hpp | 2 +- main.cpp | 15 +-- shaders/new.frag | 6 +- shaders/new.vert | 3 + src/common.cpp | 10 +- src/entities.cpp | 66 ++++++++----- src/inventory.cpp | 202 ++++++++++++++++++++------------------- src/ui.cpp | 8 ++ src/world.cpp | 66 ++++--------- ttf/atomics.TTF | Bin 0 -> 8300 bytes ttf/atomicsc.TTF | Bin 0 -> 12844 bytes ttf/yapix.ttf | Bin 0 -> 54352 bytes xml/playerSpawnHill1.xml | 6 +- 14 files changed, 203 insertions(+), 182 deletions(-) create mode 100644 ttf/atomics.TTF create mode 100644 ttf/atomicsc.TTF create mode 100644 ttf/yapix.ttf diff --git a/include/common.hpp b/include/common.hpp index eb8a290..24c5204 100644 --- a/include/common.hpp +++ b/include/common.hpp @@ -218,6 +218,7 @@ extern GLuint textShader; extern GLint textShader_attribute_coord; extern GLint textShader_attribute_tex; extern GLint textShader_uniform_texture; +extern GLint textShader_uniform_color; extern GLuint worldShader; extern GLint worldShader_attribute_coord; diff --git a/include/entities.hpp b/include/entities.hpp index 3e78687..5159d24 100644 --- a/include/entities.hpp +++ b/include/entities.hpp @@ -149,7 +149,7 @@ public: ~Particles(void){} // draws the particle - std::vector> draw(void) const; + void draw(std::vector &verts, std::vector &tex) const; // updates a particle void update(float _gravity, float ground_y); diff --git a/main.cpp b/main.cpp index 570f12f..aad70cd 100644 --- a/main.cpp +++ b/main.cpp @@ -64,6 +64,7 @@ GLint textShader_attribute_coord; GLint textShader_attribute_tex; GLint textShader_uniform_texture; GLint textShader_uniform_transform; +GLint textShader_uniform_color; /** * These are the source and index variables for the world @@ -218,7 +219,7 @@ int main(int argc, char *argv[]){ textShader_attribute_tex = get_attrib(textShader, "tex_coord"); textShader_uniform_texture = get_uniform(textShader, "sampler"); textShader_uniform_transform = get_uniform(textShader, "ortho"); - + textShader_uniform_color = get_uniform(textShader, "tex_color"); /** * Creating the world's shader and its attributes/uniforms @@ -305,7 +306,7 @@ int main(int argc, char *argv[]){ // close up the game stuff currentWorld->save(); delete arena; - delete currentWorld; + //delete currentWorld; return 0; // Calls everything passed to atexit } @@ -379,18 +380,20 @@ void render() { 10.0f, //near -10.0f); //far - glm::mat4 view = glm::lookAt(glm::vec3(0,0,10.0f), //pos - glm::vec3(0,0,0.0f), //looking at + glm::mat4 view = glm::lookAt(glm::vec3(0,0,0.0f), //pos + glm::vec3(0,0,-10.0f), //looking at glm::vec3(0,1.0f,0)); //up vector glm::mat4 ortho = projection * view; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - //glEnable(GL_DEPTH_TEST); + // TODO add depth + //glEnable(GL_DEPTH_TEST); glUseProgram(textShader); glUniformMatrix4fv(textShader_uniform_transform, 1, GL_FALSE, glm::value_ptr(ortho)); - glUseProgram(worldShader); + glUniform4f(textShader_uniform_color, 1.0, 1.0, 1.0, 1.0); + glUseProgram(worldShader); glUniformMatrix4fv(worldShader_uniform_transform, 1, GL_FALSE, glm::value_ptr(ortho)); /************************** diff --git a/shaders/new.frag b/shaders/new.frag index 8812d72..fa8a260 100644 --- a/shaders/new.frag +++ b/shaders/new.frag @@ -1,9 +1,9 @@ uniform sampler2D sampler; varying vec2 texCoord; -varying float join; +varying vec4 color; void main(){ - vec4 color = texture2D(sampler, vec2(texCoord.x, texCoord.y)); - gl_FragColor = color; + vec4 pixelColor = texture2D(sampler, vec2(texCoord.x, texCoord.y)); + gl_FragColor = pixelColor * color; } diff --git a/shaders/new.vert b/shaders/new.vert index 1bedfd3..b2fcba4 100644 --- a/shaders/new.vert +++ b/shaders/new.vert @@ -2,10 +2,13 @@ attribute vec3 coord2d; attribute vec2 tex_coord; uniform mat4 ortho; +uniform vec4 tex_color; varying vec2 texCoord; +varying vec4 color; void main(){ texCoord = tex_coord; + color = tex_color; gl_Position = ortho * vec4(coord2d.xyz, 1.0); } diff --git a/src/common.cpp b/src/common.cpp index 05a5f35..916070c 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -57,13 +57,13 @@ void drawRect(vec2 ll, vec2 ur) ll.x, ur.y, 1.0, ll.x, ll.y, 1.0}; - GLfloat tex[] = {0.0, 0.0, - 1.0, 0.0, + GLfloat tex[] = {0.0, 1.0, 1.0, 1.0, + 1.0, 0.0, - 1.0, 1.0, - 0.0, 1.0, - 0.0, 0.0}; + 1.0, 0.0, + 0.0, 0.0, + 0.0, 1.0}; glUniform1i(*tex_uni, 0); diff --git a/src/entities.cpp b/src/entities.cpp index a8f5e48..efe9d13 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -88,7 +88,7 @@ void Entity::spawn(float x, float y) //canMove = true; ground = false; forcedMove = false; - z = 1.0f; + z = -1.0f; ticksToUse = 0; hitCooldown = 0; @@ -425,23 +425,23 @@ if (health != maxHealth) { glUniform1i(worldShader_uniform_texture, 0); GLfloat coord_back[] = { - loc.x, loc.y + height, 1.0, - loc.x + width, loc.y + height, 1.0, - loc.x + width, loc.y + height + game::HLINE * 2, 1.0, + loc.x, loc.y + height, z, + loc.x + width, loc.y + height, z, + loc.x + width, loc.y + height + game::HLINE * 2,z, - loc.x + width, loc.y + height + game::HLINE * 2, 1.0, - loc.x, loc.y + height + game::HLINE * 2, 1.0, - loc.x, loc.y + height, 1.0, + loc.x + width, loc.y + height + game::HLINE * 2,z, + loc.x, loc.y + height + game::HLINE * 2,z, + loc.x, loc.y + height, z, }; GLfloat coord_front[] = { - loc.x, loc.y + height, 1.0, - loc.x + health / maxHealth * width, loc.y + height, 1.0, - loc.x + health / maxHealth * width, loc.y + height + game::HLINE * 2, 1.0, + 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, 1.0, - loc.x, loc.y + height + game::HLINE * 2, 1.0, - loc.x, loc.y + height, 1.0, + 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, }; static const vec2 index1 = Texture::getIndex(Color(0,0,0)); @@ -860,21 +860,43 @@ Particles::Particles(float x, float y, float w, float h, float vx, float vy, Col index = Texture::getIndex(c); } -std::vector> Particles::draw(void) const +void Particles::draw(std::vector &verts, std::vector &tex) const { vec2 tc = vec2 {0.25f * index.x, 0.125f * (8-index.y)}; - std::vector> tmp; + float z = 0.0; + if (behind) + z = 2.0; + + verts.push_back(loc.x); + verts.push_back(loc.y); + verts.push_back(z); + + verts.push_back(loc.x + width); + verts.push_back(loc.y); + verts.push_back(z); + + verts.push_back(loc.x + width); + verts.push_back(loc.y + height); + verts.push_back(z); + + + verts.push_back(loc.x + width); + verts.push_back(loc.y + height); + verts.push_back(z); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x, loc.y, 1.0))); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x + width, loc.y, 1.0))); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x + width, loc.y + height, 1.0))); + verts.push_back(loc.x); + verts.push_back(loc.y + height); + verts.push_back(z); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x + width, loc.y + height, 1.0))); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x, loc.y + height, 1.0))); - tmp.push_back(std::make_pair(vec2(tc.x, tc.y), vec3(loc.x, loc.y, 1.0))); + verts.push_back(loc.x); + verts.push_back(loc.y); + verts.push_back(z); - return tmp; + for (int i = 0; i < 6; i++){ + tex.push_back(tc.x); + tex.push_back(tc.y); + } } void Particles::update(float _gravity, float ground_y) diff --git a/src/inventory.cpp b/src/inventory.cpp index 7f58d30..e6c5029 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -346,7 +346,7 @@ void Inventory::draw(void) { if (invOpening) { for (auto &d : dfp) { if (!a || dfp[a - 1] > 50) - d += 1.65f * deltaTime; + d += 4.0f * deltaTime; if (d > range) d = range; a++; @@ -354,7 +354,7 @@ void Inventory::draw(void) { for (auto &cd : curdfp) { if (!a || curdfp[a - 1] > 90) - cd += 1.5f * deltaTime; + cd += 3.0f * deltaTime; if (cd > curRange) cd = curRange; a++; @@ -362,7 +362,7 @@ void Inventory::draw(void) { while (a < massOrder.size()) { if (!a || massDfp[massOrder[a - 1]] > massRange * 0.75f) - massDfp[massOrder[a]] += 5.0f * deltaTime; + massDfp[massOrder[a]] += 20.0f * deltaTime; if (massDfp[massOrder[a]] > massRange) massDfp[massOrder[a]] = massRange; a++; @@ -373,16 +373,16 @@ void Inventory::draw(void) { } else { for (auto &d : dfp) { if (d > 0) - d -= 1.65f * deltaTime; + d -= 4.5f * deltaTime; } for (auto &cd : curdfp) { if (cd > 0) - cd -= 1.0f * deltaTime; + cd -= 3.0f * deltaTime; } while (a < massRay.size()) { if (!a || massDfp[massOrderClosing[a - 1]] <= 0) - massDfp[massOrderClosing[a]] -= 10.0f * deltaTime; + massDfp[massOrderClosing[a]] -= 30.0f * deltaTime; else if (massDfp[massOrderClosing[a - 1]] < 0) massDfp[massOrderClosing[a - 1]] = 0; a++; @@ -420,26 +420,20 @@ void Inventory::draw(void) { glUseProgram(0); if (!Items.empty() && a+numSlot < Items.size() && Items[a+numSlot].second) { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, Items[a+numSlot].first->tex->image[0]);//itemtex[items[a+numSlot].id]); - glColor4f(1.0f, 1.0f, 1.0f, ((float)massDfp[a]/(float)(massRange?massRange:1))*0.8f); - glBegin(GL_QUADS); - if (Items[a+numSlot].first->dim.y > Items[a+numSlot].first->dim.x) { - glTexCoord2i(0,1);glVertex2i(mr.x-((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y-(itemWide/2)); - glTexCoord2i(1,1);glVertex2i(mr.x+((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y-(itemWide/2)); - glTexCoord2i(1,0);glVertex2i(mr.x+((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y+(itemWide/2)); - glTexCoord2i(0,0);glVertex2i(mr.x-((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y+(itemWide/2)); - }else{ - glTexCoord2i(0,1);glVertex2i(mr.x-(itemWide/2),mr.y-(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x)); - glTexCoord2i(1,1);glVertex2i(mr.x+(itemWide/2),mr.y-(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x)); - glTexCoord2i(1,0);glVertex2i(mr.x+(itemWide/2),mr.y+(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x)); - glTexCoord2i(0,0);glVertex2i(mr.x-(itemWide/2),mr.y+(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x)); - } - glEnd(); - glDisable(GL_TEXTURE_2D); + glUseProgram(textShader); + glBindTexture(GL_TEXTURE_2D, Items[a+numSlot].first->tex->image[0]);//itemtex[items[a+numSlot].id]); + glUniform4f(textShader_uniform_color, 1.0f, 1.0f, 1.0f, ((float)massDfp[a]/(float)(massRange?massRange:1))*0.8f); + if (Items[a+numSlot].first->dim.y > Items[a+numSlot].first->dim.x) { + drawRect(vec2(mr.x-((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y-(itemWide/2)), + vec2(mr.x+((itemWide/2)*((float)Items[a+numSlot].first->dim.x/(float)Items[a+numSlot].first->dim.y)), mr.y+(itemWide/2))); + }else{ + drawRect(vec2(mr.x-(itemWide/2),mr.y-(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x)), + vec2(mr.x-(itemWide/2),mr.y+(itemWide/2)*((float)Items[a+numSlot].first->dim.y/(float)Items[a+numSlot].first->dim.x))); + } ui::setFontColor(255,255,255,((float)massDfp[a]/(float)(massRange?massRange:1))*255); ui::putText(mr.x-(itemWide/2)+(itemWide*.85),mr.y-(itemWide/2),"%d",Items[a+numSlot].second); ui::setFontColor(255,255,255,255); + glUseProgram(0); } a++; }a=0; @@ -448,14 +442,14 @@ void Inventory::draw(void) { curCurCoord[a].x -= float((curdfp[a]) * cos(-1)); curCurCoord[a].y += float((curdfp[a]) * sin(0)); cr.end = curCurCoord[a]; + + float curTrans = (((float)curdfp[a]/(float)(curRange?curRange:1))*0.5f); - glColor4f(0.0f, 0.0f, 0.0f, ((float)curdfp[a]/(float)(curRange?curRange:1))*0.5f); - glBegin(GL_QUADS); - glVertex2i(cr.end.x-(itemWide/2), cr.end.y-(itemWide/2)); - glVertex2i(cr.end.x-(itemWide/2)+itemWide,cr.end.y-(itemWide/2)); - glVertex2i(cr.end.x-(itemWide/2)+itemWide,cr.end.y-(itemWide/2)+itemWide); - glVertex2i(cr.end.x-(itemWide/2), cr.end.y-(itemWide/2)+itemWide); - glEnd(); + glUseProgram(textShader); + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0.0f, 0.0f, 0.0f, curTrans >= 0 ? 255 * curTrans : 0))); + drawRect(vec2(cr.end.x-(itemWide/2), cr.end.y-(itemWide/2)), + vec2(cr.end.x-(itemWide/2)+itemWide,cr.end.y-(itemWide/2)+itemWide)); + glUseProgram(0); a++; }a=0; @@ -465,42 +459,33 @@ void Inventory::draw(void) { curCoord[a].y += float((dfp[a]) * sin(angle*PI/180)); r.end = curCoord[a]; - glColor4f(0.0f, 0.0f, 0.0f, ((float)dfp[a]/(float)(range?range:1))*0.5f); - glBegin(GL_QUADS); - glVertex2i(r.end.x-(itemWide/2), r.end.y-(itemWide/2)); - glVertex2i(r.end.x-(itemWide/2)+itemWide,r.end.y-(itemWide/2)); - glVertex2i(r.end.x-(itemWide/2)+itemWide,r.end.y-(itemWide/2)+itemWide); - glVertex2i(r.end.x-(itemWide/2), r.end.y-(itemWide/2)+itemWide); - glEnd(); + float t = ((float)dfp[a]/(float)(range?range:1))*0.5f; + + glUseProgram(textShader); + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0.0f, 0.0f, 0.0f, t >= 0 ? 255 * t : 0))); + drawRect(vec2(r.end.x-(itemWide/2), r.end.y-(itemWide/2)), + vec2(r.end.x-(itemWide/2)+itemWide,r.end.y-(itemWide/2)+itemWide)); if (!Items.empty() && a < numSlot && Items[a].second) { - glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Items[a].first->tex->image[0]);//itemtex[items[a].id]); - glColor4f(1.0f, 1.0f, 1.0f, ((float)dfp[a]/(float)(range?range:1))*0.8f); - glBegin(GL_QUADS); + glUniform4f(textShader_uniform_color, 1.0f, 1.0f, 1.0f, ((float)dfp[a]/(float)(range?range:1))*0.8f); if (Items[a].first->dim.y > Items[a].first->dim.x) { - glTexCoord2i(0,1);glVertex2i(r.end.x-((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y-(itemWide/2)); - glTexCoord2i(1,1);glVertex2i(r.end.x+((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y-(itemWide/2)); - glTexCoord2i(1,0);glVertex2i(r.end.x+((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y+(itemWide/2)); - glTexCoord2i(0,0);glVertex2i(r.end.x-((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y+(itemWide/2)); - }else{ - glTexCoord2i(0,1);glVertex2i(r.end.x-(itemWide/2),r.end.y-(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x)); - glTexCoord2i(1,1);glVertex2i(r.end.x+(itemWide/2),r.end.y-(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x)); - glTexCoord2i(1,0);glVertex2i(r.end.x+(itemWide/2),r.end.y+(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x)); - glTexCoord2i(0,0);glVertex2i(r.end.x-(itemWide/2),r.end.y+(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x)); + drawRect(vec2(r.end.x-((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y-(itemWide/2)), + vec2(r.end.x+((itemWide/2)*((float)Items[a].first->dim.x/(float)Items[a].first->dim.y)), r.end.y+(itemWide/2))); + }else{ + drawRect(vec2(r.end.x-(itemWide/2),r.end.y-(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x)), + vec2(r.end.x+(itemWide/2),r.end.y+(itemWide/2)*((float)Items[a].first->dim.y/(float)Items[a].first->dim.x))); } - glEnd(); - glDisable(GL_TEXTURE_2D); ui::setFontColor(255,255,255,((float)dfp[a]/(float)(range?range:1))*255); ui::putStringCentered(r.end.x,r.end.y-(itemWide*.9),Items[a].first->name);//itemMap[items[a].id]->name); ui::putText(r.end.x-(itemWide/2)+(itemWide*.85),r.end.y-(itemWide/2),"%d",Items[a].second); ui::setFontColor(255,255,255,255); } - + glUseProgram(0); if (sel == a) { static float sc = 1; static bool up; - up ? sc += .0005*deltaTime : sc -= .0005*deltaTime; + up ? sc += .0025*deltaTime : sc -= .0025*deltaTime; if (sc > 1.2) { up = false; sc = 1.2; @@ -509,28 +494,36 @@ void Inventory::draw(void) { up = true; sc = 1.0; } - glBegin(GL_QUADS); - glColor4f(1.0f, 1.0f, 1.0f, ((float)dfp[a]/(float)(range?range:1))); - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2); - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2); - - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2); - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2); - - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x - (itemWide*sc)/2 ,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x - (itemWide*sc)/2 ,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - glVertex2f(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - - glVertex2f(r.end.x + (itemWide*sc)/2 ,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - glVertex2f(r.end.x + (itemWide*sc)/2 ,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09); - glEnd(); + float t = ((float)dfp[a]/(float)(range?range:1)); + useShader(&textShader, + &textShader_uniform_texture, + &textShader_attribute_coord, + &textShader_attribute_tex); + + glUseProgram(textShader); + glUniform4f(textShader_uniform_color, 1.0, 1.0, 1.0, 1.0); + + // bottom + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(255, 255, 255, t >= 0 ? 255 * t : 0))); + drawRect(vec2(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09), + vec2(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2)); + + // top + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(255, 255, 255, t >= 0 ? 255 * t : 0))); + drawRect(vec2(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09), + vec2(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2)); + + // left + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(255, 255, 255, t >= 0 ? 255 * t : 0))); + drawRect(vec2(r.end.x - (itemWide*sc)/2 - (itemWide*sc)*.09,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09), + vec2(r.end.x - (itemWide*sc)/2 ,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09)); + + // right + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(255, 255, 255, t >= 0 ? 255 * t : 0))); + drawRect(vec2(r.end.x + (itemWide*sc)/2 ,r.end.y - (itemWide*sc)/2 - (itemWide*sc)*.09), + vec2(r.end.x + (itemWide*sc)/2 + (itemWide*sc)*.09,r.end.y + (itemWide*sc)/2 + (itemWide*sc)*.09)); + + //glUseProgram(0); } a++; } @@ -627,10 +620,7 @@ void itemDraw(Player *p, Item *d) { itemLoc.y = p->loc.y+(p->height/3); itemLoc.x = p->left?p->loc.x-d->dim.x/2:p->loc.x+p->width-d->dim.x/2; - glPushMatrix(); - glUseProgram(shaderProgram); - glUniform1i(glGetUniformLocation(shaderProgram, "sampler"), 0); if (p->left) { glTranslatef(itemLoc.x+d->dim.x/2,itemLoc.y,0); glRotatef(d->rotation, 0.0f, 0.0f, 1.0f); @@ -640,26 +630,44 @@ void itemDraw(Player *p, Item *d) { glRotatef(d->rotation, 0.0f, 0.0f, 1.0f); glTranslatef(-itemLoc.x-d->dim.x/2,-itemLoc.y,0); } - glEnable(GL_TEXTURE_2D); + + GLfloat itemTex[12] = {0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + + 1.0, 1.0, + 0.0, 1.0, + 0.0, 0.0}; + if (!p->left) { + itemTex[0] = 1.0; + itemTex[2] = 0.0; + itemTex[4] = 0.0; + itemTex[6] = 0.0; + itemTex[8] = 1.0; + itemTex[10] = 1.0; + } + + GLfloat itemCoords[] = {itemLoc.x, itemLoc.y, 1.0, + itemLoc.x+d->dim.x, itemLoc.y, 1.0, + itemLoc.x+d->dim.x, itemLoc.y+d->dim.y, 1.0, + + itemLoc.x+d->dim.x, itemLoc.y+d->dim.y, 1.0, + itemLoc.x, itemLoc.y+d->dim.y, 1.0, + itemLoc.x, itemLoc.y, 1.0}; + glUseProgram(worldShader); glBindTexture(GL_TEXTURE_2D,d->tex->image[0]); - glColor4ub(255,255,255,255); - glBegin(GL_QUADS); - if (p->left) { - glTexCoord2i(0,1);glVertex2f(itemLoc.x, itemLoc.y); - glTexCoord2i(1,1);glVertex2f(itemLoc.x+d->dim.x,itemLoc.y); - glTexCoord2i(1,0);glVertex2f(itemLoc.x+d->dim.x,itemLoc.y+d->dim.y); - glTexCoord2i(0,0);glVertex2f(itemLoc.x, itemLoc.y+d->dim.y); - } else { - glTexCoord2i(1,1);glVertex2f(itemLoc.x, itemLoc.y); - glTexCoord2i(0,1);glVertex2f(itemLoc.x+d->dim.x,itemLoc.y); - glTexCoord2i(0,0);glVertex2f(itemLoc.x+d->dim.x,itemLoc.y+d->dim.y); - glTexCoord2i(1,0);glVertex2f(itemLoc.x, itemLoc.y+d->dim.y); - } - glEnd(); - glDisable(GL_TEXTURE_2D); - glTranslatef(player->loc.x*2,0,0); - glPopMatrix(); - glUseProgram(0); + + glEnableVertexAttribArray(worldShader_attribute_coord); + glEnableVertexAttribArray(worldShader_attribute_tex); + + glVertexAttribPointer(worldShader_attribute_coord, 3, GL_FLOAT, GL_FALSE, 0, itemCoords); + glVertexAttribPointer(worldShader_attribute_tex, 2, GL_FLOAT, GL_FALSE, 0, itemTex); + glDrawArrays(GL_TRIANGLES, 0, 6); + + glDisableVertexAttribArray(worldShader_attribute_coord); + glDisableVertexAttribArray(worldShader_attribute_tex); + + glUseProgram(0); } /* diff --git a/src/ui.cpp b/src/ui.cpp index 0b58f0d..dc6da8e 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -324,11 +324,19 @@ namespace ui { c1.x, c1.y+c2.y-c2.y, 1.0, //top left c1.x, c1.y -c2.y, 1.0, //bottom left }; + + glUniform4f(textShader_uniform_color, + static_cast(fontColor[0]/255), + static_cast(fontColor[1]/255), + static_cast(fontColor[2]/255), + static_cast(fontColor[3]/255)); glVertexAttribPointer(textShader_attribute_coord, 3, GL_FLOAT, GL_FALSE, 0, text_vert); glVertexAttribPointer(textShader_attribute_tex, 2, GL_FLOAT, GL_FALSE, 0, tex_coord); glDrawArrays(GL_TRIANGLES, 0, 6); + glUniform4f(textShader_uniform_color, 1.0, 1.0, 1.0, 1.0); + glDisableVertexAttribArray(textShader_attribute_tex); glDisableVertexAttribArray(textShader_attribute_coord); diff --git a/src/world.cpp b/src/world.cpp index 362cc8b..fb40864 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -294,13 +294,13 @@ draw(Player *p) glEnd();*/ bgTex(0); - GLfloat back_tex_coord[] = {offset.x - backgroundOffset.x - 5, offset.y + backgroundOffset.y, 1.0f, - offset.x + backgroundOffset.x + 5, offset.y + backgroundOffset.y, 1.0f, - offset.x + backgroundOffset.x + 5, offset.y - backgroundOffset.y, 1.0f, + GLfloat back_tex_coord[] = {offset.x - backgroundOffset.x - 5, offset.y + backgroundOffset.y, 10.0f, + offset.x + backgroundOffset.x + 5, offset.y + backgroundOffset.y, 10.0f, + offset.x + backgroundOffset.x + 5, offset.y - backgroundOffset.y, 10.0f, - offset.x + backgroundOffset.x + 5, offset.y - backgroundOffset.y, 1.0f, - offset.x - backgroundOffset.x - 5, offset.y - backgroundOffset.y, 1.0f, - offset.x - backgroundOffset.x - 5, offset.y + backgroundOffset.y, 1.0f}; + offset.x + backgroundOffset.x + 5, offset.y - backgroundOffset.y, 10.0f, + offset.x - backgroundOffset.x - 5, offset.y - backgroundOffset.y, 10.0f, + offset.x - backgroundOffset.x - 5, offset.y + backgroundOffset.y, 10.0f}; glUseProgram(worldShader); @@ -350,13 +350,13 @@ draw(Player *p) //safeSetColorA(150 + shadeBackground * 2, 150 + shadeBackground * 2, 150 + shadeBackground * 2, 255); auto xcoord = width / 2 * -1 + offset.x * 0.85f; for (unsigned int i = 0; i <= worldData.size() * HLINE / 1920; i++) { - bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM, 1.0f)); - bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM, 1.0f)); - bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 1.0f)); + bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM, 8.0f)); + bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM, 8.0f)); + bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 8.0f)); - bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 1.0f)); - bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 1.0f)); - bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM, 1.0f)); + bg_items.push_back(vec3(1920 * (i + 1) + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 8.0f)); + bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM + 1080, 8.0f)); + bg_items.push_back(vec3(1920 * i + xcoord, GROUND_HEIGHT_MINIMUM, 8.0f)); } std::vector bg_i; @@ -401,13 +401,13 @@ draw(Player *p) );*/ auto xcoord = offset.x * bgDraw[i][2]; for (int j = worldStart; j <= -worldStart; j += 600) { - c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM, 1)); - c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM, 1)); - c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM + 400, 1)); + c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM, 7-(i*.1))); + c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM, 7-(i*.1))); + c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM + 400, 7-(i*.1))); - c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM + 400, 1)); - c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM + 400, 1)); - c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM, 1)); + c.push_back(vec3(j + 600 + xcoord, GROUND_HEIGHT_MINIMUM + 400, 7-(i*.1))); + c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM + 400, 7-(i*.1))); + c.push_back(vec3(j + xcoord, GROUND_HEIGHT_MINIMUM, 7-(i*.1))); } bg_i.clear(); @@ -455,24 +455,12 @@ draw(Player *p) glEnableVertexAttribArray(worldShader_attribute_coord); glEnableVertexAttribArray(worldShader_attribute_tex); - std::vector>> partv(0); std::vector partc(0); std::vector partt(0); for (auto &p : particles) { if (p.behind) - partv.push_back(p.draw()); - } - - for (auto &pv : partv) { - for (auto &v : pv){ - partc.push_back(v.second.x); - partc.push_back(v.second.y); - partc.push_back(v.second.z); - - partt.push_back(v.first.x); - partt.push_back(v.first.y); - } + p.draw(partc, partt); } glVertexAttribPointer(worldShader_attribute_coord, 3, GL_FLOAT, GL_FALSE, 0, &partc[0]); @@ -714,24 +702,12 @@ draw(Player *p) glEnableVertexAttribArray(worldShader_attribute_coord); glEnableVertexAttribArray(worldShader_attribute_tex); - partv.clear(); partc.clear(); partt.clear(); for (auto &p : particles) { if (!p.behind) - partv.push_back(p.draw()); - } - - for (auto &pv : partv) { - for (auto &v : pv){ - partc.push_back(v.second.x); - partc.push_back(v.second.y); - partc.push_back(v.second.z); - - partt.push_back(v.first.x); - partt.push_back(v.first.y); - } + p.draw(partc, partt); } glVertexAttribPointer(worldShader_attribute_coord, 3, GL_FLOAT, GL_FALSE, 0, &partc[0]); @@ -1750,7 +1726,7 @@ draw(Player *p) glUniform1i(glGetUniformLocation(shaderProgram, "sampler"), 0); glUseProgram(shaderProgram); - std::for_each(particles.begin(), particles.end(), [](Particles &part) { part.draw(); }); + //std::for_each(particles.begin(), particles.end(), [](Particles &part) { part.draw(); }); glUseProgram(0); diff --git a/ttf/atomics.TTF b/ttf/atomics.TTF new file mode 100644 index 0000000000000000000000000000000000000000..44c27538ae65fc773f8a79d868fe4cb514c81775 GIT binary patch literal 8300 zcma)BZE#f88Gg^b`x!nr$r3=3T|+=jNPuNYM1=SO2%;h=3HU{bOA;g>h7izx47JwI zw95E{Y}DxwN2d-t{y@iZ)TtIDb?P6dqhZ?V_@hpp)^;j7j-9biv)ku+&$*ioM5lLi z_nv$1Iq%2wKJRUTxrqz4SocKt@w4?Wy&fboJ&tEw6jflSnecL*R zhf?jQ|I;KA`VF2hJuuMK`_s(Wt++pq`|7Sk4<7i@ult`93BM$g{JJ~Wao^WhTyqni zeT;K$H#(v-LMh0q#{H7+-l1bR_ecxwPvLy*P=9Af^=}v61$m$1`R{u>jt$6X@)n+9 zjHLQHdUI9%?~I6C@(gVHbfEw6Q2g5Xmm-TF!Sl}s26F=yk5}V)=p^p15c(!9J1^UD zyz<^T>;Ih+pX21!p-122^{qu$-(4&g#{Eb9M{(qQGq*w9U-Ss>yTv&FVE$WY;#gT($1% z_1A3J*m~`Ca>J(0TW;LC?WXNF-*W4Y+jj1{{f^yj?R)m#dDq?d+`F%1s=n{LBU7h4 zuAi>+|Lfb&VIf(G?-)KFu0NJ%Qge|(A}QM{{uIzYj zcI){MkFQ&H$Fo02KxRP+)VR-1IUrBSoARYuYSx(T=05X;dC|NE2_KlRy=rf%ccXX6 zJK??L{lWXnzue#KxBCbE6aKUQS^v{eEVMMVEi@2%Ec8<7Z0KL%NVqcG7~UH`7(Nkx zCH!Idd}Lu{Lu6lMC~_k5YUJbSyy&{@58KlTW^dmF1nsxJzWQNHgSQd1jJ& zCTo)!oV8h;Rd}L0zUK?lkzO=UWfGrDL=q5YAgPYB)7iAj%p}vvG$eZM`FvrVhE1G; zQg1(X_$O&YIQR`<(LXxt87Q_2=vNjFrRXC}I*D%iIhJL8WW=tg&HrNZadF`rm zjBwz@4O=*%M%MuU5r^FjnIlzFWAULUbRY~s!mbT>vdus#3V$F4(2nJyNn3B{L;3vE zg$;-V+`RCBE@s!5i={>qV-PqjHN?>rdrSjXMdCOEzETUKScC9j+z9{tNAuo9^;0w) zxEH%I{^8Pi1g-|-qnH=y_8-pYpPHCwFg{Err8v<~7b~Jk1QDKOIFmrs68I!D8W%=UMjuzGC{Og>x%Q2s9{zWxXti`;|OAHf{5|Z zIF@Jtf!YBXletgE&Vk>|7t9Sj!X&Du5Nip+;xQEqn{|pe*#p(e#sG7RF~kI^1^pVj zsd9o^A%^xR8F$~Em^)FaNT_z)!Z+&{zRT*3&Ap%oXf1<5Q!9YO7jb2f$SKz<(L$93 zUl+xl(!mf^$ZUF%N3d&?27$u_3Zj{TqbkD!UWyslUd?%ANG9pq>cCJD6^$!%D;Ps2 zA}53Of+jZDyeX|04t-YqQogVj;IuwaFck1lZBtEnq#Pne+XH)mx@Ikcjw}vLnqD8P z>mme+F$(lreRiJXD;a~+xcyl9S+E!nm1rPrC{ymROKz_JCw9i6vlOp1MU~uz^nttRoU7_ zkP>_n>Nkb(bXlY7X@adI)7Ai5!kE<|+N^)9D6~fN#+7cpqa2q$7x=>p4p)qpaMn9z z^u#F?4|PjjXJhvRm2T-#vH?BR z&cZ)S^_e?@QUtNrK^7%ZF2XoDTVquiJLO<}w{Q)7fo{ZN&nUb&2S_d@D5svgq> z-@uGTmc1#&NCr#e778=1M>-$m}RXbrzD05>jpvPT(~Z}yyDuM zMrN@%5CYSIeI(8Cgo@?FOiTzuV6I*R~^vk6Ipy^Uo9{XkG5hu&GNkYn^~+B|o=Qmh

8SFoSK6gH>Bao+J8T%kNVc@j(@eM_* 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 OkICcmgggn6z5TynB-!r( literal 0 HcmV?d00001 diff --git a/ttf/yapix.ttf b/ttf/yapix.ttf new file mode 100644 index 0000000000000000000000000000000000000000..692718aa5b9d682f7a522ea1fb2ecb0af6bce57f GIT binary patch literal 54352 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 literal 0 HcmV?d00001 diff --git a/xml/playerSpawnHill1.xml b/xml/playerSpawnHill1.xml index d848847..3a831ce 100644 --- a/xml/playerSpawnHill1.xml +++ b/xml/playerSpawnHill1.xml @@ -7,7 +7,7 @@ - + @@ -71,13 +71,13 @@ And it wasn't stormy. - Broooooooooooooo... + Broooooooooooooo...

- Here have this sword! + Hey friend! It's dangerous out there, here take these! -- 2.39.5