Bubba-3D  0.9.0
Awesome game engine!
RelativeIHudDrawable.cpp
1 /*
2  * This file is part of Bubba-3D.
3  *
4  * Bubba-3D is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * Bubba-3D is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with Bubba-3D. If not, see http://www.gnu.org/licenses/.
16  */
17 
18 #include <Globals.h>
19 #include "RelativeIHudDrawable.h"
20 #include "Camera.h"
21 
22 RelativeIHudDrawable::RelativeIHudDrawable(Camera* worldCamera, GameObject *relativeTo, IHudDrawable *toDraw) :
23  relativeTo(relativeTo), toDraw(toDraw), worldCamera(worldCamera) {}
24 
25 void RelativeIHudDrawable::render(ShaderProgram *shaderProgram, chag::float4x4 *projectionMatrix) {
26 
27  chag::float3 drawableRelativePosition = toDraw->relativePosition;
28  chag::float4x4 screenPos = worldCamera->getProjectionMatrix()
29  * worldCamera->getViewMatrix()
30  * relativeTo->getModelMatrix();
31 
32  int w = Globals::get(Globals::WINDOW_WIDTH);
33  int h = Globals::get(Globals::WINDOW_HEIGHT);
34 
35  float x = (screenPos.c4.x / screenPos.c4.w + 1.0f) * w / 2.0f;
36  float y = h - (screenPos.c4.y / screenPos.c4.w + 1.0f) * h / 2.0f;
37 
38  chag::float3 tempRelativeVector = drawableRelativePosition + chag::make_vector(roundf(x), -roundf(y), 0.0f);
39 
40  toDraw->relativePosition = tempRelativeVector;
41  toDraw->render(shaderProgram, projectionMatrix);
42  toDraw->relativePosition = drawableRelativePosition;
43 
44 }
Class for maintaining OpenGL shader programs.
Definition: ShaderProgram.h:39
A class for containing all information about a object in the game world.
Definition: GameObject.h:67
Definition: Camera.h:26