aboutsummaryrefslogtreecommitdiff
path: root/game/load.cpp
blob: 5baae6cbe019cbcc62b35040d416e3c1a1db0b63 (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
#include <iostream>
#include <fstream>
#include <vector>

#include "load.h"

#include "nlohmann/json.hpp"
using json = nlohmann::json;

std::vector<Ability> load_abilities () {
    std::vector<Ability> abs;
    abs.emplace_back("Anti-Cavalry");
    abs.emplace_back("Skirmish");
    abs.emplace_back("First Strike");
    abs.emplace_back("Rapid Fire");
    abs.emplace_back("Units Only");
    abs.emplace_back("Buildings Only");
    abs.emplace_back("No Counter");
    abs.emplace_back("No Move & Attack");
    abs.emplace_back("Causes Fear");
    abs.emplace_back("Desert Charge");
    abs.emplace_back("Plains Charge");
    abs.emplace_back("Scares Horses");
    abs.emplace_back("Woodsman");
    abs.emplace_back("Volley");
    abs.emplace_back("Frenzy");
    abs.emplace_back("Zeal");
    abs.emplace_back("Scout");
    abs.emplace_back("Convert");
    abs.emplace_back("Heal");
    abs.emplace_back("Seasoned Veteran");
    return abs;
}

void load_json (Gst &gst) {    
    gst.abilities = load_abilities();

    std::ifstream file_tiles("content/tiles.json");
    json j_tiles; file_tiles >> j_tiles;
    for (auto it : j_tiles) {
        Tile tile;
        tile.name = it["name"];
        tile.move_cost = it["move_cost"];
        tile.defence_bonus = it["defence_bonus"];
        tile.range_bonus = it["range_bonus"];
        tile.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
        gst.tiles.push_back(tile);
    }
    
    std::ifstream file_ents("content/entities.json");
    json j_ents; file_ents >> j_ents;
    for (auto it : j_ents) {
        EntityInfo ent;
        ent.id = it["id"];
        ent.name = it["name"];
        ent.range = it["range"];
        ent.move = it["move"];
        ent.attack = it["attack"];
        ent.defence = it["defence"];
        ent.sight = it["sight"];
        ent.unit = it["unit"];
        for (int i=0; i<it["prod"].size(); i++) {
            ent.prod[i] = it["prod"][i];
        }
        for (int i=0; i<it["cost"].size(); i++) {
            ent.cost[i] = it["cost"][i];
        }
        for (auto blds : it["build"]) {
            ent.build.push_back(blds);
        }
        for (auto train : it["train"]) {
            ent.train.push_back(train);
        }
        for (auto ad : it["adjacent"]) {
            ent.adjacent.push_back(ad);
        }
        std::string cl = it["class"];
        if (cl == "inf") ent.ent_class = EntityInfo::Class::inf;
        if (cl == "cav") ent.ent_class = EntityInfo::Class::cav;
        if (cl == "ran") ent.ent_class = EntityInfo::Class::ran;
        if (cl == "sie") ent.ent_class = EntityInfo::Class::sie;
        if (cl == "bld") ent.ent_class = EntityInfo::Class::bld;
        for (auto ab : it["abilities"]) {
            int index = 0;
            for (int i=0; i<gst.abilities.size(); i++) {
                if (gst.abilities[i].name == ab) { index = i; break; }
            }
            ent.abilities.push_back(index);
        }
        ent.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
        gst.infos.push_back(ent);
    }
    
    std::ifstream file_techs("content/techs.json");
    json j_techs; file_techs >> j_techs;
    for (auto it : j_techs) {
        Tech tech;
        tech.name = it["name"];
        tech.id = it["id"];
        tech.level = it["level"];
        tech.req_id = it["req_id"];
        for (int i=0; i<it["cost"].size(); i++) {
            tech.cost[i] = it["cost"][i];
        }
        gst.techs.push_back(tech);
    }
}