#pragma once #include #include #include namespace Warfactory { namespace Factory { class ProductionLine; class Belt; class Assembler; /** * Autonomous Factory Engine * Handles Factorio-like production simulation */ class FactoryEngine { public: FactoryEngine(); ~FactoryEngine(); // Engine lifecycle bool initialize(); void run(); void shutdown(); // Factory management void addProductionLine(std::unique_ptr line); void removeProductionLine(int lineId); // Production control void startProduction(); void stopProduction(); void pauseProduction(); // Performance monitoring double getTickRate() const { return tickRate_; } size_t getActiveLines() const { return productionLines_.size(); } private: void engineLoop(); void updateProduction(); void processInputOutput(); std::vector> productionLines_; std::thread engineThread_; bool running_; double tickRate_; // Communication with other engines void sendProductionData(); void receiveOrders(); }; } // namespace Factory } // namespace Warfactory