Advertisement
Guest User

PawnHead

a guest
Feb 9th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.31 KB | None | 0 0
  1. #pragma once
  2. #include "Model.h"
  3. #define _USE_MATH_DEFINES
  4. #include <math.h>
  5. double wurzel2 = 1.414213562f;
  6. double aspectLength = 1 / 17.0;
  7. double aspectWidth = 1 / 25.0;
  8. class PawnManager {
  9.  
  10.     Model* model_;
  11.     class Shader* shader_;
  12.     GLchar* path_;
  13.     bool spielbrettfelder_[17][13];
  14.     void defineSpielbrett() {
  15.  
  16.         for (int i = 0; i < 17; i++)
  17.         {
  18.             for (int j = 0; j < 13; j++) {
  19.                 spielbrettfelder_[i][j] = true;
  20.             }
  21.         }
  22.  
  23.         for (int i = 0; i < 17; i++) {
  24.             switch (i) {
  25.             case 16:
  26.             case 0:
  27.                 spielbrettfelder_[i][5] = false;
  28.             case 1:
  29.             case 15:
  30.                 spielbrettfelder_[i][7] = false;
  31.             case 2:
  32.             case 14:
  33.                 spielbrettfelder_[i][4] = false;
  34.             case 3:
  35.             case 13:
  36.                 for (int j = 0; j <= 3; j++) spielbrettfelder_[i][j] = false;
  37.                 for (int j = 8; j <= 12; j++) spielbrettfelder_[i][j] = false;
  38.                 break;
  39.             case 8:
  40.                 spielbrettfelder_[i][1] = false;
  41.             case 7:
  42.             case 9:
  43.                 spielbrettfelder_[i][11] = false;
  44.             case 6:
  45.             case 10: spielbrettfelder_[i][0] = false;
  46.             case 5:
  47.             case 11: spielbrettfelder_[i][12] = false; break;
  48.  
  49.             case 4:
  50.             case 12: break;
  51.             }
  52.         }
  53.     }
  54.  
  55.     double spaceVertical, spaceHorziontal, spaceField;
  56.     glm::vec2 fieldCenter;
  57.     glm::vec2 translationmatrix[17][13];
  58.  
  59.  
  60. public:
  61.     enum topology {
  62.         top,
  63.         topleft,
  64.         bottomleft,
  65.         bottom,
  66.         bottomright,
  67.         topright
  68.     };
  69.  
  70.     enum Color {
  71.         RED,
  72.         BLUE,
  73.         YELLOW,
  74.         GREEN,
  75.         WHITE
  76.     };
  77.  
  78.     enum DIRECTION {
  79.         EAST,
  80.         SEAST,
  81.         SWEST,
  82.         WEST,
  83.         NWEST,
  84.         NEAST
  85.     };
  86.  
  87.     struct Pawn {
  88.         glm::vec3 position;
  89.         glm::vec3 color;
  90.         GLfloat boden;
  91.     };
  92.  
  93.     std::vector <Pawn*> pawns_;
  94.  
  95.     struct team {
  96.         glm::vec3 color;
  97.         topology pos;
  98.         glm::vec2 positionsOnBoard[15];
  99.     };
  100.  
  101.     std::vector<team*> teams_;
  102.  
  103.     PawnManager(GLchar* path, GLchar* vertexPath, GLchar* fragmentPath, double boardlength, double boardwidth) {
  104.         //defineSpielbrett();
  105.         double bl = boardlength;
  106.         double bw = boardwidth;
  107.  
  108.         setModel(path);
  109.         setShader(vertexPath, fragmentPath);
  110.     }
  111.  
  112.     void addPawn(glm::vec3 position, Color c) {
  113.         Pawn* p = new Pawn;
  114.  
  115.         switch (c) {
  116.         case RED:
  117.             p->color = glm::vec3(1.0f, 0.0f, 0.0f); break;
  118.         case BLUE:
  119.             p->color = glm::vec3(0.0f, 1.0f, 0.0f); break;
  120.         case GREEN:
  121.             p->color = glm::vec3(0.0f, 0.0f, 1.0f); break;
  122.         default:
  123.             p->color = glm::vec3(1.0f); break;
  124.         }
  125.  
  126.         p->position = position;
  127.         pawns_.push_back(p);;
  128.     }
  129.  
  130.     bool animate(int index, DIRECTION dir, GLfloat deltaTime, GLfloat durationJump, GLfloat distance) {
  131.         static GLfloat zurGelegterWeg = 0.0f;
  132.         GLfloat step = deltaTime*distance / durationJump;
  133.         if (index < pawns_.size() && zurGelegterWeg < distance) {
  134.             glm::vec3 go{ distance,0.0f,distance };
  135.             GLfloat xdiag = go.x *glm::cos(glm::radians(60.0f));
  136.             GLfloat zdiag = go.z *glm::sin(glm::radians(60.0));
  137.             switch (dir) {
  138.             case NEAST: go.z = -zdiag;
  139.                 go.x = xdiag;
  140.                 break;
  141.             case SEAST:
  142.                 go.x = xdiag; go.z = zdiag;
  143.                 break;
  144.             case WEST:
  145.                 go.x = -distance;
  146.                 go.z = 0;
  147.                 break;
  148.             case EAST:
  149.                 go.x = distance; go.z = 0.0f;
  150.                 break;
  151.             case NWEST:
  152.                 go.x = -xdiag; go.z = -zdiag;
  153.                 break;
  154.             case SWEST:
  155.                 go.x = -xdiag;
  156.                 go.z = zdiag;
  157.                 break;
  158.             default:
  159.                 break;
  160.             }
  161.             go *= step;
  162.             zurGelegterWeg += sqrt(go.x*go.x + go.z*go.z);
  163.             GLfloat anteilAnGesamtStrecke = zurGelegterWeg / distance;
  164.             pawns_[index]->position += go;
  165.             pawns_[index]->position.y = std::max(double(pawns_[index]->boden + (glm::sin(anteilAnGesamtStrecke * M_PI)*0.3)), double(pawns_[index]->boden));
  166.             return true;
  167.         }
  168.         else if (zurGelegterWeg >= distance) {
  169.             zurGelegterWeg = 0.0f;
  170.             return false;
  171.         }
  172.     }
  173.  
  174.     void setModel(GLchar* path) {
  175.         path_ = path;
  176.         model_ = new Model(path);
  177.     }
  178.  
  179.     void setShader(const GLchar* vertexPath, const GLchar* fragmentPath) {
  180.         shader_ = new Shader(vertexPath, fragmentPath);
  181.     }
  182.  
  183.  
  184.     void drawPawns(glm::mat4 view, glm::mat4 projection, glm::vec3 lightPos, Camera &camera) {
  185.         // draw the pawns
  186.  
  187.         shader_->Use();
  188.         // Transformation matrices
  189.         glUniformMatrix4fv(glGetUniformLocation(shader_->Program, "projection"), 1, GL_FALSE, glm::value_ptr(projection));
  190.         glUniformMatrix4fv(glGetUniformLocation(shader_->Program, "view"), 1, GL_FALSE, glm::value_ptr(view));
  191.         for (auto team : pawns_) {
  192.  
  193.             // Draw the loaded model
  194.             glm::mat4 model1;
  195.  
  196.             GLint objectColorLoc = glGetUniformLocation(shader_->Program, "objectColor");
  197.             GLint lightColorLoc = glGetUniformLocation(shader_->Program, "lightColor");
  198.             GLint lightPosLoc = glGetUniformLocation(shader_->Program, "lightPos");
  199.             GLint viewPosLoc = glGetUniformLocation(shader_->Program, "viewPos");
  200.             glUniform3f(lightPosLoc, lightPos.x, lightPos.y, lightPos.z);
  201.             glUniform3f(viewPosLoc, camera.Position.x, camera.Position.y, camera.Position.z);
  202.             glUniform3f(objectColorLoc, team->color.r, team->color.b, team->color.g);
  203.             glUniform3f(lightColorLoc, 1.0f, 1.0f, 1.0f); // Also set light's color (white)
  204.  
  205.             model1 = glm::translate(model1, team->position); // Translate it down a bit so it's at the center of the scene
  206.             model1 = glm::rotate(model1, glm::radians(-90.0f), glm::vec3(1.0f, 0.0f, 0.0f));
  207.             model1 = glm::scale(model1, glm::vec3(0.005f, 0.005f, 0.005f));
  208.  
  209.             glUniformMatrix4fv(glGetUniformLocation(shader_->Program, "model"), 1, GL_FALSE, glm::value_ptr(model1));
  210.             model_->Draw(*shader_);
  211.         }
  212.     }
  213. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement