|  | @@ -0,0 +1,250 @@
 | 
	
		
			
				|  |  | +#include "Client.h"
 | 
	
		
			
				|  |  | +#include "../engine/Mouse.h"
 | 
	
		
			
				|  |  | +#include "../math/Matrix3D.h"
 | 
	
		
			
				|  |  | +#include "../math/Matrix3DStack.h"
 | 
	
		
			
				|  |  | +#include "../engine/Key.h"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Mesh Client::mesh;
 | 
	
		
			
				|  |  | +TextureMesh Client::tmesh;
 | 
	
		
			
				|  |  | +Vector3D Client::position;
 | 
	
		
			
				|  |  | +Texture Client::texture;
 | 
	
		
			
				|  |  | +Texture Client::texture2;
 | 
	
		
			
				|  |  | +float Client::lengthAngle = 0;
 | 
	
		
			
				|  |  | +float Client::widthAngle = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Client::Client()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void Client::init()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    if(texture.load("resources/textures.png"))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        cout << "texture success" << endl;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        cout << "texture fail" << endl;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(texture2.load("resources/font8x8.png"))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        cout << "texture2 success" << endl;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        cout << "texture2 fail" << endl;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    cout << "init" << endl;
 | 
	
		
			
				|  |  | +    mesh.init();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // bottom
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // top
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 1.0f, 0.5f, 0.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // right
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // left
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // back
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // front
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(0.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    mesh.addPoint(1.0f, 1.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    mesh.build();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    tmesh.init();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // bottom
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 0.0f, 0.125f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 0.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 1.0f, 0.125f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 0.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 1.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 1.0f, 0.125f, 0.0625f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // top
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 0.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 1.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 0.0f, 0.3125f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 0.0f, 0.3125f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 1.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 1.0f, 0.3125f, 0.0625f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // right
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 1.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 0.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // left
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 1.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 0.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // back
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 1.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 1.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 1.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 1.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 1.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // front
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 0.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 0.0f, 0.0f, 0.25f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 0.0f, 0.0f, 0.1875f, 0.0625f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(0.0f, 1.0f, 0.0f, 0.1875f, 0.0f);
 | 
	
		
			
				|  |  | +    tmesh.addPoint(1.0f, 1.0f, 0.0f, 0.25f, 0.0f);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    tmesh.build();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    position.set(0, 0, -2);
 | 
	
		
			
				|  |  | +    GameEngine::getCamera().setPosition(position.getX(), position.getY(), position.getZ());
 | 
	
		
			
				|  |  | +    GameEngine::getCamera().storePosition();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    Key::map(KEY_LEFT, GLFW_KEY_A);
 | 
	
		
			
				|  |  | +    Key::map(KEY_RIGHT, GLFW_KEY_D);
 | 
	
		
			
				|  |  | +    Key::map(KEY_UP, GLFW_KEY_W);
 | 
	
		
			
				|  |  | +    Key::map(KEY_DOWN, GLFW_KEY_S);
 | 
	
		
			
				|  |  | +    Key::map(KEY_JUMP, GLFW_KEY_SPACE);
 | 
	
		
			
				|  |  | +    Key::map(KEY_SNEAK, GLFW_KEY_LEFT_SHIFT);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    Key::map(KEY_CAM_LEFT, GLFW_KEY_H);
 | 
	
		
			
				|  |  | +    Key::map(KEY_CAM_RIGHT, GLFW_KEY_K);
 | 
	
		
			
				|  |  | +    Key::map(KEY_CAM_UP, GLFW_KEY_U);
 | 
	
		
			
				|  |  | +    Key::map(KEY_CAM_DOWN, GLFW_KEY_J);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +uint64_t oldTime = -1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +uint64_t count = 0;
 | 
	
		
			
				|  |  | +uint64_t sum = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void Client::tick()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    Camera& c = GameEngine::getCamera();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    c.storePosition();
 | 
	
		
			
				|  |  | +    c.storeAngles();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    float factor = 0.125f;
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_LEFT))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getLeft(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_RIGHT))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getRight(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_UP))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getFront(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_DOWN))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getBack(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_JUMP))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getUp(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_SNEAK))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        position.addMul(c.getDown(), factor);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_CAM_LEFT))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        lengthAngle += 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_CAM_RIGHT))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        lengthAngle -= 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_CAM_UP))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        widthAngle += 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(Key::isDown(KEY_CAM_DOWN))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        widthAngle -= 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    c.setPosition(position.getX(), position.getY(), position.getZ());
 | 
	
		
			
				|  |  | +    c.setAngles(lengthAngle, widthAngle);
 | 
	
		
			
				|  |  | +    //cout << "tick" << endl;
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    cout << (1000000000.0 * count ) / sum << endl;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void Client::renderTick(float lag)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    uint64_t t = glfwGetTimerValue();
 | 
	
		
			
				|  |  | +    if(oldTime == -1)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        oldTime = t;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        sum += t - oldTime;
 | 
	
		
			
				|  |  | +        count++;
 | 
	
		
			
				|  |  | +        oldTime = t;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    GameEngine::getCamera().updateView(lag);
 | 
	
		
			
				|  |  | +    texture.bind();
 | 
	
		
			
				|  |  | +    GameEngine::setTextureEnabled(true);
 | 
	
		
			
				|  |  | +    //GameEngine::setColorEnabled(true);
 | 
	
		
			
				|  |  | +    GameEngine::getDirectRenderer().prepare();
 | 
	
		
			
				|  |  | +    GameEngine::getDirectRenderer().drawRectangle(0, 0, 300, 300, 0, 0, 1, 1, 1, 0, 0, 1);
 | 
	
		
			
				|  |  | +    //tmesh.draw();
 | 
	
		
			
				|  |  | +    //cout << "renderTick" << endl;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void Client::start()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    GameEngine::start(640, 480, "Test Game", init, tick, renderTick);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |