Working on look-at Widgets, not done yet.

This commit is contained in:
2025-03-17 15:35:51 -04:00
parent c9fd224a38
commit 6b8c86a03c
7 changed files with 107 additions and 60 deletions

View File

@@ -141,25 +141,32 @@ void UlxTangible::Destroy() {
NearAccordingToUnreal = false;
}
UlxTangible *UlxTangible::GetActorTangible(AActor *actor) {
UlxTangible *UlxTangible::GetActorTangibleQuiet(AActor *actor) {
UlxTangibleComponent* comp = actor->GetComponentByClass<UlxTangibleComponent>();
check(comp != nullptr);
UlxTangible *result = comp->Tangible.Get();
check(result != nullptr);
return result;
if (comp == nullptr) return nullptr;
return comp->Tangible.Get();
}
UlxTangible *UlxTangible::GetActorTangibleOrLog(AActor *actor) {
UlxTangible *tan = GetActorTangibleQuiet(actor);
if (tan == nullptr) {
UE_LOG(LogBlueprint, Error, TEXT("Not a luprex tangible: %s"), *actor->GetName());
}
return tan;
}
void UlxTangible::GetCurrentAnimation(AActor *target, FlxAnimationStep &step) {
step = GetActorTangible(target)->AnimTracker.GetCurrentAnimation();
UlxTangible *tan = GetActorTangibleOrLog(target);
if (tan == nullptr) {
step = FlxAnimationStep();
return;
}
step = tan->AnimTracker.GetCurrentAnimation();
}
void UlxTangible::FinishedAnimation(AActor *target, const FlxAnimationStep &step, bool AutoUpdate) {
if (target == nullptr)
{
UE_LOG(LogBlueprint, Error, TEXT("In FinishedAnimation, tangible cannot be null"));
return;
}
UlxTangible *tan = GetActorTangible(target);
UlxTangible *tan = GetActorTangibleOrLog(target);
if (tan == nullptr) return;
if (AutoUpdate)
{
step.AutoUpdateXYZ(target);
@@ -172,21 +179,32 @@ void UlxTangible::FinishedAnimation(AActor *target, const FlxAnimationStep &step
}
FString UlxTangible::GetTangiblePlane(AActor* target) {
return GetActorTangible(target)->Plane.ToString();
UlxTangible *tan = GetActorTangibleOrLog(target);
if (tan == nullptr) return TEXT("");
return tan->Plane.ToString();
}
void UlxTangible::SetTangiblePlane(AActor* target, const FString& plane) {
GetActorTangible(target)->Plane = FName(plane);
UlxTangible *tan = GetActorTangibleOrLog(target);
if (tan == nullptr) return;
tan->Plane = FName(plane);
}
bool UlxTangible::IsCurrentPlayer(AActor* target) {
UlxTangible *tan = GetActorTangible(target);
UlxTangible *tan = GetActorTangibleQuiet(target);
if (tan == nullptr) return false;
AIntegrationGameModeBase *gamemode = tan->Manager->GetGameMode();
return (tan->TangibleId == gamemode->PlayerId);
}
bool UlxTangible::IsLuprexTangible(AActor* target) {
UlxTangible *tan = GetActorTangibleQuiet(target);
return tan != nullptr;
}
void UlxTangible::SetAutoFinish(AActor *target, const FString &action, const FVector &xyz) {
UlxTangible *tan = GetActorTangible(target);
UlxTangible *tan = GetActorTangibleOrLog(target);
if (tan == nullptr) return;
tan->AnimTracker.SetAutoFinish(action, xyz);
}