1
0
Fork 0
mirror of https://github.com/jugeeya/UltimateTrainingModpack.git synced 2025-01-21 01:40:14 +00:00
UltimateTrainingModpack/source/training/input_recorder.hpp

128 lines
4.3 KiB
C++
Raw Normal View History

#pragma once
#include "common.hpp"
typedef struct FrameInput {
int cat1_flag;
int cat2_flag;
int cat3_flag;
int cat4_flag;
int pad_flag;
float stick_x;
float stick_y;
} FrameInput;
#define NUM_FRAME_INPUTS 60
FrameInput frame_inputs[NUM_FRAME_INPUTS];
int curr_frame = 0;
#define NUM_PRE_FRAME 60
int curr_pre_frame = 0;
#define INPUT_PRE_RECORDING 1
#define INPUT_RECORDING 2
#define INPUT_PLAYBACK 3
int INPUT_RECORD_STATE = NONE;
namespace InputRecorder {
int get_command_flag_cat(u64 module_accessor, int category, int flag, bool& replace) {
if (is_training_mode()) {
if (is_operation_cpu(module_accessor)) {
if (INPUT_RECORD_STATE == INPUT_PRE_RECORDING)
; // Set color overlay to red
if (INPUT_RECORD_STATE == INPUT_RECORDING ||
INPUT_RECORD_STATE == INPUT_PLAYBACK) {
if (INPUT_RECORD_STATE == INPUT_RECORDING)
; // Set color overlay to blue
else {
; // Reset color overlay
replace = true;
if (category == 0)
return frame_inputs[curr_frame].cat1_flag;
else if (category == 1)
return frame_inputs[curr_frame].cat2_flag;
else if (category == 2)
return frame_inputs[curr_frame].cat3_flag;
else if (category == 3)
return frame_inputs[curr_frame].cat4_flag;
}
}
} else {
if (INPUT_RECORD_STATE == NONE) {
if (ControlModule::check_button_on(module_accessor, CONTROL_PAD_BUTTON_CATCH) &&
ControlModule::check_button_trigger(module_accessor, CONTROL_PAD_BUTTON_APPEAL_S_L))
INPUT_RECORD_STATE = INPUT_PRE_RECORDING;
} else if (INPUT_RECORD_STATE == INPUT_PRE_RECORDING) {
if (category == FIGHTER_PAD_COMMAND_CATEGORY1) {
curr_pre_frame++;
if (curr_pre_frame == NUM_PRE_FRAME - 1) {
INPUT_RECORD_STATE = INPUT_RECORDING;
curr_pre_frame = 0;
}
}
} else if (INPUT_RECORD_STATE == INPUT_RECORDING) {
if (category == FIGHTER_PAD_COMMAND_CATEGORY1) {
curr_frame++;
frame_inputs[curr_frame] = FrameInput{
flag,
ControlModule::get_command_flag_cat(module_accessor, 1),
ControlModule::get_command_flag_cat(module_accessor, 2),
ControlModule::get_command_flag_cat(module_accessor, 3),
ControlModule::get_pad_flag(module_accessor),
ControlModule::get_stick_x(module_accessor),
ControlModule::get_stick_y(module_accessor),
};
if (curr_frame == NUM_FRAME_INPUTS - 1) {
INPUT_RECORD_STATE = INPUT_PLAYBACK;
curr_frame = 0;
}
}
}
}
}
replace = false;
return 0;
}
int get_pad_flag(u64 module_accessor, bool& replace) {
if (is_training_mode() && is_operation_cpu(module_accessor)) {
if (INPUT_RECORD_STATE == INPUT_RECORDING ||
INPUT_RECORD_STATE == INPUT_PLAYBACK) {
replace = true;
return frame_inputs[curr_frame].pad_flag;
}
}
replace = false;
return 0;
}
float get_stick_x(u64 module_accessor, bool& replace) {
if (is_training_mode() && is_operation_cpu(module_accessor)) {
if (INPUT_RECORD_STATE == INPUT_RECORDING ||
INPUT_RECORD_STATE == INPUT_PLAYBACK) {
replace = true;
return frame_inputs[curr_frame].stick_x;
}
}
replace = false;
return 0;
}
float get_stick_y(u64 module_accessor, bool& replace) {
if (is_training_mode() && is_operation_cpu(module_accessor)) {
if (INPUT_RECORD_STATE == INPUT_RECORDING ||
INPUT_RECORD_STATE == INPUT_PLAYBACK) {
replace = true;
return frame_inputs[curr_frame].stick_y;
}
}
replace = false;
return 0;
}
}