summaryrefslogtreecommitdiff
path: root/src/main.cpp
blob: e385f9fd7304ae3489c5d1eb24eb9567d99f77a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "main.hpp"

int main()
{
    srand(time(NULL));

	Window      main(WINDOW_X, WINDOW_Y, "natures");
	List        L;
	Event       e;

    //New opengl stuff
    Transform   transform;
    Camera      camera(glm::vec3(0,0,70), 70.0f, (float)800/(float)600, 0.01f, 1000.0f);
    GeoShader   shader("./inc/opengl/theshader");
    GeoShader   shader2("./inc/opengl/basicshader");
    Rectdrawer  rectrenderer(shader2);
    SpriteBatch _spriteBatch(shader);

    _spriteBatch.init();
    shader.Bind();

    int uniModel = glGetUniformLocation(shader.m_program, "MVP");
    glUniformMatrix4fv(uniModel, 1, false, &transform.GetMVP(camera)[0][0]);
    shader2.Bind();

    int uniModel2 = glGetUniformLocation(shader2.m_program, "MPV");
    glUniformMatrix4fv(uniModel2, 1, false, &transform.GetMVP(camera)[0][0]);
    int countedFrames = 0;

    Timer       fps;
    int         speed = 60;
    bool        pause = false;

	while(e.gRun()){
        //fps.Start();
		while(e.Poll()){
			if(e.gEventType() == SDL_QUIT)
				e.off();
			else if(e.gEventType() == SDL_KEYDOWN)
                switch(e.gEvent().key.keysym.sym){
                    case SDLK_q:        e.off();                    break;
                    case SDLK_EQUALS:   speed+=30;                  break;
                    case SDLK_MINUS:    if(speed >30) speed-=30;    break;
                    case SDLK_SPACE:    pause=(pause)?(0):(1);      break;
                }
		}

        if(!pause){
            main.Clear(0.0f,0.0f,0.0f,1.0f);
            
            L.Remove();
            L.Behavior();
            L.Place();

            shader.Bind();
            _spriteBatch.begin();
            for(std::list<Creature>::iterator it = L.C.begin(); it != L.C.end(); it++)
                _spriteBatch.draw(it->gfxData);;

            for(std::list<Resource>::iterator it = L.R.begin(); it != L.R.end(); it++)
                _spriteBatch.draw(it->gfxData);;

            _spriteBatch.end();
            _spriteBatch.renderBatch();

            main.swapBuffers();
        }
		
        float avgFPS = countedFrames / ( fps.getTicks() / 1000.f );
        if( avgFPS > 200000 ){
            avgFPS = 0;
        }
        ++countedFrames;
        //if(fps.getTicks() < (1000 / speed))
        //    SDL_Delay((1000 / speed) - fps.getTicks());
	}

	return 0;
}