// Copyright 2025 https://yuewu.dev/en All Rights Reserved. #include "GIS_LogChannels.h" #include "GIS_EquipmentInstance.h" #include "UObject/Object.h" #include "GameFramework/Actor.h" #include "Components/ActorComponent.h" #include "GIS_ItemInstance.h" #include "GIS_ItemCollection.h" #include "GIS_ItemDefinition.h" DEFINE_LOG_CATEGORY(LogGIS) FString GetGISLogContextString(const UObject* ContextObject) { ENetRole Role = ROLE_None; FString RoleName = TEXT("None"); FString Name = "None"; if (const AActor* Actor = Cast(ContextObject)) { Role = Actor->GetLocalRole(); Name = Actor->GetName(); } else if (const UActorComponent* Component = Cast(ContextObject)) { if (AActor* ActorOwner = Cast(Component->GetOuter())) { Role = ActorOwner->GetLocalRole(); Name = ActorOwner->GetName(); } else { const AActor* Owner = Component->GetOwner(); Role = IsValid(Owner) ? Owner->GetLocalRole() : ROLE_None; Name = IsValid(Owner) ? Owner->GetName() : TEXT("None"); } } else if (const UGIS_ItemInstance* ItemInstance = Cast(ContextObject)) { if (AActor* ActorOwner = Cast(ItemInstance->GetOuter())) { Role = ActorOwner->GetLocalRole(); Name = ActorOwner->GetName(); } else { return FString::Printf(TEXT("(%s)'s instance(%s) "), *ItemInstance->GetDefinition()->GetName(), *ItemInstance->GetName()); } } else if (const UGIS_ItemCollection* Collection = Cast(ContextObject)) { if (AActor* ActorOwner = Cast(Collection->GetOuter())) { Role = ActorOwner->GetLocalRole(); Name = ActorOwner->GetName(); } if (Role != ROLE_None) { RoleName = (Role == ROLE_Authority) ? TEXT("Server") : TEXT("Client"); } return FString::Printf(TEXT("[%s] (%s)'s %s"), *RoleName, *Name, *Collection->GetCollectionName()); } else if (IsValid(ContextObject)) { Name = ContextObject->GetName(); } if (Role != ROLE_None) { RoleName = (Role == ROLE_Authority) ? TEXT("Server") : TEXT("Client"); } return FString::Printf(TEXT("[%s] (%s)"), *RoleName, *Name); }