Skip to content
Snippets Groups Projects
library.h 2.07 KiB
Newer Older
  • Learn to ignore specific revisions
  • #pragma once
    
    #include <pybind11/pybind11.h>
    #include <sc2api/sc2_api.h>
    
    #include <iostream>
    #include <pybind11/stl.h> /* Automatic conversion from std::vector to Python lists */
    
    #include <pybind11/operators.h> /* Convenient operator support */
    
    // Lets us use "x"_a instead of py::arg("x"), great.
    using namespace pybind11::literals;
    
    
    // Wrapper class since the initialization uses pure argc/argv and these cannot be wrapped into Python correctly
    
    class Coordinator : public sc2::Coordinator
    {
    public:
        Coordinator() : sc2::Coordinator()
        {
    
            std::vector<std::string> arguments = { "pycommandcenter" };
            CustomLoadSettings(arguments);
        }
    
        Coordinator(std::string path) : sc2::Coordinator()
        {
            std::vector<std::string> arguments = { "pycommandcenter", "-e", path };
            CustomLoadSettings(arguments);
        }
    
        void CustomLoadSettings(std::vector<std::string> arguments)
        {
            std::vector<char*> argv;
            for (const auto& arg : arguments)
                argv.push_back((char*)arg.data());
            argv.push_back(nullptr);
            LoadSettings(argv.size() - 1, argv.data());
    
    
    class PyIDABot : public IDABot
    {
    public:
        using IDABot::IDABot;
        void OnGameStart() override
        {
    
            PYBIND11_OVERLOAD_NAME(
    
                "on_game_start",
    
                OnGameStart
            );
        }
        void OnStep() override
        {
    
            PYBIND11_OVERLOAD_NAME(
    
    // The functions below are all defined in different .cpp files, in order 
    // to keep compilation snappy
    
    void define_typeenums(pybind11::module & m);
    void define_unit(pybind11::module & m);
    void define_unittype(pybind11::module &m);
    
    void define_util(pybind11::module &m);
    
    void define_point(pybind11::module &m);
    
    void define_base_location(pybind11::module & m);
    
    void define_tech_tree(pybind11::module & m);
    
    void define_color(pybind11::module & m);
    
    void define_map_tools(pybind11::module & m);
    
    void define_building_placer(pybind11::module & m);