Program Listing for File PDJE_Judge_Loop.hpp
↰ Return to documentation for file (include/judge/Loop/PDJE_Judge_Loop.hpp)
#pragma once
#include "Input_State.hpp"
#include "PDJE_Buffer.hpp"
#include "PDJE_Highres_Clock.hpp"
#include "PDJE_Judge_Init.hpp"
#include "PDJE_Note_OBJ.hpp"
#include "PDJE_Rule.hpp"
#include "PDJE_SYNC_CORE.hpp"
#include <cstdint>
#include <optional>
#include <thread>
#include <unordered_map>
#include <vector>
namespace PDJE_JUDGE {
class Judge_Loop {
private:
struct {
std::optional<bool> use_event_switch;
std::optional<bool> miss_event_switch;
std::optional<std::thread> use_event_thread;
std::optional<std::thread> miss_event_thread;
} Event_Controls;
struct useDatas {
uint64_t railid;
bool Pressed;
bool IsLate;
uint64_t diff;
};
struct Queues {
PDJE_Buffer_Arena<std::unordered_map<uint64_t, NOTE_VEC>> miss_queue;
PDJE_Buffer_Arena<useDatas> use_queue;
Queues() : miss_queue(100), use_queue(100)
{
}
};
Queues Event_Datas;
private: // cached values
std::pair<PDJE_Input_Log *, uint64_t> input_log;
struct mouse_btn_event {
uint64_t rail_id = 0;
int status = -1;
};
struct {
std::unordered_map<uint64_t, NOTE_VEC> missed_buffers;
P_NOTE_VEC found_list;
P_NOTE_VEC related_list_out;
// time values
LOCAL_TIME local_microsecond_position;
uint64_t global_local_diff;
LOCAL_TIME log_begin;
LOCAL_TIME log_end;
LOCAL_TIME use_range;
LOCAL_TIME cut_range;
audioSyncData synced_data;
bool isLate;
uint64_t railID;
uint64_t diff;
std::vector<mouse_btn_event> mouse_btn_event_queue;
} Cached;
Judge_Init *init_datas;
PDJE_HIGHRES_CLOCK::CLOCK clock_root;
inline void
Cut();
bool
PreProcess();
void
ParseMouse(INPUT_RULE &rule, const BITMASK ev);
template <PDJE_Dev_Type D>
void
UseEvent(const PDJE_Input_Log &ilog);
bool
FindRailID(const INPUT_RULE &rule, uint64_t &id);
void
Match(const LOCAL_TIME input_time,
const P_NOTE_VEC ¬e_list,
const uint64_t railid,
const bool isPressed);
public:
void
EndEventLoop();
void
StartEventLoop();
void
loop();
std::atomic<bool> loop_switch;
Judge_Loop(Judge_Init &inits);
~Judge_Loop() = default;
};
}; // namespace PDJE_JUDGE