warfactoryracine/engines/Event-Engine/src/event/EventEngine.cpp
StillHammer 5bdd072117 Complete 10-engine architecture with CMake build system
 All 10 engines now build successfully:
- Designer, Economy, Event, Factory, Intelligence
- Logistic, MacroEntity, Map, Operation, War

🚀 Features implemented:
- FAST_BUILD vs FULL_BUILD presets for efficient development
- Comprehensive defensive programming (sanitizers, contracts)
- 16 C++ libraries integrated via FetchContent
- GCC-compatible configuration with stack protection
- Unified CMake system across all engines

🛠️ Build commands:
- Fast: cmake -DFAST_BUILD=ON .. && make claude-workflow-fast
- Full: cmake .. && make (all sanitizers + validation)
- Single engine: make economy-engine

🔧 Development workflow optimized for daily iteration.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-19 14:19:25 +08:00

144 lines
3.8 KiB
C++

#include "event-engine/EventEngine.h"
#include <iostream>
#include <chrono>
namespace Warfactory {
namespace Event {
class GameEvent {
public:
GameEvent() = default;
virtual ~GameEvent() = default;
virtual void execute() {}
};
class BreakthroughSystem {
public:
BreakthroughSystem() = default;
void analyzeScrap(const std::string& scrapData) {
std::cout << "Analyzing scrap: " << scrapData << std::endl;
}
void triggerBreakthrough(const std::string& domain) {
std::cout << "Breakthrough triggered in: " << domain << std::endl;
}
};
class EventQueue {
public:
EventQueue() = default;
void scheduleEvent(std::unique_ptr<GameEvent> event, double delay) {
events_.push(std::move(event));
}
void addImmediate(std::unique_ptr<GameEvent> event) {
events_.push(std::move(event));
}
bool hasEvents() const { return !events_.empty(); }
std::unique_ptr<GameEvent> popEvent() {
if (events_.empty()) return nullptr;
auto event = std::move(const_cast<std::unique_ptr<GameEvent>&>(events_.front()));
events_.pop();
return event;
}
private:
std::queue<std::unique_ptr<GameEvent>> events_;
};
EventEngine::EventEngine() : running_(false) {
std::cout << "EventEngine constructor" << std::endl;
eventQueue_ = std::make_unique<EventQueue>();
breakthroughSystem_ = std::make_unique<BreakthroughSystem>();
}
EventEngine::~EventEngine() {
if (running_) {
shutdown();
}
}
bool EventEngine::initialize() {
std::cout << "EventEngine::initialize()" << std::endl;
running_ = true;
return true;
}
void EventEngine::run() {
std::cout << "EventEngine::run() starting engine loop" << std::endl;
engineThread_ = std::thread(&EventEngine::engineLoop, this);
if (engineThread_.joinable()) {
engineThread_.join();
}
}
void EventEngine::shutdown() {
std::cout << "EventEngine::shutdown()" << std::endl;
running_ = false;
if (engineThread_.joinable()) {
engineThread_.join();
}
}
void EventEngine::scheduleEvent(std::unique_ptr<GameEvent> event, double /*delaySeconds*/) {
eventQueue_->scheduleEvent(std::move(event), 0.0);
}
void EventEngine::triggerImmediateEvent(std::unique_ptr<GameEvent> event) {
eventQueue_->addImmediate(std::move(event));
}
void EventEngine::analyzeScrapForBreakthrough(const std::string& scrapData) {
breakthroughSystem_->analyzeScrap(scrapData);
}
void EventEngine::triggerBreakthrough(const std::string& technologyDomain) {
breakthroughSystem_->triggerBreakthrough(technologyDomain);
}
void EventEngine::generateRandomEvent() {
std::cout << "Generating random global event" << std::endl;
}
void EventEngine::processScheduledEvents() {
while (eventQueue_->hasEvents()) {
auto event = eventQueue_->popEvent();
if (event) {
event->execute();
}
}
}
void EventEngine::engineLoop() {
auto lastUpdate = std::chrono::steady_clock::now();
while (running_) {
auto now = std::chrono::steady_clock::now();
auto deltaTime = std::chrono::duration<double>(now - lastUpdate).count();
if (deltaTime >= 1.0/60.0) {
updateEventQueue();
dispatchEvents();
processScheduledEvents();
sendEvents();
receiveEventTriggers();
lastUpdate = now;
}
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
}
void EventEngine::updateEventQueue() {
}
void EventEngine::dispatchEvents() {
}
void EventEngine::sendEvents() {
}
void EventEngine::receiveEventTriggers() {
}
} // namespace Event
} // namespace Warfactory