#pragma once #include "nlohmann/json.hpp" #include <string> #include <vector> #include <fstream> #include <iostream> #include "sc2api/sc2_typeenums.h" struct BuildDescription { sc2::UNIT_TYPEID producer_type; sc2::UNIT_TYPEID result_type; sc2::AbilityID ability_used; float time; std::vector<sc2::UNIT_TYPEID> buildings_needed; std::vector<sc2::UNIT_TYPEID> addons_needed; }; class TechTreeImproved { std::vector<BuildDescription> data; std::map<sc2::UNIT_TYPEID, std::vector<BuildDescription>> producer_to_data; std::map<sc2::UNIT_TYPEID, std::vector<BuildDescription>> result_to_data; void parse_unit(nlohmann::json::iterator it); public: TechTreeImproved(); void LoadData(); // Given a unit, how can we build it? const std::vector<BuildDescription> & HowToBuild(sc2::UnitTypeID unit) const; };