#pragma once #include #include "CoopGame.h" // Minimal, lightweight AI driver for a CoopGame player side (left or right). // It chooses a target rotation/x placement using a simple board heuristic, // then steers the active piece toward that target at a human-like input rate. class CoopAIController { public: CoopAIController() = default; void reset(); // frameMs is the frame delta in milliseconds (same unit used across the gameplay loop). void update(CoopGame& game, CoopGame::PlayerSide side, double frameMs); private: uint64_t m_lastPieceSeq = 0; bool m_hasPlan = false; int m_targetRot = 0; int m_targetX = 10; // Input pacing (ms). These intentionally mirror the defaults used for human input. double m_dasMs = 170.0; double m_arrMs = 40.0; double m_rotateIntervalMs = 110.0; // Internal timers/state for rate limiting. double m_moveTimerMs = 0.0; int m_moveDir = 0; // -1, 0, +1 double m_rotateTimerMs = 0.0; void computePlan(const CoopGame& game, CoopGame::PlayerSide side); };