📄 cdraw.cc
字号:
#include "gamemodel.hh"#include "gameobject.hh"#include <GL/gl.h>#include <cmath>#include <iostream>using namespace bats;using namespace std;void GameModel::cDraw(double gameTime, unsigned team, unsigned unum, rPredicate const &pred){ //cerr << "Draw command! " << info.team << " " << info.unum << " " << *pred << endl; GameObject extraGfx;// = gameModel.getPlayerInfo(info.team, info.unum).extraGfx; extraGfx.glList = 0; extraGfx.scale = Vector3D(1, 1, 1); extraGfx.gfx = new GFXObject(); Vector3D color(1.0, 1.0, 1.0); for (Predicate::iterator iter = pred->begin(); iter != pred->end(); ++iter) { rPredicate child = *iter; //cerr << "child: " << child->getStr() << endl; if (child->getStr() == "colour") { color[0] = *(child->get(0)); color[1] = *(child->get(1)); color[2] = *(child->get(2)); } else if (child->getStr() == "circle") { double x = *(child->get(0)); double y = *(child->get(1)); double r = *(child->get(2)); if (team == 1) { x = -x; y = -y; } //cerr << "drawing circle (" << x << ", " << y << ", " << r << ")" << endl; Face f; f.begin(GL_LINE_LOOP); f.color(color[0], color[1], color[2]); double dalpha = M_PI / 8; for (double alpha = 0; alpha < 2 * M_PI; alpha += dalpha) { double dx = r * cos(alpha); double dy = r * sin(alpha); f.vertex(Vector3D(x + dx, y + dy, 0.0)); } extraGfx.gfx->addFace(f); } else if (child->getStr() == "line") { double x1 = *(child->get(0)); double y1 = *(child->get(1)); double x2 = *(child->get(2)); double y2 = *(child->get(3)); if (team == 1) { x1 = -x1; y1 = -y1; x2 = -x2; y2 = -y2; } Face f; f.begin(GL_LINES); f.color(color[0], color[1], color[2]); f.vertex(Vector3D(x1, y1, 0.0)); f.vertex(Vector3D(x2, y2, 0.0)); extraGfx.gfx->addFace(f); } else if (child->getStr() == "vector") { double x1 = *(child->get(0)); double y1 = *(child->get(1)); double x2 = *(child->get(2)); double y2 = *(child->get(3)); if (team == 1) { x1 = -x1; y1 = -y1; x2 = -x2; y2 = -y2; } Face f1; f1.begin(GL_LINES); f1.color(color[0], color[1], color[2]); f1.vertex(Vector3D(x1, y1, 0.0)); f1.vertex(Vector3D(x2, y2, 0.0)); extraGfx.gfx->addFace(f1); // Draw arrowhead double dx = x2 - x1; double dy = y2 - y1; double beta = -atan(dy/dx); if (dx < 0) beta += 3.14; double lahx = -1 * cos(beta) + 1 * sin(beta); double lahy = - (-1) * sin(beta) + 1 * cos(beta); double rahx = -1 * cos(beta) + (-1) * sin(beta); double rahy = - (-1) * sin(beta) + (-1) * cos(beta); Face f2; f2.begin(GL_TRIANGLES); f2.color(color[0], color[1], color[2]); f2.vertex(Vector3D(x2, y2, 0.0)); f2.vertex(Vector3D(x2 + lahx, y2 + lahy, 0.0)); f2.vertex(Vector3D(x2 + rahx, y2 + rahy, 0.0)); extraGfx.gfx->addFace(f2); } } getPlayerInfo(team, unum).extraGfx = extraGfx;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -