37 lines
1.0 KiB
C++
37 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#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);
|
|
};
|