From ab003e4cdc9b38399709dce72dddf6325c31343c Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 25 Jun 2023 16:26:22 +0200 Subject: [PATCH] super-class and name accessor thru unrealtype wrapper --- unreal-sdk/src/sdk/process.rs | 6 ++++++ unreal-sdk/src/sdk/repr.rs | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/unreal-sdk/src/sdk/process.rs b/unreal-sdk/src/sdk/process.rs index 75797fa..258b1d9 100644 --- a/unreal-sdk/src/sdk/process.rs +++ b/unreal-sdk/src/sdk/process.rs @@ -65,6 +65,12 @@ impl Sdk { .and_then(|text| std::fs::write(path, text).context("failed to write to file.")) } + pub fn get_object(&self, key: &ObjectRef) -> Option<&UnrealType> { + self.packages + .get(&key.package) + .and_then(|pkg| pkg.types.get(key)) + } + fn get_packages() -> anyhow::Result> { let objects = GOBJECTS .read() diff --git a/unreal-sdk/src/sdk/repr.rs b/unreal-sdk/src/sdk/repr.rs index cef4f17..8dc5c3d 100644 --- a/unreal-sdk/src/sdk/repr.rs +++ b/unreal-sdk/src/sdk/repr.rs @@ -70,6 +70,25 @@ pub enum UnrealType { } impl UnrealType { + pub fn super_class(&self) -> Option { + match self { + UnrealType::Class(class) | UnrealType::Struct(class) | UnrealType::Actor(class) => { + class.super_class + } + UnrealType::Enum(_) => None, + } + } + + pub fn unique_name(&self) -> &str { + // FIXME: change this to the unique name field in the future + match self { + UnrealType::Class(class) | UnrealType::Struct(class) | UnrealType::Actor(class) => { + &class.name + } + UnrealType::Enum(enm) => &enm.name, + } + } + pub fn obj_ref(&self) -> ObjectRef { match self { UnrealType::Class(obj) => obj.obj_ref,