#include "common.hpp"

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

namespace DirectionalInfluence {
float get_float(u64 module_accessor, int var, bool& replace) {
    if (var == FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_X ||
        var == FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_Y) {
        if (is_training_mode() && is_operation_cpu(module_accessor) &&
            is_in_hitstun(module_accessor)) {
            if (menu.DI_STATE != NONE) {
                float angle = (menu.DI_STATE - 1) * M_PI / 4.0;

                // Either 0 (right) or PI (left)
                if (menu.DI_STATE == DI_RANDOM_IN_AWAY) {
                    angle = app::sv_math::rand(hash40("fighter"), 2) * M_PI;
                }
                // If facing left, reverse angle
                if (PostureModule::lr(module_accessor) != -1.0) angle -= M_PI;

                if (var == FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_X) {
                    replace = true;
                    return cos(angle);
                }

                if (var == FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_Y) {
                    replace = true;
                    return sin(angle);
                }
            }
        }
    }

    replace = false;
    return 0;
}
}