Added RobOsageTest
This commit is contained in:
@@ -135,8 +135,11 @@ del "$(SolutionDir)bin\$(TargetName).lib"</Command>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="auth_2d.cpp" />
|
||||
<ClCompile Include="bone_database.cpp" />
|
||||
<ClCompile Include="canonical_properties.cpp" />
|
||||
<ClCompile Include="clear_color.cpp" />
|
||||
<ClCompile Include="data_test\rob_osage_test.cpp" />
|
||||
<ClCompile Include="dw.cpp" />
|
||||
<ClCompile Include="Glitter\animation.cpp" />
|
||||
<ClCompile Include="Glitter\counter.cpp" />
|
||||
<ClCompile Include="Glitter\curve.cpp" />
|
||||
@@ -207,8 +210,11 @@ del "$(SolutionDir)bin\$(TargetName).lib"</Command>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="auth_2d.hpp" />
|
||||
<ClInclude Include="bone_database.hpp" />
|
||||
<ClInclude Include="canonical_properties.hpp" />
|
||||
<ClInclude Include="clear_color.hpp" />
|
||||
<ClInclude Include="data_test\rob_osage_test.hpp" />
|
||||
<ClInclude Include="dw.hpp" />
|
||||
<ClInclude Include="Glitter\glitter.hpp" />
|
||||
<ClInclude Include="auth_3d.hpp" />
|
||||
<ClInclude Include="camera.hpp" />
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#include "bone_database.hpp"
|
||||
|
||||
bone_database_skeleton* (FASTCALL* bone_database_get_skeleton_by_type)(bone_database_skeleton_type type)
|
||||
= (bone_database_skeleton * (FASTCALL*)(bone_database_skeleton_type type))0x00000001401F10C0;
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include "../KKdLib/vec.hpp"
|
||||
|
||||
|
||||
enum bone_database_skeleton_type : int32_t {
|
||||
BONE_DATABASE_SKELETON_COMMON = 0,
|
||||
BONE_DATABASE_SKELETON_MIKU = 1,
|
||||
BONE_DATABASE_SKELETON_KAITO = 2,
|
||||
BONE_DATABASE_SKELETON_LEN = 3,
|
||||
BONE_DATABASE_SKELETON_LUKA = 4,
|
||||
BONE_DATABASE_SKELETON_MEIKO = 5,
|
||||
BONE_DATABASE_SKELETON_RIN = 6,
|
||||
BONE_DATABASE_SKELETON_HAKU = 7,
|
||||
BONE_DATABASE_SKELETON_NERU = 8,
|
||||
BONE_DATABASE_SKELETON_SAKINE = 9,
|
||||
BONE_DATABASE_SKELETON_TETO = 10,
|
||||
BONE_DATABASE_SKELETON_NONE = -1,
|
||||
};
|
||||
|
||||
enum bone_database_bone_type : uint8_t {
|
||||
BONE_DATABASE_BONE_ROTATION = 0x00,
|
||||
BONE_DATABASE_BONE_TYPE_1 = 0x01,
|
||||
BONE_DATABASE_BONE_POSITION = 0x02,
|
||||
BONE_DATABASE_BONE_POSITION_ROTATION = 0x03,
|
||||
BONE_DATABASE_BONE_HEAD_IK_ROTATION = 0x04,
|
||||
BONE_DATABASE_BONE_ARM_IK_ROTATION = 0x05,
|
||||
BONE_DATABASE_BONE_LEGS_IK_ROTATION = 0x06,
|
||||
};
|
||||
|
||||
struct bone_database_bone {
|
||||
bone_database_bone_type type;
|
||||
bool has_parent;
|
||||
uint8_t parent;
|
||||
uint8_t pole_target;
|
||||
uint8_t mirror;
|
||||
uint8_t flags;
|
||||
const char* name;
|
||||
};
|
||||
|
||||
static_assert(sizeof(bone_database_bone) == 0x10, "\"bone_database_skeleton\" struct should have a size of 0x10");
|
||||
|
||||
struct bone_database_skeleton {
|
||||
bone_database_bone* bones;
|
||||
uint32_t posittion_count;
|
||||
vec3* positions;
|
||||
float_t* heel_height;
|
||||
uint32_t object_bone_name_count;
|
||||
const char** object_bone_names;
|
||||
uint32_t motion_bone_name_count;
|
||||
const char** motion_bone_names;
|
||||
uint16_t* parent_indices;
|
||||
int32_t field_48;
|
||||
int32_t field_4C;
|
||||
int32_t field_50;
|
||||
int32_t field_54;
|
||||
int32_t field_58;
|
||||
int32_t field_5C;
|
||||
};
|
||||
|
||||
static_assert(sizeof(bone_database_skeleton) == 0x60, "\"bone_database_skeleton\" struct should have a size of 0x60");
|
||||
|
||||
extern bone_database_skeleton* (FASTCALL* bone_database_get_skeleton_by_type)(bone_database_skeleton_type type);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../../KKdLib/prj/vector_pair.hpp"
|
||||
#include "../rob/rob.hpp"
|
||||
#include "../task.hpp"
|
||||
#include "../types.hpp"
|
||||
|
||||
class RobOsageTest : public app::Task {
|
||||
public:
|
||||
struct Node {
|
||||
struct Hinge {
|
||||
float_t ymin;
|
||||
float_t ymax;
|
||||
float_t zmin;
|
||||
float_t zmax;
|
||||
|
||||
inline Hinge() {
|
||||
ymin = -90.0f;
|
||||
ymax = 90.0f;
|
||||
zmin = -90.0f;
|
||||
zmax = 90.0f;
|
||||
}
|
||||
};
|
||||
|
||||
float_t coli_r;
|
||||
float_t weight;
|
||||
float_t inertial_cancel;
|
||||
Hinge hinge;
|
||||
|
||||
inline Node() {
|
||||
coli_r = 0.0f;
|
||||
weight = 1.0f;
|
||||
inertial_cancel = 0.0f;
|
||||
}
|
||||
};
|
||||
|
||||
struct Root {
|
||||
float_t force;
|
||||
float_t gain;
|
||||
float_t air_res;
|
||||
float_t root_y_rot;
|
||||
float_t root_z_rot;
|
||||
float_t fric;
|
||||
float_t wind_afc;
|
||||
SkinParam::RootCollisionType coli_type;
|
||||
float_t init_y_rot;
|
||||
float_t init_z_rot;
|
||||
|
||||
inline Root() {
|
||||
force = 0.0f;
|
||||
gain = 0.0f;
|
||||
air_res = 0.5f;
|
||||
root_y_rot = 0.0f;
|
||||
root_z_rot = 0.0f;
|
||||
fric = 1.0f;
|
||||
wind_afc = 0.5f;
|
||||
coli_type = SkinParam::RootCollisionTypeEnd;
|
||||
init_y_rot = 0.0f;
|
||||
init_z_rot = 0.0f;
|
||||
}
|
||||
};
|
||||
|
||||
bool load;
|
||||
bool save;
|
||||
bool coli;
|
||||
bool line;
|
||||
|
||||
int32_t chara_id;
|
||||
int32_t load_chara_id;
|
||||
::item_id item_id;
|
||||
object_info obj_info;
|
||||
size_t osage_index;
|
||||
size_t collision_index;
|
||||
|
||||
prj::vector_pair_alloc<::item_id, object_info> objects;
|
||||
prj::vector_pair_alloc<ExOsageBlock*, prj::vector<skin_param_osage_root_boc>> bocs;
|
||||
prj::vector_pair_alloc<ExOsageBlock*, prj::vector<skin_param_osage_node>> nodes;
|
||||
prj::vector_pair_alloc<ExOsageBlock*, prj::vector<skin_param_osage_root_normal_ref>> normal_refs;
|
||||
|
||||
Root root;
|
||||
Node node;
|
||||
|
||||
Root root_temp;
|
||||
Node node_temp;
|
||||
prj::vector<SkinParam::CollisionParam> cls_list_temp;
|
||||
SkinParam::CollisionParam cls_param_temp;
|
||||
|
||||
bool collision_update;
|
||||
|
||||
RobOsageTest();
|
||||
virtual ~RobOsageTest() override;
|
||||
|
||||
virtual bool init() override;
|
||||
virtual bool ctrl() override;
|
||||
virtual bool dest() override;
|
||||
virtual void disp() override;
|
||||
virtual void basic() override;
|
||||
|
||||
void disp_coli();
|
||||
void disp_line();
|
||||
|
||||
ExClothBlock* get_cloth_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
rob_chara_item_equip_object* get_item_equip_object() const;
|
||||
ExOsageBlock* get_osage_block(rob_chara_item_equip_object* itm_eq_obj) const;
|
||||
prj::vector<SkinParam::CollisionParam>* get_cls_list(ExClothBlock* cls) const;
|
||||
prj::vector<SkinParam::CollisionParam>* get_cls_list(ExOsageBlock* osg) const;
|
||||
SkinParam::CollisionParam* get_cls_param(prj::vector<SkinParam::CollisionParam>* cls_list) const;
|
||||
void set_root(skin_param* skp);
|
||||
|
||||
inline prj::vector<SkinParam::CollisionParam>* get_cls_list() const {
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
ExOsageBlock* osg = get_osage_block(itm_eq_obj);
|
||||
return osg ? get_cls_list(osg) : get_cls_list(get_cloth_block(itm_eq_obj));
|
||||
}
|
||||
|
||||
inline SkinParam::CollisionParam* get_cls_param() const {
|
||||
return get_cls_param(get_cls_list());
|
||||
}
|
||||
|
||||
inline skin_param* get_skin_param() const {
|
||||
rob_chara_item_equip_object* itm_eq_obj = get_item_equip_object();
|
||||
ExOsageBlock* osg = get_osage_block(itm_eq_obj);
|
||||
if (osg)
|
||||
return osg->rob.skin_param_ptr;
|
||||
else {
|
||||
ExClothBlock* cls = get_cloth_block(itm_eq_obj);
|
||||
if (cls)
|
||||
return cls->rob.skin_param_ptr;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline void set_root() {
|
||||
return set_root(get_skin_param());
|
||||
}
|
||||
};
|
||||
|
||||
extern RobOsageTest* rob_osage_test;
|
||||
|
||||
extern void rob_osage_test_init();
|
||||
extern void rob_osage_test_free();
|
||||
+3168
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,922 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include "../KKdLib/rectangle.hpp"
|
||||
#include "../KKdLib/vec.hpp"
|
||||
#include "color.hpp"
|
||||
#include "print_work.hpp"
|
||||
#include <vector>
|
||||
|
||||
namespace dw {
|
||||
enum Flags {
|
||||
FLAG_1 = 0x0000001,
|
||||
FLAG_2 = 0x0000002,
|
||||
MULTISELECT = 0x0000004,
|
||||
FLAG_8 = 0x0000008,
|
||||
RADIOBUTTON = 0x0000010,
|
||||
CHECKBOX = 0x0000020,
|
||||
CLOSE_BUTTON = 0x0000040,
|
||||
FLAG_80 = 0x0000080,
|
||||
HORIZONTAL = 0x0000100,
|
||||
VERTICAL = 0x0000200,
|
||||
FLAG_400 = 0x0000400,
|
||||
FLAG_800 = 0x0000800,
|
||||
FLAG_1000 = 0x0001000,
|
||||
FLAG_2000 = 0x0002000,
|
||||
FLAG_4000 = 0x0004000,
|
||||
FLAG_8000 = 0x0008000,
|
||||
FLAG_10000 = 0x0010000,
|
||||
FLAG_20000 = 0x0020000,
|
||||
FLAG_40000 = 0x0040000,
|
||||
FLAG_80000 = 0x0080000,
|
||||
FLAG_100000 = 0x0100000,
|
||||
FLAG_200000 = 0x0200000,
|
||||
FLAG_400000 = 0x0400000,
|
||||
FLAG_800000 = 0x0800000,
|
||||
FLAG_1000000 = 0x1000000,
|
||||
};
|
||||
|
||||
struct Font {
|
||||
font_info font;
|
||||
prj::string name;
|
||||
bool half_width;
|
||||
|
||||
Font(int32_t font_handler_index, prj::string& name);
|
||||
Font(int32_t font_handler_index, prj::string& name, bool half_width);
|
||||
|
||||
inline Font(int32_t font_handler_index, prj::string&& name)
|
||||
: Font(font_handler_index, name) {
|
||||
|
||||
}
|
||||
|
||||
inline Font(int32_t font_handler_index, prj::string&& name, bool half_width)
|
||||
: Font(font_handler_index, name, half_width) {
|
||||
|
||||
}
|
||||
|
||||
~Font();
|
||||
|
||||
float_t GetFontGlyphHeight();
|
||||
vec2 GetFontGlyphSize();
|
||||
float_t GetFontGlyphWidth();
|
||||
prj::string GetName();
|
||||
void SetGlyphSize(float_t glyph_width, float_t glyph_height);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Font) == 0x68, "\"dw::Font\" struct should have a size of 0x68");
|
||||
|
||||
struct p_Font {
|
||||
Font* ptr;
|
||||
|
||||
p_Font();
|
||||
|
||||
inline p_Font(Font* ptr) {
|
||||
this->ptr = ptr;
|
||||
}
|
||||
|
||||
~p_Font();
|
||||
|
||||
float_t GetFontGlyphHeight();
|
||||
vec2 GetFontGlyphSize();
|
||||
float_t GetFontGlyphWidth();
|
||||
prj::string GetName();
|
||||
void SetGlyphSize(float_t glyph_width, float_t glyph_height);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::p_Font) == 0x08, "\"dw::p_Font\" struct should have a size of 0x08");
|
||||
|
||||
class Widget;
|
||||
|
||||
class SelectionListener {
|
||||
public:
|
||||
struct CallbackData {
|
||||
int64_t field_0;
|
||||
int32_t field_8;
|
||||
int8_t field_C;
|
||||
vec2 mouse_pos;
|
||||
int32_t field_18;
|
||||
Widget* widget;
|
||||
|
||||
inline CallbackData() : field_0(), field_8(), field_C(), field_18(), widget() {
|
||||
field_8 = -1;
|
||||
}
|
||||
|
||||
inline CallbackData(Widget* widget) : field_0(), field_8(), field_C(), field_18() {
|
||||
this->widget = widget;
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::SelectionListener::CallbackData) == 0x28, "\"dw::SelectionListener::CallbackData\" struct should have a size of 0x28");
|
||||
|
||||
typedef void(*CallbackFunc)(SelectionListener::CallbackData* data);
|
||||
|
||||
SelectionListener();
|
||||
virtual ~SelectionListener();
|
||||
|
||||
virtual void Callback(CallbackData* data) = 0;
|
||||
virtual void Field_10(CallbackData* data) = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::SelectionListener) == 0x08, "\"dw::SelectionListener\" struct should have a size of 0x08");
|
||||
|
||||
class SelectionAdapter : public SelectionListener {
|
||||
public:
|
||||
SelectionAdapter();
|
||||
virtual ~SelectionAdapter() override;
|
||||
|
||||
virtual void Callback(SelectionListener::CallbackData* data) override;
|
||||
virtual void Field_10(SelectionListener::CallbackData* data) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::SelectionAdapter) == 0x08, "\"dw::SelectionAdapter\" struct should have a size of 0x08");
|
||||
|
||||
class SelectionListenerOnHook : public SelectionAdapter {
|
||||
public:
|
||||
typedef void(*CallbackFunc)(Widget* widget);
|
||||
|
||||
CallbackFunc callback;
|
||||
|
||||
SelectionListenerOnHook();
|
||||
SelectionListenerOnHook(SelectionListenerOnHook::CallbackFunc callback);
|
||||
virtual ~SelectionListenerOnHook() override;
|
||||
|
||||
virtual void Callback(SelectionListener::CallbackData* data) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::SelectionListenerOnHook) == 0x10, "\"dw::SelectionListenerOnHook\" struct should have a size of 0x10");
|
||||
|
||||
class Widget {
|
||||
public:
|
||||
typedef void(*Callback)(Widget* data);
|
||||
|
||||
struct KeyCallbackData {
|
||||
Widget* widget;
|
||||
int32_t modifier;
|
||||
int8_t field_C;
|
||||
int8_t field_D;
|
||||
int32_t input[2];
|
||||
|
||||
KeyCallbackData();
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Widget::KeyCallbackData) == 0x18, "\"dw::Widget::KeyCallbackData\" struct should have a size of 0x18");
|
||||
|
||||
struct MouseCallbackData {
|
||||
Widget* widget;
|
||||
vec2 pos;
|
||||
int32_t input;
|
||||
int32_t modifier;
|
||||
|
||||
MouseCallbackData();
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Widget::MouseCallbackData) == 0x18, "\"dw::Widget::MouseCallbackData\" struct should have a size of 0x18");
|
||||
|
||||
bool freed;
|
||||
|
||||
union {
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
uint32_t u32;
|
||||
int64_t i64;
|
||||
uint64_t u64;
|
||||
void* v64;
|
||||
} callback_data;
|
||||
|
||||
Callback free_callback;
|
||||
prj::wstring text;
|
||||
rectangle rect;
|
||||
Widget* parent;
|
||||
Flags flags;
|
||||
p_Font font;
|
||||
|
||||
Widget(Widget* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Widget();
|
||||
|
||||
virtual void Draw();
|
||||
virtual void Reset();
|
||||
virtual prj::wstring GetText();
|
||||
virtual void SetText(prj::wstring& str);
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data);
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data);
|
||||
virtual void SetSize(const vec2& value);
|
||||
virtual vec2 GetPos();
|
||||
|
||||
bool CheckHitPos(const vec2& hit_pos);
|
||||
void Free();
|
||||
float_t GetFontGlyphHeight();
|
||||
rectangle GetRectangle();
|
||||
void SetText(prj::string& str);
|
||||
void UpdateDraw();
|
||||
|
||||
inline void SetText(prj::wstring&& str) {
|
||||
SetText(str);
|
||||
}
|
||||
|
||||
inline void SetText(prj::string&& str) {
|
||||
SetText(str);
|
||||
}
|
||||
|
||||
static void sub_1402F3770(Widget* widget);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Widget) == 0x68, "\"dw::Widget\" struct should have a size of 0x68");
|
||||
|
||||
class KeyListener;
|
||||
class MouseListener;
|
||||
class MouseMoveListener;
|
||||
class Composite;
|
||||
class Shell;
|
||||
class Menu;
|
||||
|
||||
class Control : public Widget {
|
||||
public:
|
||||
bool field_68;
|
||||
color4u8 foreground_color;
|
||||
color4u8 background_color;
|
||||
prj::vector<KeyListener*> key_listener;
|
||||
prj::vector<MouseListener*> mouse_listener;
|
||||
prj::vector<MouseMoveListener*> mouse_move_listener;
|
||||
Composite* parent_comp;
|
||||
Shell* parent_shell;
|
||||
Menu* parent_menu;
|
||||
|
||||
Control(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Control() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual void UpdateLayout();
|
||||
virtual vec2 GetSize();
|
||||
virtual bool Field_58();
|
||||
virtual bool Field_60();
|
||||
virtual void SetFont(p_Font& font);
|
||||
virtual p_Font& GetFont();
|
||||
virtual void SetForegroundColor(color4u8 value);
|
||||
virtual void SetBackgroundColor(color4u8 value);
|
||||
virtual color4u8 GetForegroundColor();
|
||||
virtual color4u8 GetBackgroundColor();
|
||||
virtual bool Field_98();
|
||||
virtual bool Field_A0();
|
||||
virtual void Field_A8(bool value);
|
||||
virtual Widget* GetHitWidget(const vec2& hit_pos);
|
||||
|
||||
void SetParentMenu(Menu* menu);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Control) == 0xD8, "\"dw::Control\" struct should have a size of 0xD8");
|
||||
|
||||
class ScrollBar;
|
||||
|
||||
class Scrollable : public Control {
|
||||
public:
|
||||
ScrollBar* h_bar;
|
||||
ScrollBar* v_bar;
|
||||
|
||||
Scrollable(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Scrollable() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& value) override;
|
||||
virtual void SetFont(p_Font& font) override;
|
||||
virtual Widget* GetHitWidget(const vec2& hit_pos) override;
|
||||
|
||||
virtual rectangle GetBoundingBox();
|
||||
|
||||
rectangle GetScrollableRectangle();
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Scrollable) == 0xE8, "\"dw::Scrollable\" struct should have a size of 0xE8");
|
||||
|
||||
class Layout;
|
||||
|
||||
class Composite : public Scrollable {
|
||||
public:
|
||||
size_t current_control;
|
||||
Layout* layout;
|
||||
prj::vector<Control*> controls;
|
||||
|
||||
Composite(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Composite() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& size) override;
|
||||
|
||||
virtual void UpdateLayout() override;
|
||||
virtual vec2 GetSize() override;
|
||||
virtual bool Field_58() override;
|
||||
virtual bool Field_60() override;
|
||||
virtual Widget* GetHitWidget(const vec2& hit_pos) override;
|
||||
|
||||
virtual bool Field_C0();
|
||||
virtual bool SetCurrentControl(Control* control);
|
||||
|
||||
size_t GetControlIndex(Control* control);
|
||||
void SetLayout(Layout* value);
|
||||
|
||||
bool sub_1402F1E60(Control* control);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Composite) == 0x110, "\"dw::Composite\" struct should have a size of 0x110");
|
||||
|
||||
class ShellCloseButton;
|
||||
|
||||
class Shell : public Composite {
|
||||
public:
|
||||
typedef void(*Callback)(Shell* data);
|
||||
|
||||
bool disp;
|
||||
Callback disp_callback;
|
||||
Callback hide_callback;
|
||||
int64_t field_128;
|
||||
bool destroy;
|
||||
ShellCloseButton* close_button;
|
||||
prj::vector<Widget*> children;
|
||||
prj::vector<Menu*> menus;
|
||||
bool field_170;
|
||||
Widget* field_178;
|
||||
|
||||
Shell(Shell* parent = 0, Flags flags
|
||||
= (Flags)(FLAG_400 | FLAG_80 | CLOSE_BUTTON | CHECKBOX | RADIOBUTTON));
|
||||
virtual ~Shell() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& size) override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
virtual bool Field_58() override;
|
||||
virtual Widget* GetHitWidget(const vec2& hit_pos) override;
|
||||
|
||||
virtual rectangle GetBoundingBox() override;
|
||||
|
||||
virtual bool Field_C0() override;
|
||||
virtual bool SetCurrentControl(Control* control) override;
|
||||
|
||||
virtual void Hide();
|
||||
|
||||
void Disp();
|
||||
bool GetDisp();
|
||||
void SetDisp(bool value = false);
|
||||
|
||||
void sub_1402E43C0(Widget* widget);
|
||||
void sub_1402E61F0(Widget* widget);
|
||||
void sub_1402F38B0();
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Shell) == 0x180, "\"dw::Shell\" struct should have a size of 0x180");
|
||||
|
||||
class KeyListener {
|
||||
public:
|
||||
KeyListener();
|
||||
virtual ~KeyListener();
|
||||
|
||||
virtual void Field_8(const Widget::KeyCallbackData& data) = 0;
|
||||
virtual void Field_10(const Widget::KeyCallbackData& data) = 0;
|
||||
virtual void Field_18(const Widget::KeyCallbackData& data) = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::KeyListener) == 0x08, "\"dw::KeyListener\" struct should have a size of 0x08");
|
||||
|
||||
class KeyAdapter : public KeyListener {
|
||||
public:
|
||||
KeyAdapter();
|
||||
virtual ~KeyAdapter() override;
|
||||
|
||||
virtual void Field_8(const Widget::KeyCallbackData& data) override;
|
||||
virtual void Field_10(const Widget::KeyCallbackData& data) override;
|
||||
virtual void Field_18(const Widget::KeyCallbackData& data) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::KeyAdapter) == 0x08, "\"dw::KeyAdapter\" struct should have a size of 0x08");
|
||||
|
||||
class MouseListener {
|
||||
public:
|
||||
MouseListener();
|
||||
virtual ~MouseListener();
|
||||
|
||||
virtual void Field_8(const Widget::MouseCallbackData& data) = 0;
|
||||
virtual void Field_10(const Widget::MouseCallbackData& data) = 0;
|
||||
virtual void Field_18(const Widget::MouseCallbackData& data) = 0;
|
||||
virtual void Field_20(const Widget::MouseCallbackData& data) = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::MouseListener) == 0x08, "\"dw::MouseListener\" struct should have a size of 0x08");
|
||||
|
||||
class MouseAdapter : public MouseListener {
|
||||
public:
|
||||
MouseAdapter();
|
||||
virtual ~MouseAdapter() override;
|
||||
|
||||
virtual void Field_8(const Widget::MouseCallbackData& data) override;
|
||||
virtual void Field_10(const Widget::MouseCallbackData& data) override;
|
||||
virtual void Field_18(const Widget::MouseCallbackData& data) override;
|
||||
virtual void Field_20(const Widget::MouseCallbackData& data) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::MouseAdapter) == 0x08, "\"dw::MouseAdapter\" struct should have a size of 0x08");
|
||||
|
||||
class MouseMoveListener {
|
||||
public:
|
||||
MouseMoveListener();
|
||||
virtual ~MouseMoveListener();
|
||||
|
||||
virtual void Field_8(const Widget::MouseCallbackData& data) = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::MouseMoveListener) == 0x08, "\"dw::MouseMoveListener\" struct should have a size of 0x08");
|
||||
|
||||
class Layout {
|
||||
public:
|
||||
Layout();
|
||||
virtual ~Layout();
|
||||
|
||||
virtual vec2 GetSize(Composite* comp) = 0;
|
||||
virtual void SetSize(Composite* comp) = 0;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Layout) == 0x08, "\"dw::Layout\" struct should have a size of 0x08");
|
||||
|
||||
__declspec(align(8)) class FillLayout : public Layout {
|
||||
public:
|
||||
Flags flags;
|
||||
|
||||
FillLayout(Flags flags = VERTICAL);
|
||||
virtual ~FillLayout() override;
|
||||
|
||||
virtual vec2 GetSize(Composite* comp) override;
|
||||
virtual void SetSize(Composite* comp) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::FillLayout) == 0x10, "\"dw::FillLayout\" struct should have a size of 0x10");
|
||||
|
||||
__declspec(align(8)) class GraphLayout : public Layout {
|
||||
public:
|
||||
Flags flags;
|
||||
|
||||
GraphLayout(Flags flags = VERTICAL);
|
||||
virtual ~GraphLayout() override;
|
||||
|
||||
virtual vec2 GetSize(Composite* comp) override;
|
||||
virtual void SetSize(Composite* comp) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::GraphLayout) == 0x10, "\"dw::GraphLayout\" struct should have a size of 0x10");
|
||||
|
||||
class GridLayout : public Layout {
|
||||
public:
|
||||
size_t rows;
|
||||
prj::vector<float_t> column_size;
|
||||
prj::vector<float_t> row_size;
|
||||
size_t columns;
|
||||
vec2 spacing;
|
||||
|
||||
GridLayout(size_t columns = 2);
|
||||
virtual ~GridLayout() override;
|
||||
|
||||
virtual vec2 GetSize(Composite* comp) override;
|
||||
virtual void SetSize(Composite* comp) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::GridLayout) == 0x50, "\"dw::GridLayout\" struct should have a size of 0x50");
|
||||
|
||||
class RowLayout : public Layout {
|
||||
public:
|
||||
Flags flags;
|
||||
float_t spacing;
|
||||
|
||||
RowLayout(Flags flags = VERTICAL);
|
||||
virtual ~RowLayout() override;
|
||||
|
||||
virtual vec2 GetSize(Composite* comp) override;
|
||||
virtual void SetSize(Composite* comp) override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::RowLayout) == 0x10, "\"dw::RowLayout\" struct should have a size of 0x10");
|
||||
|
||||
class Group : public Composite {
|
||||
public:
|
||||
Group(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Group() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
virtual rectangle GetBoundingBox() override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Group) == 0x110, "\"dw::Group\" struct should have a size of 0x110");
|
||||
|
||||
class Label : public Control {
|
||||
public:
|
||||
Label(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Label() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual vec2 GetSize() override;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Label) == 0xD8, "\"dw::Label\" struct should have a size of 0xD8");
|
||||
|
||||
class Button : public Control {
|
||||
public:
|
||||
bool value;
|
||||
prj::vector<SelectionListener*> selection_listeners;
|
||||
Widget::Callback callback;
|
||||
int32_t field_100;
|
||||
int32_t field_104;
|
||||
|
||||
Button(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~Button() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
void AddSelectionListener(SelectionListener* value);
|
||||
void SetValue(bool value);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Button) == 0x108, "\"dw::Button\" struct should have a size of 0x108");
|
||||
|
||||
class List : public Scrollable {
|
||||
public:
|
||||
prj::vector<prj::wstring> items;
|
||||
prj::vector<int32_t> selections;
|
||||
size_t hovered_item;
|
||||
size_t selected_item;
|
||||
prj::vector<SelectionListener*> selection_listeners;
|
||||
size_t max_items;
|
||||
bool field_148;
|
||||
|
||||
List(Composite* parent = 0, Flags flags = (Flags)0);
|
||||
virtual ~List() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& size) override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
void AddItem(const prj::string& str);
|
||||
void AddItem(const prj::wstring& str);
|
||||
void AddSelectionListener(SelectionListener* value);
|
||||
void Callback(SelectionListener::CallbackData* data);
|
||||
bool CheckItemSelected(size_t index);
|
||||
void ClearItems();
|
||||
prj::string GetItemStr(size_t index) const;
|
||||
prj::wstring GetItem(size_t index) const;
|
||||
size_t GetItemCount();
|
||||
size_t GetMaxItemsVisible();
|
||||
void ResetSelectedItem();
|
||||
void SetMaxItems(size_t value);
|
||||
void SetScrollBarParams();
|
||||
void SetSelectedItem(size_t index);
|
||||
void SetSelectedItems(size_t begin, size_t end);
|
||||
void UnsetSelectedItem(size_t index);
|
||||
|
||||
inline void AddItem(const prj::string&& str) {
|
||||
AddItem(str);
|
||||
}
|
||||
|
||||
inline void AddItem(const prj::wstring&& str) {
|
||||
AddItem(str);
|
||||
}
|
||||
|
||||
inline prj::string GetHoveredItemStr() {
|
||||
return GetItemStr(hovered_item);
|
||||
}
|
||||
|
||||
inline prj::wstring GetHoveredItem() {
|
||||
return GetItem(hovered_item);
|
||||
}
|
||||
|
||||
inline prj::string GetSelectedItemStr() {
|
||||
return GetItemStr(selected_item);
|
||||
}
|
||||
|
||||
inline prj::wstring GetSelectedItem() {
|
||||
return GetItem(selected_item);
|
||||
}
|
||||
|
||||
inline void ResetSetSelectedItem(size_t index) {
|
||||
ResetSelectedItem();
|
||||
SetSelectedItem(index);
|
||||
}
|
||||
|
||||
inline void SetItemIndex(size_t index) {
|
||||
hovered_item = index;
|
||||
ResetSetSelectedItem(index);
|
||||
}
|
||||
|
||||
int64_t sub_1402EF570();
|
||||
bool sub_1402F1F20(size_t index);
|
||||
void sub_1402F9680(int64_t index);
|
||||
void sub_1402F9C90(size_t index);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::List) == 0x150, "\"dw::List\" struct should have a size of 0x150");
|
||||
|
||||
class ListBox : public Composite {
|
||||
public:
|
||||
List* list;
|
||||
bool field_118;
|
||||
|
||||
ListBox(Composite* parent = 0, Flags flags = (Flags)(VERTICAL | MULTISELECT));
|
||||
virtual ~ListBox() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
virtual void SetFont(p_Font& value) override;
|
||||
|
||||
rectangle GetListRectangle();
|
||||
|
||||
inline void AddItem(const prj::string& str) {
|
||||
if (list)
|
||||
list->AddItem(str);
|
||||
}
|
||||
|
||||
inline void AddItem(const prj::string&& str) {
|
||||
if (list)
|
||||
list->AddItem(str);
|
||||
}
|
||||
|
||||
inline void AddSelectionListener(SelectionListener* value) {
|
||||
if (list)
|
||||
list->AddSelectionListener(value);
|
||||
}
|
||||
|
||||
inline void ClearItems() {
|
||||
if (list)
|
||||
list->ClearItems();
|
||||
}
|
||||
|
||||
inline prj::string GetItemStr(size_t index) {
|
||||
if (list)
|
||||
return list->GetItemStr(index);
|
||||
return {};
|
||||
}
|
||||
|
||||
inline prj::wstring GetItem(size_t index) {
|
||||
if (list)
|
||||
return list->GetItem(index);
|
||||
return {};
|
||||
}
|
||||
|
||||
inline size_t GetItemCount() {
|
||||
if (list)
|
||||
return list->GetItemCount();
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline prj::string GetHoveredItemStr() {
|
||||
if (list)
|
||||
return list->GetHoveredItemStr();
|
||||
return {};
|
||||
}
|
||||
|
||||
inline prj::wstring GetHoveredItem() {
|
||||
if (list)
|
||||
return list->GetHoveredItem();
|
||||
return {};
|
||||
}
|
||||
|
||||
inline prj::string GetSelectedItemStr() {
|
||||
if (list)
|
||||
return list->GetSelectedItemStr();
|
||||
return {};
|
||||
}
|
||||
|
||||
inline prj::wstring GetSelectedItem() {
|
||||
if (list)
|
||||
return list->GetSelectedItem();
|
||||
return {};
|
||||
}
|
||||
|
||||
inline void SetItemIndex(size_t index) {
|
||||
if (list)
|
||||
list->SetItemIndex(index);
|
||||
}
|
||||
|
||||
inline void SetMaxItems(size_t value) {
|
||||
if (list)
|
||||
list->SetMaxItems(value);
|
||||
}
|
||||
|
||||
void sub_1402E4440();
|
||||
void sub_1402E4F40();
|
||||
void sub_1402E4F90();
|
||||
|
||||
static bool sub_1402EC8C0(rectangle rect, vec2 pos);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::ListBox) == 0x120, "\"dw::ListBox\" struct should have a size of 0x120");
|
||||
|
||||
class ScrollBar : public Widget {
|
||||
public:
|
||||
Control* parent_control;
|
||||
prj::vector<SelectionListener*> selection_listeners;
|
||||
float_t value;
|
||||
float_t min;
|
||||
float_t max;
|
||||
float_t field_94;
|
||||
float_t step;
|
||||
float_t step_fast;
|
||||
float_t field_A0;
|
||||
bool round;
|
||||
bool field_A5;
|
||||
bool field_A6;
|
||||
__int64 field_A8;
|
||||
__int64 field_B0;
|
||||
__int64 field_B8;
|
||||
__int64 field_C0;
|
||||
__int64 field_C8;
|
||||
__int64 field_D0;
|
||||
__int64 field_D8;
|
||||
__int64 field_E0;
|
||||
__int64 field_E8;
|
||||
__int64 field_F0;
|
||||
__int64 field_F8;
|
||||
__int64 field_100;
|
||||
__int64 field_108;
|
||||
__int64 field_110;
|
||||
__int64 field_118;
|
||||
__int64 field_120;
|
||||
__int64 field_128;
|
||||
__int64 field_130;
|
||||
__int64 field_138;
|
||||
__int64 field_140;
|
||||
__int64 field_148;
|
||||
__int64 field_150;
|
||||
__int64 field_158;
|
||||
__int64 field_160;
|
||||
|
||||
ScrollBar(Control* parent, Flags flags);
|
||||
virtual ~ScrollBar() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& value) override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual Control* GetParentControl();
|
||||
virtual void SetFont(p_Font& value);
|
||||
virtual bool Field_58();
|
||||
virtual bool Field_60();
|
||||
virtual void Field_68(bool value);
|
||||
|
||||
void SetMax(float_t value);
|
||||
void SetMin(float_t value);
|
||||
void SetParams(float_t value, float_t min, float_t max,
|
||||
float_t a5, float_t step, float_t step_fast);
|
||||
void SetParams(float_t size, float_t step, size_t items_count);
|
||||
void SetRound(bool value);
|
||||
void SetValue(float_t value);
|
||||
void SetWidth(float_t value);
|
||||
|
||||
void AddSelectionListener(SelectionListener* value);
|
||||
|
||||
vec2 sub_1402E4790();
|
||||
SelectionListener::CallbackData sub_1402E5140(const Widget::KeyCallbackData& key_callback_data);
|
||||
SelectionListener::CallbackData sub_1402E5380(const Widget::MouseCallbackData& mouse_callback_data);
|
||||
void sub_1402F9670(float_t value);
|
||||
|
||||
static void sub_1402E6CC0(SelectionListener::CallbackData callback_data);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::ScrollBar) == 0x168, "\"dw::ScrollBar\" struct should have a size of 0x168");
|
||||
|
||||
class ShellCloseButton : public Button {
|
||||
public:
|
||||
ShellCloseButton(Shell* parent);
|
||||
virtual ~ShellCloseButton() override;
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual vec2 GetPos() override;
|
||||
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
static void Callback(Widget* data);
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::ShellCloseButton) == 0x108, "\"dw::ShellCloseButton\" struct should have a size of 0x108");
|
||||
|
||||
class Slider : public Control {
|
||||
public:
|
||||
const char* format;
|
||||
prj::vector<SelectionListener*> selection_listeners;
|
||||
ScrollBar* scroll_bar;
|
||||
|
||||
Slider(Composite* parent, Flags flags);
|
||||
virtual ~Slider();
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Reset() override;
|
||||
virtual int32_t KeyCallback(const Widget::KeyCallbackData& data) override;
|
||||
virtual int32_t MouseCallback(const Widget::MouseCallbackData& data) override;
|
||||
virtual void SetSize(const vec2& value) override;
|
||||
|
||||
virtual void UpdateLayout() override;
|
||||
virtual vec2 GetSize() override;
|
||||
|
||||
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");
|
||||
|
||||
inline void SetMax(float_t value) {
|
||||
scroll_bar->SetMax(value);
|
||||
}
|
||||
|
||||
inline void SetMin(float_t value) {
|
||||
scroll_bar->SetMin(value);
|
||||
}
|
||||
|
||||
inline void SetParams(float_t value, float_t min, float_t max,
|
||||
float_t a5, float_t step, float_t step_fast) {
|
||||
scroll_bar->SetParams(value, min, max, a5, step, step_fast);
|
||||
}
|
||||
|
||||
inline void SetRound(bool value) {
|
||||
scroll_bar->SetRound(value);
|
||||
}
|
||||
|
||||
inline void SetValue(float_t value) {
|
||||
scroll_bar->SetValue(value);
|
||||
}
|
||||
|
||||
inline void sub_1402F9670(float_t value) {
|
||||
scroll_bar->sub_1402F9670(value);
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::Slider) == 0x100, "\"dw::Slider\" struct should have a size of 0x100");
|
||||
|
||||
struct init_data {
|
||||
rectangle field_0;
|
||||
rectangle field_10;
|
||||
|
||||
init_data();
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::init_data) == 0x20, "\"dw::init_data\" struct should have a size of 0x20");
|
||||
|
||||
class DropDownListScrollBarSelectionListener : public SelectionAdapter {
|
||||
public:
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::DropDownListScrollBarSelectionListener) == 0x08, "\"dw::DropDownListScrollBarSelectionListener\" struct should have a size of 0x08");
|
||||
|
||||
class ScrollBarTestSelectionListener : public SelectionAdapter {
|
||||
public:
|
||||
};
|
||||
|
||||
static_assert(sizeof(dw::ScrollBarTestSelectionListener) == 0x08, "\"dw::ScrollBarTestSelectionListener\" struct should have a size of 0x08");
|
||||
|
||||
extern p_Font& current_font;
|
||||
|
||||
extern p_Font& p_font_type_6x12;
|
||||
extern p_Font& p_font_type_8x12;
|
||||
extern p_Font& p_font_type_8x16;
|
||||
extern p_Font& p_font_type_10x16;
|
||||
extern p_Font& p_font_type_10x20;
|
||||
extern p_Font& p_font_type_12x24;
|
||||
extern p_Font& p_font_type_scroll_bar;
|
||||
|
||||
extern int32_t font_get_index(prj::string& name);
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "hook.hpp"
|
||||
#include "Glitter/glitter.hpp"
|
||||
#include "data_test/rob_osage_test.hpp"
|
||||
#include "mdl/disp_manager.hpp"
|
||||
#include "pv_game/pv_game.hpp"
|
||||
#include "rob/rob.hpp"
|
||||
@@ -76,6 +77,7 @@ HOOK(int32_t, FASTCALL, data_init, 0x0000000140192FF0) {
|
||||
|
||||
rctx->init();
|
||||
sprite_manager_init();
|
||||
rob_osage_test_init();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@ obj_mesh* (FASTCALL* object_info_get_mesh_by_index)(object_info object, int32_t
|
||||
= (obj_mesh * (FASTCALL*)(object_info object, int32_t mesh_index))0x0000000140459D40;
|
||||
int32_t(FASTCALL* object_info_get_mesh_index)(object_info object, const char* mesh_name)
|
||||
= (int32_t(FASTCALL*)(object_info object, const char* mesh_name))0x0000000140459DE0;
|
||||
const char* (FASTCALL* object_database_get_object_name)(object_info obj_info)
|
||||
= (const char* (FASTCALL*)(object_info obj_info))0x0000000140459F20;
|
||||
uint32_t(FASTCALL* object_database_get_object_info)(const char* name)
|
||||
= (uint32_t(FASTCALL*)(const char* name))0x0000000140459F80;
|
||||
obj* (FASTCALL* object_info_get_object)(object_info obj_info)
|
||||
|
||||
@@ -585,6 +585,7 @@ static_assert(sizeof(obj_vertex_buffer) == 0x10, "\"obj_vertex_buffer\" struct s
|
||||
extern void (FASTCALL* object_database_unload_set)(int32_t set);
|
||||
extern obj_mesh* (FASTCALL* object_info_get_mesh_by_index)(object_info object, int32_t mesh_index);
|
||||
extern int32_t(FASTCALL* object_info_get_mesh_index)(object_info object, const char* mesh_name);
|
||||
extern const char* (FASTCALL* object_database_get_object_name)(object_info obj_info);
|
||||
extern uint32_t(FASTCALL* object_database_get_object_info)(const char* name);
|
||||
extern obj* (FASTCALL* object_info_get_object)(object_info obj_info);
|
||||
extern obj_mesh_index_buffer* (FASTCALL* object_info_get_mesh_index_buffer)(object_info obj_info, int32_t a2);
|
||||
|
||||
Reference in New Issue
Block a user