From 8d2f0ab142b057b0c1bfb36106babd2f1f595824 Mon Sep 17 00:00:00 2001 From: Janis Date: Fri, 21 Apr 2023 17:58:49 +0200 Subject: [PATCH] UEnum, UFunction and UProperty injection --- src/sdk/output/rust.rs | 146 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 138 insertions(+), 8 deletions(-) diff --git a/src/sdk/output/rust.rs b/src/sdk/output/rust.rs index 4f3b9b9..5088fb0 100644 --- a/src/sdk/output/rust.rs +++ b/src/sdk/output/rust.rs @@ -513,6 +513,37 @@ pub(crate) fn inject_coreuobject_types(sdk: &mut Sdk) { methods: vec![], }; let ufield = sdk.inject_type(ufield).expect("ufield"); + + let uenum = Class { + is_class: true, + size: 48, + name: "Enum".to_string(), + full_name: "Class CoreUObject.Enum".to_string(), + super_class: Some(unsafe { ufield.cast() }), + fields: vec![ + ClassField { + offset: 48, + size: 16, + name: "cpp_type".to_string(), + ty: Type::Primitive(PrimitiveType::Custom("FString")), + }, + ClassField { + offset: 64, + size: 16, + name: "names".to_string(), + ty: Type::Array(Box::new(Type::Name)), + }, + ClassField { + offset: 80, + size: 4, + name: "cpp_form_raw".to_string(), + ty: Type::Primitive(PrimitiveType::U32), + }, + ], + methods: vec![], + }; + let _uenum = sdk.inject_type(uenum).expect("uenum"); + let ustruct = Class { is_class: true, size: 144, @@ -524,13 +555,13 @@ pub(crate) fn inject_coreuobject_types(sdk: &mut Sdk) { offset: 48, size: 8, name: "super_struct".to_string(), - ty: Type::Primitive(PrimitiveType::Custom("Option>")), + ty: Type::Primitive(PrimitiveType::Custom("Option")), }, ClassField { offset: 56, size: 8, name: "children".to_string(), - ty: Type::Primitive(PrimitiveType::Custom("Option>")), + ty: Type::Primitive(PrimitiveType::Custom("Option")), }, ClassField { offset: 64, @@ -548,18 +579,117 @@ pub(crate) fn inject_coreuobject_types(sdk: &mut Sdk) { methods: vec![], }; let ustruct = sdk.inject_type(ustruct).expect("ustruct"); + + let uproperty = Class { + is_class: true, + size: 144, + name: "Property".to_string(), + full_name: "Class CoreUObject.Property".to_string(), + super_class: Some(unsafe { ufield.cast() }), + fields: vec![ + ClassField { + offset: 48, + size: 4, + name: "array_dimensions".to_string(), + ty: Type::Primitive(PrimitiveType::I32), + }, + ClassField { + offset: 52, + size: 4, + name: "element_size".to_string(), + ty: Type::Primitive(PrimitiveType::I32), + }, + ClassField { + offset: 56, + size: 8, + name: "property_flags".to_string(), + ty: Type::Primitive(PrimitiveType::U64), + }, + ClassField { + offset: 64, + size: 2, + name: "rep_index".to_string(), + ty: Type::Primitive(PrimitiveType::I16), + }, + ClassField { + offset: 68, + size: 8, + name: "rep_notify_function".to_string(), + ty: Type::Name, + }, + ClassField { + offset: 76, + size: 4, + name: "offset".to_string(), + ty: Type::Primitive(PrimitiveType::I32), + }, + ], + methods: vec![], + }; + let _uproperty = sdk.inject_type(uproperty).expect("uproperty"); + let ufunction = Class { is_class: true, size: 176, name: "Function".to_string(), full_name: "Class CoreUObject.Function".to_string(), super_class: Some(unsafe { ustruct.cast() }), - fields: vec![ClassField { - offset: 144, - size: 4, - name: "function_flags".to_string(), - ty: Type::Primitive(PrimitiveType::U32), - }], + fields: vec![ + ClassField { + offset: 144, + size: 4, + name: "function_flags".to_string(), + ty: Type::Primitive(PrimitiveType::U32), + }, + ClassField { + offset: 148, + size: 2, + name: "rep_offset".to_string(), + ty: Type::Primitive(PrimitiveType::U16), + }, + ClassField { + offset: 150, + size: 1, + name: "num_params".to_string(), + ty: Type::Primitive(PrimitiveType::U8), + }, + ClassField { + offset: 152, + size: 2, + name: "params_size".to_string(), + ty: Type::Primitive(PrimitiveType::U16), + }, + ClassField { + offset: 154, + size: 2, + name: "return_value_offset".to_string(), + ty: Type::Primitive(PrimitiveType::U16), + }, + ClassField { + offset: 156, + size: 2, + name: "rpc_id".to_string(), + ty: Type::Primitive(PrimitiveType::U16), + }, + ClassField { + offset: 158, + size: 2, + name: "rpc_response_id".to_string(), + ty: Type::Primitive(PrimitiveType::U16), + }, + ClassField { + offset: 160, + size: 8, + name: "first_propert_to_init".to_string(), + ty: Type::Primitive(PrimitiveType::Custom("Option")), + }, + ClassField { + offset: 168, + size: 8, + name: "func".to_string(), + ty: Type::Primitive(PrimitiveType::Custom("Option>")), + }, + ], methods: vec![], }; let _ufunction = sdk.inject_type(ufunction).expect("ufunction");