aboutsummaryrefslogtreecommitdiff
path: root/main.cpp
blob: be62a7d86e6f9f29d59f1631e1b79a0e4af99d39 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <vector>

#include "umath/vec2.h"

#include "graphics/graphics.h"
#include "commands/commands.h"
#include "timing/timing.h"
#include "game/entity.h"
#include "game/ground.h"
#include "game/playercontrol.h"
#include "game/gst.h"
#include "game/tile.h"
#include "game/load.h"

#include "game/ai/engine.h"
#include "game/ai/performer.h"


int main () {
    Graphics graphics (900, 600);
    Commands_sdl com;
    timing_sdl timing (60);
    
    Player_control control;
    
    float ts = 16;
    
    Inv inv;
    load_json(inv);
    
    inv.ground.build(15,15);
    inv.ground.tiles[1] = 1;
    inv.ground.tiles[8] = 1;
    inv.ground.tiles[11] = 2;
    inv.ground.tiles[12] = 2;
    for (int i=0; i<2000; i+=37) {
        inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 2;
        inv.ground.tiles[(i+1)%(inv.ground.sizex*inv.ground.sizey)] = 2;
    }
    for (int i=0; i<2000; i+=71) {
        inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 1;
    }
    inv.ground.resources.emplace_back(inv.ground.at(3, 4), Resource::Type::gold);
    inv.ground.resources.emplace_back(inv.ground.at(4, 4), Resource::Type::food);
    
    
    Gst gst { &inv };
    
    gst.players.emplace_back(255, 0, 0, 0);
    gst.players[0].res = std::vector<float> { 1500, 1500 };
    gst.players.emplace_back(0, 0, 255, 1);
    gst.players[1].res = std::vector<float> { 1500, 1500 };
    gst.players[0].level = 2;
    
    gst.entities.emplace_back(5, 1, inv.get_info("Town Center"), 0);
    gst.entities.emplace_back(6, 1, inv.get_info("Barracks"), 0);
    gst.entities.emplace_back(5, 0, inv.get_info("Stable"), 0);
    gst.entities.emplace_back(4, 1, inv.get_info("Market"), 0);
    gst.entities.emplace_back(1, 1, inv.get_info("Villager"), 0);
    gst.entities.emplace_back(2, 1, inv.get_info("Light Cavalry"), 0);
    gst.entities.emplace_back(4, 2, inv.get_info("Light Cavalry"), 1);
    gst.entities.emplace_back(10, 10, inv.get_info("Villager"), 1);
    gst.entities.emplace_back(1, 5, inv.get_info("Villager"), 1);
    gst.entities.emplace_back(2, 5, inv.get_info("Militia"), 1);
    gst.entities.emplace_back(0, 0, inv.get_info("Scout Cavalry"), 0);
    gst.entities.emplace_back(1, 0, inv.get_info("Persian War Elephants"), 0);
    gst.entities.emplace_back(0, 1, inv.get_info("Scorpions"), 1);
    gst.entities.emplace_back(1, 2, inv.get_info("Archers"), 1);
    gst.entities.emplace_back(4, 3, inv.get_info("Monks"), 0);
    
    View view (vec2 { (float)graphics.resx, (float)graphics.resy });
    
    vec2 mouselast { 0, 0 };
    
    while(true) {
        if (com.process_events()) break;
        if (com.resx != -1) { 
            graphics.change_res(com.resx, com.resy); 
            view.res = vec2 { (float)com.resx, (float)com.resy };
        }
        vec2 mousepos { (float)com.mx, (float)com.my };
        vec2 mousedelta { mousepos };
        mousedelta -= mouselast;
        
        if (com.mclick[1]) {
            graphics.cam.pos += mousedelta;
        }
        
        mouselast = vec2 { (float)com.mx, (float)com.my };
        
        timing.process();
        while (timing.check_process()) {
            com.process_clicks();
            view.process(gst, graphics.cam.pos, mousepos, com.mheld);
            if (com.check_key(SDL_SCANCODE_ESCAPE)) {
                view.back = 1;
            }
            
            if (com.check_key(SDL_SCANCODE_SPACE)) {
                ai::engine eng { gst };
                auto best = eng.get_best();
                
                ai::performer perf { gst };
                gst = perf.apply(best);
            }
            
            control.process(gst, view);
            com.process_keys();
        }
        if (timing.check_render()) {
            graphics.render(gst, view);
            graphics.present();
        }
    }
	return 0;
}