mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-04 12:47:56 +03:00
Fully functional dw_gui
This commit is contained in:
@@ -15,8 +15,7 @@
|
||||
#include "../../CRE/sprite.hpp"
|
||||
#include "../../CRE/stage.hpp"
|
||||
#include "../../CRE/task_effect.hpp"
|
||||
#include "../input.hpp"
|
||||
#include "../task_window.hpp"
|
||||
#include "../input_state.hpp"
|
||||
|
||||
extern int32_t width;
|
||||
extern int32_t height;
|
||||
@@ -267,11 +266,11 @@ void DtmAet::Disp() {
|
||||
print_work.color = color_red;
|
||||
print_work.printf_align_left("%s\n", i.first.c_str());
|
||||
|
||||
/*if (input_state_get(0)->sub_14018D480(64)) {
|
||||
if (input_state_get(0)->CheckDown(64)) {
|
||||
print_work.color = color_white;
|
||||
print_work.printf_align_left("p(%.2f,%.2f)\n", pos.x, pos.y);
|
||||
print_work.printf_align_left("o(%f)\n", i.second.opacity);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,8 +367,6 @@ DtwAet::DtwAet() {
|
||||
data_struct* aft_data = &data_list[DATA_AFT];
|
||||
aet_database* aft_aet_db = &aft_data->data_ft.aet_db;
|
||||
|
||||
rect = { 0.0f, 0.0f, 220.0f, 380.0f };
|
||||
|
||||
dw::Widget::SetText("2DAUTH TEST");
|
||||
|
||||
(new dw::Label(this))->SetText("SET");
|
||||
@@ -385,14 +382,14 @@ DtwAet::DtwAet() {
|
||||
set->SetMaxItems(20);
|
||||
set->SetItemIndex(dtm_aet->curr_set_index);
|
||||
|
||||
set->list->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::SetCallback));
|
||||
set->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::SetCallback));
|
||||
|
||||
(new dw::Label(this))->SetText("ID");
|
||||
|
||||
id = new dw::ListBox(this);
|
||||
id->SetMaxItems(20);
|
||||
|
||||
id->list->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::IdCallback));
|
||||
id->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::IdCallback));
|
||||
|
||||
(new dw::Label(this))->SetText("LAYER");
|
||||
|
||||
@@ -400,7 +397,7 @@ DtwAet::DtwAet() {
|
||||
layer->AddItem("ROOT");
|
||||
layer->SetMaxItems(20);
|
||||
|
||||
layer->list->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::LayerCallback));
|
||||
layer->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::LayerCallback));
|
||||
|
||||
(new dw::Label(this))->SetText("MARKER");
|
||||
|
||||
@@ -408,24 +405,24 @@ DtwAet::DtwAet() {
|
||||
marker->AddItem("NOMARKER");
|
||||
marker->SetMaxItems(20);
|
||||
|
||||
marker->list->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::MarkerCallback));
|
||||
marker->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::MarkerCallback));
|
||||
|
||||
marker_frame = new dw::Label(this);
|
||||
marker_frame->SetText("0");
|
||||
|
||||
(new dw::Label(this))->SetText("TYPE");
|
||||
|
||||
type = new dw::ListBox(this);
|
||||
type = new dw::ListBox(this, dw::MULTISELECT);
|
||||
type->AddItem("DRAW");
|
||||
type->AddItem("LAYOUT");
|
||||
|
||||
type->list->SetItemIndex(dtm_aet->type);
|
||||
type->SetItemIndex(dtm_aet->type);
|
||||
|
||||
type->list->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::TypeCallback));
|
||||
type->AddSelectionListener(new dw::SelectionListenerOnHook(DtwAet::TypeCallback));
|
||||
|
||||
(new dw::Label(this))->SetText("FRAME");
|
||||
|
||||
frame = dw::Slider::make(this);
|
||||
frame = dw::Slider::Create(this);
|
||||
frame->SetText("FRAME");
|
||||
frame->format = "%4.0f";
|
||||
|
||||
@@ -447,7 +444,7 @@ DtwAet::DtwAet() {
|
||||
centering->SetText("CENTERING");
|
||||
centering->callback = DtwAet::CenteringCallback;
|
||||
|
||||
//GetSetSize();
|
||||
UpdateLayout();
|
||||
}
|
||||
|
||||
DtwAet::~DtwAet() {
|
||||
@@ -523,7 +520,7 @@ void dtm_aet_load() {
|
||||
app::TaskWork::AddTask(dtm_aet, "DATA_TEST_AET_MANAGER");
|
||||
|
||||
if (!dtw_aet) {
|
||||
dtw_aet = new DtwAet();
|
||||
dtw_aet = new DtwAet;
|
||||
dtw_aet->sub_1402F38B0();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "../../CRE/pv_db.hpp"
|
||||
#include "../../CRE/resolution_mode.hpp"
|
||||
#include "../../CRE/stage.hpp"
|
||||
#include "../input_state.hpp"
|
||||
#include "auth_3d_test.hpp"
|
||||
#include "equip_test.hpp"
|
||||
#include "stage_test.hpp"
|
||||
@@ -246,7 +247,7 @@ bool DataTestMot::Ctrl() {
|
||||
dtm_mot_array[0].SetLoop(true);
|
||||
dtm_mot_array[1].SetLoop(true);
|
||||
|
||||
bool play = false;//input_state_get(0)->sub_14018D540(84) != 0;
|
||||
bool play = input_state_get(0)->CheckIntervalTapped(84);
|
||||
dtm_mot_array[0].SetPlay(play);
|
||||
dtm_mot_array[1].SetPlay(play);
|
||||
} break;
|
||||
@@ -1245,7 +1246,7 @@ DataTestFaceMotDw::DataTestFaceMotDw(int32_t chara_id) {
|
||||
|
||||
face = InitAddMottblMapMotions(motion_group, 0);
|
||||
|
||||
face_frame = dw::Slider::make(motion_group);
|
||||
face_frame = dw::Slider::Create(motion_group);
|
||||
face_frame->SetText("Frame ");
|
||||
face_frame->format = "%4.0f";
|
||||
face_frame->SetParams(0.0f, 0.0f, 100.0f, 10.0f, 1.0f, 10.0f);
|
||||
@@ -1255,7 +1256,7 @@ DataTestFaceMotDw::DataTestFaceMotDw(int32_t chara_id) {
|
||||
face_cl = new dw::Label(motion_group);
|
||||
face_cl->SetText("");
|
||||
|
||||
face_cl_frame = dw::Slider::make(motion_group);
|
||||
face_cl_frame = dw::Slider::Create(motion_group);
|
||||
face_cl_frame->SetText("Frame");
|
||||
face_cl_frame->format = "%4.0f";
|
||||
face_cl_frame->SetParams(0.0f, 0.0f, 100.0f, 10.0f, 1.0f, 10.0f);
|
||||
@@ -1264,7 +1265,7 @@ DataTestFaceMotDw::DataTestFaceMotDw(int32_t chara_id) {
|
||||
|
||||
eyes = InitAddMottblMapMotions(motion_group, 1);
|
||||
|
||||
eyes_frame = dw::Slider::make(motion_group);
|
||||
eyes_frame = dw::Slider::Create(motion_group);
|
||||
eyes_frame->SetText("Frame");
|
||||
eyes_frame->format = "%4.0f";
|
||||
eyes_frame->SetParams(0.0f, 0.0f, 100.0f, 10.0f, 1.0f, 10.0f);
|
||||
@@ -1273,12 +1274,12 @@ DataTestFaceMotDw::DataTestFaceMotDw(int32_t chara_id) {
|
||||
|
||||
mouth = InitAddMottblMapMotions(motion_group, 2);
|
||||
|
||||
mouth_frame = dw::Slider::make(motion_group);
|
||||
mouth_frame = dw::Slider::Create(motion_group);
|
||||
mouth_frame->SetText("Frame");
|
||||
mouth_frame->format = "%4.0f";
|
||||
mouth_frame->SetParams(0.0f, 0.0f, 100.0f, 10.0f, 1.0f, 10.0f);
|
||||
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
}
|
||||
|
||||
DataTestFaceMotDw::~DataTestFaceMotDw() {
|
||||
@@ -1720,14 +1721,14 @@ DataTestMotDw::DataTestMotDw(int32_t chara_id, DtmMot* dtm_mot) {
|
||||
set_list_box_proc.list_box->AddSelectionListener(&id_list_box_proc);
|
||||
set_list_box_proc.list_box->SetFont(dw::p_font_type_6x12);
|
||||
|
||||
id_list_box_proc.slider = dw::Slider::make(this);
|
||||
id_list_box_proc.slider = dw::Slider::Create(this);
|
||||
id_list_box_proc.slider->SetText("Y ROT");
|
||||
id_list_box_proc.slider->format = "%3.0f";
|
||||
id_list_box_proc.slider->SetParams(test_mot_data->rot_y[chara_id], -180.0f, 180.0f, 36.0f, 1.0f, 10.0f);
|
||||
id_list_box_proc.slider->callback_data.i32 = chara_id;
|
||||
id_list_box_proc.slider->AddSelectionListener(&rotate_slider_proc);
|
||||
|
||||
rotate_slider_proc.slider = dw::Slider::make(this);
|
||||
rotate_slider_proc.slider = dw::Slider::Create(this);
|
||||
rotate_slider_proc.slider->dw::Widget::SetText("X POS");
|
||||
rotate_slider_proc.slider->format = "%3.2f";
|
||||
rotate_slider_proc.slider->SetParams(test_mot_data->trans_x[chara_id], -2.0f, 2.0f, 0.4f, 0.01f, 0.1f);
|
||||
@@ -1739,7 +1740,7 @@ DataTestMotDw::DataTestMotDw(int32_t chara_id, DtmMot* dtm_mot) {
|
||||
frame_group->SetFont(dw::p_font_type_6x12);
|
||||
|
||||
for (int32_t i = 3; i < 4; i++) {
|
||||
step_slider = dw::Slider::make(frame_group);
|
||||
step_slider = dw::Slider::Create(frame_group);
|
||||
char buf[0x10];
|
||||
sprintf_s(buf, sizeof(buf), "STEP %02d", i);
|
||||
step_slider->SetText(buf);
|
||||
@@ -1764,14 +1765,14 @@ DataTestMotDw::DataTestMotDw(int32_t chara_id, DtmMot* dtm_mot) {
|
||||
frame_count = new dw::Label(frame_comp, dw::FLAG_4000);
|
||||
frame_count->SetText("00000.0000");
|
||||
|
||||
current = dw::Slider::make(frame_group);
|
||||
current = dw::Slider::Create(frame_group);
|
||||
current->SetText("Current");
|
||||
current->format = "%4.0f";
|
||||
current->SetParams(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||
current->callback_data.i32 = chara_id;
|
||||
current->AddSelectionListener(&frame_slider_proc);
|
||||
|
||||
frame_slider_proc.slider = dw::Slider::make(frame_group);
|
||||
frame_slider_proc.slider = dw::Slider::Create(frame_group);
|
||||
frame_slider_proc.slider->SetText("Start ");
|
||||
frame_slider_proc.slider->format = "%4.0f";
|
||||
frame_slider_proc.slider->SetParams(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||
@@ -1875,7 +1876,7 @@ DataTestMotDw::DataTestMotDw(int32_t chara_id, DtmMot* dtm_mot) {
|
||||
save_only_start_frame_button->callback_data.i32 = chara_id;
|
||||
save_only_start_frame_button->SetFont(dw::p_font_type_6x12);
|
||||
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
}
|
||||
|
||||
DataTestMotDw::~DataTestMotDw() {
|
||||
@@ -1975,7 +1976,7 @@ void DataTestMotDw::ResetFrame() {
|
||||
}
|
||||
|
||||
void DataTestMotDw::ResetIDListBoxIndex() {
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
|
||||
set_list_box_proc.list_box->SetItemIndex(0);
|
||||
}
|
||||
@@ -2069,7 +2070,7 @@ void DataTestMotA3dDw::PvListBoxProc::Callback(dw::SelectionListener::CallbackDa
|
||||
if (list_box)
|
||||
data_test_mot_a3d_dw->SetPvId(atoi(list_box->GetSelectedItemStr().c_str()));
|
||||
|
||||
data_test_mot_a3d_dw->GetSetSize();
|
||||
data_test_mot_a3d_dw->UpdateLayout();
|
||||
}
|
||||
|
||||
DataTestMotA3dDw::A3dListBoxProc::A3dListBoxProc() {
|
||||
@@ -2187,7 +2188,7 @@ DataTestMotA3dDw::DataTestMotA3dDw() {
|
||||
sync_1p_frame->callback = DataTestMotA3dDw::Sync1pFrameCallback;
|
||||
sync_1p_frame->SetFont(dw::p_font_type_6x12);
|
||||
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
|
||||
rect.pos.x = (float_t)res_window_get()->width * 0.3f - rect.size.x * 0.3f;
|
||||
|
||||
@@ -2292,7 +2293,7 @@ DataTestMotCtrlDw::DataTestMotCtrlDw() {
|
||||
stage->SetText("STAGE");
|
||||
stage->callback = DataTestMotCtrlDw::StageCallback;
|
||||
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
|
||||
rect.pos.x = (float_t)res_window_get()->width - rect.size.x;
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ DtwStg::DtwStg() : Shell(0) {
|
||||
effect_display->SetText(L"Effects display");
|
||||
effect_display->SetValue(true);
|
||||
|
||||
GetSetSize();
|
||||
UpdateLayout();
|
||||
}
|
||||
|
||||
DtwStg::~DtwStg() {
|
||||
@@ -185,7 +185,7 @@ void DtwStg::PvIdCallback(dw::Widget* data) {
|
||||
if (elem != dtw_stg->pv_stage.end()) {
|
||||
for (std::string& i : elem->second)
|
||||
pv_list_box->AddItem(i);
|
||||
dtw_stg->GetSetSize();
|
||||
dtw_stg->UpdateLayout();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+802
-241
File diff suppressed because it is too large
Load Diff
+22
-12
@@ -86,7 +86,7 @@ namespace dw {
|
||||
int64_t field_0;
|
||||
int32_t field_8;
|
||||
int8_t field_C;
|
||||
vec2 field_10;
|
||||
vec2 mouse_pos;
|
||||
int32_t field_18;
|
||||
Widget* widget;
|
||||
|
||||
@@ -135,21 +135,20 @@ namespace dw {
|
||||
typedef void(*Callback)(Widget* widget);
|
||||
|
||||
struct KeyCallbackData {
|
||||
Widget* field_0;
|
||||
int32_t field_8;
|
||||
Widget* widget;
|
||||
int32_t modifier;
|
||||
int8_t field_C;
|
||||
int8_t field_D;
|
||||
int32_t field_10;
|
||||
int32_t field_14;
|
||||
int32_t input[2];
|
||||
|
||||
KeyCallbackData();
|
||||
};
|
||||
|
||||
struct MouseCallbackData {
|
||||
Widget* field_0;
|
||||
Widget* widget;
|
||||
vec2 pos;
|
||||
int32_t field_10;
|
||||
int32_t field_14;
|
||||
int32_t input;
|
||||
int32_t modifier;
|
||||
|
||||
MouseCallbackData();
|
||||
};
|
||||
@@ -233,7 +232,7 @@ namespace dw {
|
||||
virtual int32_t MouseCallback(Widget::MouseCallbackData data) override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual void GetSetSize();
|
||||
virtual void UpdateLayout();
|
||||
virtual vec2 GetSize();
|
||||
virtual bool Field_58();
|
||||
virtual bool Field_60();
|
||||
@@ -290,7 +289,7 @@ namespace dw {
|
||||
virtual int32_t MouseCallback(Widget::MouseCallbackData data) override;
|
||||
virtual void SetSize(vec2 size) override;
|
||||
|
||||
virtual void GetSetSize() override;
|
||||
virtual void UpdateLayout() override;
|
||||
virtual vec2 GetSize() override;
|
||||
virtual bool Field_58() override;
|
||||
virtual bool Field_60() override;
|
||||
@@ -750,6 +749,9 @@ namespace dw {
|
||||
virtual ~ShellCloseButton() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
static void Callback(Widget* data);
|
||||
};
|
||||
@@ -765,11 +767,19 @@ namespace dw {
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(Widget::KeyCallbackData data) override;
|
||||
virtual int32_t MouseCallback(Widget::MouseCallbackData data) override;
|
||||
virtual void SetSize(vec2 value) override;
|
||||
|
||||
void AddSelectionListener(SelectionListener* value);
|
||||
virtual void UpdateLayout() override;
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
static Slider* make(Composite* parent = 0,
|
||||
void AddSelectionListener(SelectionListener* value);
|
||||
vec2 GetTextSize();
|
||||
|
||||
static Slider* Create(Composite* parent, Flags flags, const char* text,
|
||||
const char* format, float_t width = 128.f);
|
||||
static Slider* Create(Composite* parent = 0,
|
||||
Flags flags = (Flags)(FLAG_800 | HORIZONTAL),
|
||||
float_t pos_x = 0.0f, float_t pos_y = 0.0f,
|
||||
float_t width = 128.0f, float_t height = 20.0f, const char* text = "slider");
|
||||
|
||||
@@ -54,10 +54,12 @@ namespace Input {
|
||||
|
||||
static bool is_key_mod(int32_t key);
|
||||
static bool is_key_numpad(int32_t key);
|
||||
|
||||
static void KeyboardCallback(GLFWwindow* window,
|
||||
int32_t key, int32_t scancode, int32_t action, int32_t mods);
|
||||
static void MouseButtonCallback(GLFWwindow* window,
|
||||
int32_t button, int32_t action, int32_t mods);
|
||||
|
||||
static Key* vector_Key_find(std::vector<Key>& keys, int32_t key);
|
||||
static MouseButton* vector_MouseButton_find(
|
||||
std::vector<MouseButton>& mouse_buttons, int32_t button);
|
||||
|
||||
+18
-15
@@ -9,19 +9,22 @@
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
namespace Input {
|
||||
bool IsKeyDown(int32_t key, int32_t mods = 0);
|
||||
bool IsKeyUp(int32_t key, int32_t mods = 0);
|
||||
bool IsKeyTapped(int32_t key, int32_t mods = 0);
|
||||
bool IsKeyReleased(int32_t key, int32_t mods = 0);
|
||||
bool IsMouseButtonDown(int32_t button, int32_t mods = 0);
|
||||
bool IsMouseButtonUp(int32_t button, int32_t mods = 0);
|
||||
bool IsMouseButtonTapped(int32_t button, int32_t mods = 0);
|
||||
bool IsMouseButtonReleased(int32_t button, int32_t mods = 0);
|
||||
bool WasKeyDown(int32_t key, int32_t mods = 0);
|
||||
bool WasKeyUp(int32_t key, int32_t mods = 0);
|
||||
bool WasMouseButtonDown(int32_t button, int32_t mods = 0);
|
||||
bool WasMouseButtonUp(int32_t button, int32_t mods = 0);
|
||||
void EndFrame();
|
||||
void NewFrame();
|
||||
void SetInputs(GLFWwindow* window);
|
||||
extern POINT pos;
|
||||
extern POINT pos_prev;
|
||||
|
||||
extern bool IsKeyDown(int32_t key, int32_t mods = 0);
|
||||
extern bool IsKeyUp(int32_t key, int32_t mods = 0);
|
||||
extern bool IsKeyTapped(int32_t key, int32_t mods = 0);
|
||||
extern bool IsKeyReleased(int32_t key, int32_t mods = 0);
|
||||
extern bool IsMouseButtonDown(int32_t button, int32_t mods = 0);
|
||||
extern bool IsMouseButtonUp(int32_t button, int32_t mods = 0);
|
||||
extern bool IsMouseButtonTapped(int32_t button, int32_t mods = 0);
|
||||
extern bool IsMouseButtonReleased(int32_t button, int32_t mods = 0);
|
||||
extern bool WasKeyDown(int32_t key, int32_t mods = 0);
|
||||
extern bool WasKeyUp(int32_t key, int32_t mods = 0);
|
||||
extern bool WasMouseButtonDown(int32_t button, int32_t mods = 0);
|
||||
extern bool WasMouseButtonUp(int32_t button, int32_t mods = 0);
|
||||
extern void EndFrame();
|
||||
extern void NewFrame();
|
||||
extern void SetInputs(GLFWwindow* window);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,575 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#include "input_state.hpp"
|
||||
#include "../CRE/render_context.hpp"
|
||||
#include "input.hpp"
|
||||
|
||||
/*
|
||||
Bit / Name
|
||||
0 JVS_TEST
|
||||
1 JVS_SERVICE
|
||||
|
||||
2 JVS_START
|
||||
7 JVS_TRIANGLE
|
||||
8 JVS_SQUARE
|
||||
9 JVS_CROSS
|
||||
10 JVS_CIRCLE
|
||||
11 JVS_L (also triggered by pressing L on Slider Panel)
|
||||
12 JVS_R (also triggered by pressing R on Slider Panel)
|
||||
|
||||
18 JVS_SW1
|
||||
19 JVS_SW2
|
||||
|
||||
29 VK_SPACE
|
||||
|
||||
39 'A'
|
||||
40 'B'
|
||||
...
|
||||
64 'Z'
|
||||
|
||||
80 VK_RETURN
|
||||
81 VK_SHIFT
|
||||
82 VK_CONTROL
|
||||
83 VK_MENU
|
||||
|
||||
91 VK_UP
|
||||
92 VK_LEFT (guessed, unsure)
|
||||
93 VK_DOWN
|
||||
94 VK_RIGHT (guessed, unsure)
|
||||
|
||||
96 VK_LBUTTON
|
||||
97 VK_MBUTTON
|
||||
98 VK_RBUTTON
|
||||
|
||||
99 MOUSE_SCROLL_UP
|
||||
100 MOUSE_SCROLL_DOWN*/
|
||||
|
||||
struct struc_794 {
|
||||
ButtonState tapped;
|
||||
ButtonState released;
|
||||
ButtonState down;
|
||||
int32_t field_30[18];
|
||||
int32_t field_78;
|
||||
int64_t field_80;
|
||||
|
||||
struc_794();
|
||||
~struc_794();
|
||||
|
||||
void Reset();
|
||||
};
|
||||
|
||||
static void input_state_ctrl(InputState* input_state);
|
||||
static int32_t input_state_get_delta_frame();
|
||||
|
||||
static bool sub_140190A30(struc_794* a1, int32_t index);
|
||||
|
||||
InputState* input_state;
|
||||
|
||||
extern render_context* rctx_ptr;
|
||||
|
||||
InputState::DoubleTap::DoubleTap() : hold_frame(), frame(), state() {
|
||||
|
||||
}
|
||||
|
||||
bool InputState::DoubleTap::Ctrl(int32_t delta_frame, bool down, bool up) {
|
||||
if (hold_frame <= 0)
|
||||
return 0;
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
default:
|
||||
if (up) {
|
||||
state = 1;
|
||||
frame = 0;
|
||||
}
|
||||
return false;
|
||||
case 1:
|
||||
frame += delta_frame;
|
||||
if (frame > hold_frame) {
|
||||
state = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (down) {
|
||||
state = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void InputState::DoubleTap::Set(int32_t hold_frame) {
|
||||
this->hold_frame = hold_frame;
|
||||
}
|
||||
|
||||
InputState::HoldTap::HoldTap() : hold_frame(), frame() {
|
||||
|
||||
}
|
||||
|
||||
bool InputState::HoldTap::Ctrl(int32_t delta_frame, bool down, bool up) {
|
||||
if (hold_frame <= 0)
|
||||
return 0;
|
||||
|
||||
if (down)
|
||||
frame += delta_frame;
|
||||
else if (!up)
|
||||
frame = 0;
|
||||
|
||||
return frame >= hold_frame;
|
||||
}
|
||||
|
||||
void InputState::HoldTap::Set(int32_t hold_frame) {
|
||||
this->hold_frame = hold_frame;
|
||||
}
|
||||
|
||||
InputState::IntervalTap::IntervalTap() : hold_frame(), cycle_frame(), frame(), state() {
|
||||
|
||||
}
|
||||
|
||||
bool InputState::IntervalTap::Ctrl(int32_t delta_frame, bool down) {
|
||||
if (hold_frame <= 0)
|
||||
return false;
|
||||
|
||||
if (!down) {
|
||||
state = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case 0:
|
||||
default:
|
||||
state = 1;
|
||||
frame = 0;
|
||||
return true;
|
||||
case 1:
|
||||
frame += delta_frame;
|
||||
if (frame >= cycle_frame) {
|
||||
state = 2;
|
||||
frame = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
case 2:
|
||||
frame += delta_frame;
|
||||
if (frame >= hold_frame) {
|
||||
frame = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void InputState::IntervalTap::Set(int32_t hold_frame, int32_t cycle_frame) {
|
||||
this->hold_frame = hold_frame;
|
||||
this->cycle_frame = cycle_frame;
|
||||
}
|
||||
|
||||
InputState::InputState() : field_80(), field_C8(), updated(), field_D1(), field_D2(), key() {
|
||||
for (DoubleTap& i : DoubleTapData)
|
||||
i.Set(15);
|
||||
|
||||
for (HoldTap& i : HoldTapData)
|
||||
i.Set(12);
|
||||
|
||||
for (IntervalTap& i : IntervalTapData)
|
||||
i.Set(3, 40);
|
||||
}
|
||||
|
||||
InputState::~InputState() {
|
||||
|
||||
}
|
||||
|
||||
bool InputState::CheckDown(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!Down[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::CheckDoubleTapped(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!DoubleTapped[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::CheckHold(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!Hold[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::CheckIntervalTapped(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!IntervalTapped[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::CheckReleased(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!Released[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::CheckTapped(int32_t index) {
|
||||
if (index >= 0 && index < 111)
|
||||
return !!Tapped[index];
|
||||
return false;
|
||||
}
|
||||
|
||||
bool InputState::GetKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
void InputState::Update(int32_t index, int32_t delta_frame) {
|
||||
DownPrev = Down;
|
||||
|
||||
Tapped.reset();
|
||||
Released.reset();
|
||||
Down.reset();
|
||||
|
||||
struc_794 v78;
|
||||
updated = sub_140190A30(&v78, index);
|
||||
|
||||
Tapped |= v78.tapped;
|
||||
Released |= v78.released;
|
||||
Down |= v78.down;
|
||||
|
||||
if (updated) {
|
||||
field_80[0] = v78.field_30[0];
|
||||
field_80[1] = v78.field_30[1];
|
||||
field_80[2] = v78.field_30[2];
|
||||
field_80[3] = v78.field_30[3];
|
||||
field_80[4] = v78.field_30[4];
|
||||
field_80[5] = v78.field_30[5];
|
||||
field_80[6] = v78.field_30[6];
|
||||
field_80[7] = v78.field_30[7];
|
||||
|
||||
//Added
|
||||
field_80[8] = v78.field_30[8];
|
||||
field_80[9] = v78.field_30[9];
|
||||
field_80[10] = v78.field_30[10];
|
||||
field_80[11] = v78.field_30[11];
|
||||
}
|
||||
|
||||
/*if (task_slider_control_get()->sub_140618C60(36))
|
||||
v78.tapped[11] = true;
|
||||
else
|
||||
v78.tapped[11] = false;
|
||||
|
||||
if (task_slider_control_get()->sub_140618C40(36))
|
||||
v78.released[11] = true;
|
||||
else
|
||||
v78.released[11] = false;
|
||||
|
||||
if (task_slider_control_get()->sub_140618C20(36))
|
||||
v78.down[11] = true;
|
||||
else
|
||||
v78.down[11] = false;
|
||||
|
||||
if (task_slider_control_get()->sub_140618C60(37))
|
||||
v78.tapped[12] = true;
|
||||
else
|
||||
v78.tapped[12] = false;
|
||||
|
||||
if (task_slider_control_get()->sub_140618C40(37))
|
||||
v78.released[12] = true;
|
||||
else
|
||||
v78.released[12] = false;
|
||||
|
||||
if (task_slider_control_get()->sub_140618C20(37))
|
||||
v78.down[12] = true;
|
||||
else
|
||||
v78.down[12] = false;*/
|
||||
|
||||
Tapped |= v78.tapped;
|
||||
Released |= v78.released;
|
||||
Down |= v78.down;
|
||||
|
||||
Released &= ~Down;
|
||||
|
||||
if (!Down[11] && !Down[12]) {
|
||||
if (Tapped[2])
|
||||
Tapped[110] = true;
|
||||
if (Tapped[7])
|
||||
Tapped[110] = true;
|
||||
if (Tapped[8])
|
||||
Tapped[110] = true;
|
||||
if (Tapped[9])
|
||||
Tapped[110] = true;
|
||||
if (Tapped[10])
|
||||
Tapped[110] = true;
|
||||
|
||||
if (Released[2])
|
||||
Released[110] = true;
|
||||
if (Released[7])
|
||||
Released[110] = true;
|
||||
if (Released[8])
|
||||
Released[110] = true;
|
||||
if (Released[9])
|
||||
Released[110] = true;
|
||||
if (Released[10])
|
||||
Released[110] = true;
|
||||
|
||||
if (Down[2])
|
||||
Down[110] = true;
|
||||
if (Down[7])
|
||||
Down[110] = true;
|
||||
if (Down[8])
|
||||
Down[110] = true;
|
||||
if (Down[9])
|
||||
Down[110] = true;
|
||||
if (Down[10])
|
||||
Down[110] = true;
|
||||
}
|
||||
|
||||
field_70 ^= Down;
|
||||
|
||||
ButtonState Down = this->Down;
|
||||
ButtonState Up = ~this->Down;
|
||||
|
||||
ButtonState DoubleTapped;
|
||||
for (int32_t i = 0; i < INPUT_BUTTON_COUNT; i++)
|
||||
if (DoubleTapData[i].Ctrl(delta_frame, Down[i], Up[i]))
|
||||
DoubleTapped[i] = true;
|
||||
else
|
||||
DoubleTapped[i] = false;
|
||||
this->DoubleTapped = DoubleTapped;
|
||||
|
||||
ButtonState Hold;
|
||||
for (int32_t i = 0; i < INPUT_BUTTON_COUNT; i++)
|
||||
if (HoldTapData[i].Ctrl(delta_frame, Down[i], Up[i]))
|
||||
Hold[i] = true;
|
||||
else
|
||||
Hold[i] = false;
|
||||
this->Hold = Hold;
|
||||
|
||||
ButtonState IntervalTapped;
|
||||
for (int32_t i = 0; i < INPUT_BUTTON_COUNT; i++)
|
||||
if (IntervalTapData[i].Ctrl(delta_frame, Down[i]))
|
||||
IntervalTapped[i] = true;
|
||||
else
|
||||
IntervalTapped[i] = false;
|
||||
this->IntervalTapped = IntervalTapped;
|
||||
}
|
||||
|
||||
int32_t InputState::sub_14018CCC0(int32_t index) {
|
||||
if (index >= 0 && index < 18)
|
||||
return field_80[index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void input_state_init() {
|
||||
if (!input_state)
|
||||
input_state = new InputState[2];
|
||||
}
|
||||
|
||||
void input_state_ctrl() {
|
||||
if (input_state)
|
||||
input_state_ctrl(input_state);
|
||||
}
|
||||
|
||||
InputState* input_state_get(int32_t index) {
|
||||
if (input_state && index >= 0 && index < 2)
|
||||
return &input_state[index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void input_state_free() {
|
||||
if (input_state) {
|
||||
delete[] input_state;
|
||||
input_state = 0;
|
||||
}
|
||||
}
|
||||
|
||||
struc_794::struc_794() : field_30(), field_78(), field_80() {
|
||||
Reset();
|
||||
}
|
||||
|
||||
struc_794::~struc_794() {
|
||||
|
||||
}
|
||||
|
||||
void struc_794::Reset() {
|
||||
tapped.reset();
|
||||
released.reset();
|
||||
down.reset();
|
||||
|
||||
field_78 = 0;
|
||||
memset(field_30, 0, sizeof(field_30));
|
||||
field_30[2] = 0x80000000;
|
||||
field_30[3] = 0x80000000;
|
||||
field_80 = 0;
|
||||
}
|
||||
|
||||
static void input_state_ctrl(InputState* input_state) {
|
||||
int32_t delta_frame = input_state_get_delta_frame();
|
||||
for (int32_t i = 0; i < 2; i++)
|
||||
input_state[i].Update(i, delta_frame);
|
||||
}
|
||||
|
||||
static int32_t input_state_get_delta_frame() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Own stuff
|
||||
static bool sub_140190A30(struc_794* a1, int32_t index) {
|
||||
if (!a1 || index < 0 || index >= 2)
|
||||
return false;
|
||||
|
||||
struct key_map {
|
||||
int32_t index;
|
||||
int32_t keys[3];
|
||||
|
||||
inline key_map() : index(), keys() {
|
||||
for (int32_t& i : keys)
|
||||
i = -1;
|
||||
}
|
||||
|
||||
inline key_map(int32_t index, int32_t key) : key_map() {
|
||||
this->index = index;
|
||||
this->keys[0] = key;
|
||||
}
|
||||
|
||||
inline key_map(int32_t index, int32_t key1, int32_t key2) : key_map() {
|
||||
this->index = index;
|
||||
this->keys[0] = key1;
|
||||
this->keys[1] = key2;
|
||||
}
|
||||
|
||||
inline key_map(int32_t index, int32_t key1, int32_t key2, int32_t key3) : key_map() {
|
||||
this->index = index;
|
||||
this->keys[0] = key1;
|
||||
this->keys[1] = key2;
|
||||
this->keys[2] = key3;
|
||||
}
|
||||
};
|
||||
|
||||
static const key_map key_map_array[] = {
|
||||
{ 0, GLFW_KEY_F1, /*JVS_TEST,*/ },
|
||||
{ 1, GLFW_KEY_F2, /*JVS_SERVICE,*/ },
|
||||
|
||||
{ 2, GLFW_KEY_ENTER, /*JVS_START,*/ },
|
||||
{ 7, GLFW_KEY_W, GLFW_KEY_I, /*JVS_TRIANGLE,*/ },
|
||||
{ 8, GLFW_KEY_A, GLFW_KEY_J, /*JVS_SQUARE,*/ },
|
||||
{ 9, GLFW_KEY_S, GLFW_KEY_K, /*JVS_CROSS,*/ },
|
||||
{ 10, GLFW_KEY_D, GLFW_KEY_L, /*JVS_CIRCLE,*/ },
|
||||
{ 11, GLFW_KEY_Q, GLFW_KEY_U, /*JVS_L,*/ },
|
||||
{ 12, GLFW_KEY_E, GLFW_KEY_O, /*JVS_R,*/ },
|
||||
|
||||
{ 18, GLFW_KEY_F11, /*JVS_SW1,*/ },
|
||||
{ 19, GLFW_KEY_F12, /*JVS_SW2,*/ },
|
||||
{ 20, GLFW_KEY_C, /*JVS_COIN,*/ },
|
||||
|
||||
{ 29, GLFW_KEY_SPACE, },
|
||||
|
||||
{ 39, GLFW_KEY_A, },
|
||||
{ 40, GLFW_KEY_B, },
|
||||
{ 41, GLFW_KEY_C, },
|
||||
{ 42, GLFW_KEY_D, },
|
||||
{ 43, GLFW_KEY_E, },
|
||||
{ 44, GLFW_KEY_F, },
|
||||
{ 45, GLFW_KEY_G, },
|
||||
{ 46, GLFW_KEY_H, },
|
||||
{ 47, GLFW_KEY_I, },
|
||||
{ 48, GLFW_KEY_J, },
|
||||
{ 49, GLFW_KEY_K, },
|
||||
{ 50, GLFW_KEY_L, },
|
||||
{ 51, GLFW_KEY_M, },
|
||||
{ 52, GLFW_KEY_N, },
|
||||
{ 53, GLFW_KEY_O, },
|
||||
{ 54, GLFW_KEY_P, },
|
||||
{ 55, GLFW_KEY_Q, },
|
||||
{ 56, GLFW_KEY_R, },
|
||||
{ 57, GLFW_KEY_S, },
|
||||
{ 58, GLFW_KEY_T, },
|
||||
{ 59, GLFW_KEY_U, },
|
||||
{ 60, GLFW_KEY_V, },
|
||||
{ 61, GLFW_KEY_W, },
|
||||
{ 62, GLFW_KEY_X, },
|
||||
{ 63, GLFW_KEY_Y, },
|
||||
{ 64, GLFW_KEY_Z, },
|
||||
|
||||
{ 80, GLFW_KEY_ENTER, },
|
||||
{ 81, GLFW_KEY_LEFT_SHIFT, GLFW_KEY_RIGHT_SHIFT, },
|
||||
{ 82, GLFW_KEY_LEFT_CONTROL, GLFW_KEY_LEFT_CONTROL, },
|
||||
{ 83, GLFW_KEY_RIGHT_ALT, GLFW_KEY_RIGHT_ALT, },
|
||||
|
||||
{ 91, GLFW_KEY_UP, },
|
||||
{ 92, GLFW_KEY_LEFT, },
|
||||
{ 93, GLFW_KEY_DOWN, },
|
||||
{ 94, GLFW_KEY_RIGHT, },
|
||||
};
|
||||
|
||||
static const key_map mouse_button_array[] = {
|
||||
{ 96, GLFW_MOUSE_BUTTON_LEFT, },
|
||||
{ 97, GLFW_MOUSE_BUTTON_MIDDLE, },
|
||||
{ 98, GLFW_MOUSE_BUTTON_RIGHT, },
|
||||
};
|
||||
|
||||
for (const key_map& i : key_map_array) {
|
||||
bool tapped = false;
|
||||
bool released = false;
|
||||
bool down = false;
|
||||
|
||||
for (const int32_t& j : i.keys) {
|
||||
if (j == -1)
|
||||
break;
|
||||
|
||||
if (!tapped)
|
||||
if (Input::IsKeyTapped(j, -1))
|
||||
tapped = true;
|
||||
|
||||
if (!released)
|
||||
if (Input::IsKeyReleased(j, -1))
|
||||
released = true;
|
||||
|
||||
if (!down)
|
||||
if (Input::IsKeyDown(j, -1))
|
||||
down = true;
|
||||
}
|
||||
|
||||
a1->tapped[i.index] = tapped;
|
||||
a1->released[i.index] = released;
|
||||
a1->down[i.index] = down;
|
||||
}
|
||||
|
||||
for (const key_map& i : mouse_button_array) {
|
||||
bool tapped = false;
|
||||
bool released = false;
|
||||
bool down = false;
|
||||
|
||||
for (const int32_t& j : i.keys) {
|
||||
if (j == -1)
|
||||
break;
|
||||
|
||||
if (!tapped)
|
||||
if (Input::IsMouseButtonTapped(j))
|
||||
tapped = true;
|
||||
|
||||
if (!released)
|
||||
if (Input::IsMouseButtonReleased(j))
|
||||
released = true;
|
||||
|
||||
if (!down)
|
||||
if (Input::IsMouseButtonDown(j))
|
||||
down = true;
|
||||
}
|
||||
|
||||
a1->tapped[i.index] = tapped;
|
||||
a1->released[i.index] = released;
|
||||
a1->down[i.index] = down;
|
||||
}
|
||||
|
||||
int32_t x_offset = rctx_ptr->post_process.screen_x_offset;
|
||||
int32_t y_offset = rctx_ptr->post_process.screen_y_offset;
|
||||
float_t x_scale = 1280.0f / (float_t)rctx_ptr->post_process.sprite_width;
|
||||
float_t y_scale = 720.0f / (float_t)rctx_ptr->post_process.sprite_height;
|
||||
|
||||
a1->field_30[8] = (int32_t)((float_t)(Input::pos.x - x_offset) * x_scale);
|
||||
a1->field_30[9] = (int32_t)((float_t)(Input::pos.y - y_offset) * y_scale);
|
||||
a1->field_30[10] = (int32_t)((float_t)(Input::pos_prev.x - Input::pos.x - x_offset) * x_scale);
|
||||
a1->field_30[11] = (int32_t)((float_t)(Input::pos_prev.y - Input::pos.y - y_offset) * y_scale);
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include <bitset>
|
||||
|
||||
#define INPUT_BUTTON_COUNT 111
|
||||
|
||||
typedef std::bitset<INPUT_BUTTON_COUNT> ButtonState;
|
||||
|
||||
struct InputState {
|
||||
struct DoubleTap {
|
||||
int32_t hold_frame;
|
||||
int32_t frame;
|
||||
int32_t state;
|
||||
|
||||
DoubleTap();
|
||||
|
||||
bool Ctrl(int32_t delta_frame, bool down, bool up);
|
||||
void Set(int32_t hold_frame);
|
||||
};
|
||||
|
||||
struct HoldTap {
|
||||
int32_t hold_frame;
|
||||
int32_t frame;
|
||||
|
||||
HoldTap();
|
||||
|
||||
bool Ctrl(int32_t delta_frame, bool down, bool up);
|
||||
void Set(int32_t hold_frame);
|
||||
};
|
||||
|
||||
struct IntervalTap {
|
||||
int32_t hold_frame;
|
||||
int32_t cycle_frame;
|
||||
int32_t frame;
|
||||
int32_t state;
|
||||
|
||||
IntervalTap();
|
||||
|
||||
bool Ctrl(int32_t delta_frame, bool down);
|
||||
void Set(int32_t hold_frame, int32_t cycle_frame);
|
||||
};
|
||||
|
||||
ButtonState Tapped;
|
||||
ButtonState Released;
|
||||
ButtonState Down;
|
||||
ButtonState DownPrev;
|
||||
ButtonState DoubleTapped;
|
||||
ButtonState Hold;
|
||||
ButtonState IntervalTapped;
|
||||
ButtonState field_70;
|
||||
int32_t field_80[18];
|
||||
std::bitset<22> field_C8;
|
||||
bool updated;
|
||||
bool field_D1;
|
||||
bool field_D2;
|
||||
bool key;
|
||||
DoubleTap DoubleTapData[INPUT_BUTTON_COUNT];
|
||||
HoldTap HoldTapData[INPUT_BUTTON_COUNT];
|
||||
IntervalTap IntervalTapData[INPUT_BUTTON_COUNT];
|
||||
|
||||
InputState();
|
||||
~InputState();
|
||||
|
||||
bool CheckDown(int32_t index);
|
||||
bool CheckDoubleTapped(int32_t index);
|
||||
bool CheckHold(int32_t index);
|
||||
bool CheckIntervalTapped(int32_t index);
|
||||
bool CheckReleased(int32_t index);
|
||||
bool CheckTapped(int32_t index);
|
||||
void Ctrl();
|
||||
bool GetKey();
|
||||
void Update(int32_t index, int32_t delta_frame);
|
||||
|
||||
int32_t sub_14018CCC0(int32_t index);
|
||||
};
|
||||
|
||||
extern void input_state_init();
|
||||
extern void input_state_ctrl();
|
||||
extern InputState* input_state_get(int32_t index);
|
||||
extern void input_state_free();
|
||||
+30
-29
@@ -213,15 +213,15 @@ void PrintWork::DrawTextMesh(app::text_flags flags, sprite_text_mesh& mesh) {
|
||||
|
||||
void PrintWork::FillRectangle(rectangle rect) {
|
||||
if (clip) {
|
||||
float_t v8a;
|
||||
PrintWork::sub_140196110(rect.pos.x, rect.pos.x + rect.size.y,
|
||||
clip_data.pos.x, clip_data.pos.x + clip_data.size.x, rect.pos.x, v8a);
|
||||
rect.size.x = v8a - rect.pos.x;
|
||||
float_t clip_max_pos_x;
|
||||
PrintWork::ClampPosToClipBox(rect.pos.x, rect.pos.x + rect.size.x,
|
||||
clip_data.pos.x, clip_data.pos.x + clip_data.size.x, rect.pos.x, clip_max_pos_x);
|
||||
rect.size.x = clip_max_pos_x - rect.pos.x;
|
||||
|
||||
float_t v8b;
|
||||
PrintWork::sub_140196110(rect.pos.y, rect.pos.y + rect.size.y,
|
||||
clip_data.pos.y, clip_data.pos.y + clip_data.size.y, rect.pos.y, v8b);
|
||||
rect.size.y = v8b - rect.pos.y;
|
||||
float_t clip_max_pos_y;
|
||||
PrintWork::ClampPosToClipBox(rect.pos.y, rect.pos.y + rect.size.y,
|
||||
clip_data.pos.y, clip_data.pos.y + clip_data.size.y, rect.pos.y, clip_max_pos_y);
|
||||
rect.size.y = clip_max_pos_y - rect.pos.y;
|
||||
}
|
||||
|
||||
spr::put_sprite_rect(rect, resolution_mode, prio, fill_color, layer);
|
||||
@@ -459,17 +459,18 @@ void PrintWork::vwprintf(app::text_flags flags, const wchar_t* fmt, va_list args
|
||||
PrintText(flags, buf, buf + vswprintf_s(buf, sizeof(buf) / sizeof(wchar_t), fmt, args));
|
||||
}
|
||||
|
||||
void PrintWork::sub_140196110(float_t a1, float_t a2, float_t a3, float_t a4, float_t& a5, float_t& a6) {
|
||||
float_t v8 = max_def(a1, a3);
|
||||
float_t v10 = max_def(a2, a4);
|
||||
void PrintWork::ClampPosToClipBox(float_t pos_min, float_t pos_max,
|
||||
float_t clip_box_min, float_t clip_box_max, float_t& clip_pos_min, float_t& clip_pos_max) {
|
||||
float_t v8 = max_def(pos_min, clip_box_min);
|
||||
float_t v10 = min_def(pos_max, clip_box_max);
|
||||
|
||||
if (v8 >= v10) {
|
||||
a5 = a1;
|
||||
a6 = a1;
|
||||
if (v8 < v10) {
|
||||
clip_pos_min = v8;
|
||||
clip_pos_max = v10;
|
||||
}
|
||||
else {
|
||||
a5 = v8;
|
||||
a6 = v10;
|
||||
clip_pos_min = pos_min;
|
||||
clip_pos_max = pos_min;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -509,25 +510,25 @@ int32_t PrintWork::sub_140197D60(rectangle clip_box, rectangle& pos, rectangle&
|
||||
vec2 uv_pos = uv.pos;
|
||||
vec2 uv_size = uv.size;
|
||||
|
||||
vec2 v29;
|
||||
vec2 v25;
|
||||
PrintWork::sub_140196110(pos_pos.x, pos_pos.x + pos_size.x,
|
||||
clip_box.pos.x, clip_box.pos.x + clip_box.size.x, v25.x, v29.x);
|
||||
PrintWork::sub_140196110(pos_pos.y, pos_pos.y + pos_size.y,
|
||||
clip_box.pos.y, clip_box.pos.y + clip_box.size.y, v25.y, v29.y);
|
||||
vec2 clip_max_pos;
|
||||
vec2 clip_min_pos;
|
||||
PrintWork::ClampPosToClipBox(pos_pos.x, pos_pos.x + pos_size.x,
|
||||
clip_box.pos.x, clip_box.pos.x + clip_box.size.x, clip_min_pos.x, clip_max_pos.x);
|
||||
PrintWork::ClampPosToClipBox(pos_pos.y, pos_pos.y + pos_size.y,
|
||||
clip_box.pos.y, clip_box.pos.y + clip_box.size.y, clip_min_pos.y, clip_max_pos.y);
|
||||
|
||||
vec2 v27 = v29 - v25;
|
||||
vec2 clip_size = clip_max_pos - clip_min_pos;
|
||||
|
||||
if (v27.x == pos_size.x && v27.y == pos_size.y)
|
||||
if (clip_size.x == pos_size.x && clip_size.y == pos_size.y)
|
||||
return 2;
|
||||
else if (v27.x <= 0.0f || v27.y <= 0.0f)
|
||||
else if (clip_size.x <= 0.0f || clip_size.y <= 0.0f)
|
||||
return 0;
|
||||
|
||||
vec2 uv_scale = uv_size / pos_size;
|
||||
pos.pos = v25;
|
||||
pos.size = v27;
|
||||
uv.pos = (v25 - pos_pos) * uv_scale + uv_pos;
|
||||
uv.size = v27 * uv_scale;
|
||||
pos.pos = clip_min_pos;
|
||||
pos.size = clip_size;
|
||||
uv.pos = (clip_min_pos - pos_pos) * uv_scale + uv_pos;
|
||||
uv.size = clip_size * uv_scale;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,10 @@ public:
|
||||
void vprintf(app::text_flags flags, const char* fmt, va_list args);
|
||||
void vwprintf(app::text_flags flags, const wchar_t* fmt, va_list args);
|
||||
|
||||
static void sub_140196110(float_t a1, float_t a2, float_t a3, float_t a4, float_t& a5, float_t& a6);
|
||||
static void ClampPosToClipBox(float_t pos_min, float_t pos_max,
|
||||
float_t clip_box_min, float_t clip_box_max, float_t& clip_pos_min, float_t& clip_pos_max);
|
||||
|
||||
vec2 sub_140197B80(app::text_flags flags, vec2 size);
|
||||
|
||||
static int32_t sub_140197D60(rectangle clip_box, rectangle& pos, rectangle& uv);
|
||||
};
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "font_info.hpp"
|
||||
#include "imgui_helper.hpp"
|
||||
#include "input.hpp"
|
||||
#include "input_state.hpp"
|
||||
#include "task_window.hpp"
|
||||
#include "x_pv_game.hpp"
|
||||
#include <glad/glad.h>
|
||||
@@ -553,6 +554,7 @@ static render_context* render_context_load() {
|
||||
|
||||
skin_param_data_load();
|
||||
|
||||
input_state_init();
|
||||
fontmap_data_init();
|
||||
font_info_default_init();
|
||||
sound_init();
|
||||
@@ -1063,12 +1065,14 @@ static void render_context_ctrl(render_context* rctx) {
|
||||
classes_process_ctrl(classes, classes_count);
|
||||
|
||||
rctx_ptr = rctx;
|
||||
input_state_ctrl();
|
||||
game_state_ctrl();
|
||||
rctx->ctrl();
|
||||
|
||||
if (fast_loader_speed > 1 && game_state_get_game_state() == GAME_STATE_STARTUP)
|
||||
for (int32_t i = 1; i < fast_loader_speed; i++) {
|
||||
rctx_ptr = rctx;
|
||||
input_state_ctrl();
|
||||
game_state_ctrl();
|
||||
rctx->ctrl();
|
||||
}
|
||||
@@ -1242,6 +1246,7 @@ static void render_context_dispose(render_context* rctx) {
|
||||
sound_free();
|
||||
font_info_default_free();
|
||||
fontmap_data_free();
|
||||
input_state_free();
|
||||
|
||||
skin_param_data_free();
|
||||
mothead_storage_free();
|
||||
|
||||
Reference in New Issue
Block a user