// ThoughtManager.h
// Class responsible for updating threads in the AI and scheduling their programs to run

// Threads used in the real game
struct RealGameThreads
    SearchThread Search;
    WorkerThread Worker;
    ProductionThread Production;
    ControlGroupCheckThread ControlGroupCheck;
    ArmyCheckThread ArmyCheck;
    OverlordThread Overlord;
    QueenThread Queen;
    GasWorkerThread GasWorker;
    ArmyThread Army;
    ChronoBoostThread ChronoBoost;
    MicroThread Micro;

// Class that stores all threads used by the current game and handles their execution.
class ThoughtManager : public Manager
    ThoughtManager() {}

    void ResetAll();
    void StartFrame();
    void EndFrame();

    void ExecuteStep();

    void FindWork();

    Vector<AIThread*> _AllThreads;    // All threads in the AI

    Program *_ActiveProgram;          // Currently executing program
    AIThread *_ActiveThread;          // Currently executing thread
    RealGameThreads _RealGameThreads; // Threads for multiplayer Starcraft II