// Copyright Epic Games, Inc. All Rights Reserved. #include "MovieSceneTracksCustomAccessors.h" #include "MovieSceneTracksComponentTypes.h" #include "Components/DirectionalLightComponent.h" #include "Components/ExponentialHeightFogComponent.h" #include "Components/LightComponent.h" #include "Components/LocalFogVolumeComponent.h" #include "Components/PrimitiveComponent.h" #include "Components/SkyAtmosphereComponent.h" #include "Components/SkyLightComponent.h" #include "Components/SkeletalMeshComponent.h" #include "Engine/SkeletalMesh.h" namespace UE::MovieScene { FIntermediate3DTransform GetComponentTransform(const UObject* Object) { const USceneComponent* SceneComponent = CastChecked(Object); FIntermediate3DTransform Result(SceneComponent->GetRelativeLocation(), SceneComponent->GetRelativeRotation(), SceneComponent->GetRelativeScale3D()); return Result; } void SetComponentTranslationAndRotation(USceneComponent* SceneComponent, const FIntermediate3DTransform& Transform) { // If this is a simulating component, teleport since sequencer takes over. // Teleport will not have no velocity, but it's computed later by sequencer so that it will be correct for physics. // @todo: We would really rather not AActor* Actor = SceneComponent->GetOwner(); USceneComponent* RootComponent = Actor ? Actor->GetRootComponent() : nullptr; bool bIsSimulatingPhysics = RootComponent ? RootComponent->IsSimulatingPhysics() : false; FVector Translation = Transform.GetTranslation(); FRotator Rotation = Transform.GetRotation(); SceneComponent->SetRelativeLocationAndRotation(Translation, Rotation, false, nullptr, bIsSimulatingPhysics ? ETeleportType::ResetPhysics : ETeleportType::None); // Force the location and rotation values to avoid Rot->Quat->Rot conversions SceneComponent->SetRelativeLocation_Direct(Translation); SceneComponent->SetRelativeRotation_Direct(Rotation); } void SetComponentTransform(USceneComponent* SceneComponent, const FIntermediate3DTransform& Transform) { // If this is a simulating component, teleport since sequencer takes over. // Teleport will not have no velocity, but it's computed later by sequencer so that it will be correct for physics. // @todo: We would really rather not AActor* Actor = SceneComponent->GetOwner(); USceneComponent* RootComponent = Actor ? Actor->GetRootComponent() : nullptr; const bool bIsSimulatingPhysics = RootComponent ? RootComponent->IsSimulatingPhysics() : false; FVector Translation = Transform.GetTranslation(); FRotator Rotation = Transform.GetRotation(); FTransform NewTransform(Rotation, Translation, Transform.GetScale()); const bool bFlipped = NewTransform.GetDeterminant() * SceneComponent->GetComponentTransform().GetDeterminant() <= 0; SceneComponent->SetRelativeTransform(NewTransform, false, nullptr, bIsSimulatingPhysics ? ETeleportType::ResetPhysics : ETeleportType::None); // Force the location and rotation values to avoid Rot->Quat->Rot conversions SceneComponent->SetRelativeLocation_Direct(Translation); SceneComponent->SetRelativeRotation_Direct(Rotation); // The cached mesh draw command includes the culling order. If the scale sign changes, the render state needs // to be marked dirty so that the culling order is refreshed (the renderer does not currently do this automatically) if (bFlipped) { SceneComponent->MarkRenderStateDirty(); } } void SetComponentTransformAndVelocity(UObject* Object, const FIntermediate3DTransform& InTransform) { UE::MovieScene::FIntermediate3DTransform::ApplyTransformTo(CastChecked(Object), InTransform); } FIntermediateColor GetLightComponentLightColor(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Color); const ULightComponent* LightComponent = CastChecked(Object); return FIntermediateColor(LightComponent->GetLightColor()); } void SetLightComponentLightColor(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // This is a little esoteric - ULightComponentBase::LightColor is the UPROPERTY that generates the meta-data // for this custom callback, but it is an FColor, even though the public get/set functions expose it as an // FLinearColor. FIntermediateColor is always blended and dealt with in linear space, so it's fine to // simply reinterpret the color ensure(InColorType == EColorPropertyType::Color); const bool bConvertBackToSRgb = true; ULightComponent* LightComponent = CastChecked(Object); LightComponent->SetLightColor(InColor.GetLinearColor(), bConvertBackToSRgb); } float GetLightComponentIntensity(const UObject* Object) { const ULightComponent* LightComponent = CastChecked(Object); return LightComponent->Intensity; } void SetLightComponentIntensity(UObject* Object, float InIntensity) { ULightComponent* LightComponent = CastChecked(Object); LightComponent->SetIntensity(InIntensity); } float GetLightComponentVolumetricScatteringIntensity(const UObject* Object) { const ULightComponent* LightComponent = CastChecked(Object); return LightComponent->VolumetricScatteringIntensity; } void SetLightComponentVolumetricScatteringIntensity(UObject* Object, float InVolumetricScatteringIntensity) { ULightComponent* LightComponent = CastChecked(Object); LightComponent->SetVolumetricScatteringIntensity(InVolumetricScatteringIntensity); } float GetLightComponentIndirectLightingIntensity(const UObject* Object) { const ULightComponent* LightComponent = CastChecked(Object); return LightComponent->IndirectLightingIntensity; } void SetLightComponentIndirectLightingIntensity(UObject* Object, float InIndirectLightingIntensity) { ULightComponent* LightComponent = CastChecked(Object); LightComponent->SetIndirectLightingIntensity(InIndirectLightingIntensity); } float GetDirectionalLightComponentLightSourceAngle(const UObject* Object) { const UDirectionalLightComponent* DirectionalLightComponent = CastChecked(Object); return DirectionalLightComponent->LightSourceAngle; } void SetDirectionalLightComponentLightSourceAngle(UObject* Object, float InLightSourceAngle) { UDirectionalLightComponent* DirectionalLightComponent = CastChecked(Object); DirectionalLightComponent->SetLightSourceAngle(InLightSourceAngle); } FIntermediateColor GetSkyLightComponentLightColor(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Color); const USkyLightComponent* SkyLightComponent = CastChecked(Object); return FIntermediateColor(SkyLightComponent->GetLightColor()); } void SetSkyLightComponentLightColor(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // This is a little esoteric - ULightComponentBase::LightColor is the UPROPERTY that generates the meta-data // for this custom callback, but it is an FColor, even though the public get/set functions expose it as an // FLinearColor. FIntermediateColor is always blended and dealt with in linear space, so it's fine to // simply reinterpret the color ensure(InColorType == EColorPropertyType::Color); USkyLightComponent* SkyLightComponent = CastChecked(Object); SkyLightComponent->SetLightColor(InColor.GetLinearColor()); } float GetSkyLightComponentIntensity(const UObject* Object) { const USkyLightComponent* SkyLightComponent = CastChecked(Object); return SkyLightComponent->Intensity; } void SetSkyLightComponentIntensity(UObject* Object, float InIntensity) { USkyLightComponent* SkyLightComponent = CastChecked(Object); SkyLightComponent->SetIntensity(InIntensity); } float GetSkyAtmosphereComponentMieScatteringScale(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->MieScatteringScale; } void SetSkyAtmosphereComponentMieScatteringScale(UObject* Object, float InMieScatteringScale) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetMieScatteringScale(InMieScatteringScale); } float GetSkyAtmosphereComponentMieExponentialDistribution(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->MieExponentialDistribution; } void SetSkyAtmosphereComponentMieExponentialDistribution(UObject* Object, float InMieExponentialDistribution) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetMieExponentialDistribution(InMieExponentialDistribution); } float GetSkyAtmosphereComponentOtherAbsorptionScale(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->OtherAbsorptionScale; } void SetSkyAtmosphereComponentOtherAbsorptionScale(UObject* Object, float InOtherAbsorptionScale) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetOtherAbsorptionScale(InOtherAbsorptionScale); } FIntermediateColor GetSkyAtmosphereComponentOtherAbsorption(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Linear); const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return FIntermediateColor(SkyAtmosphereComponent->OtherAbsorption); } void SetSkyAtmosphereComponentOtherAbsorption(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { ensure(InColorType == EColorPropertyType::Linear); USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetOtherAbsorption(InColor.GetLinearColor()); } float GetSkyAtmosphereComponentRayleighScatteringScale(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->RayleighScatteringScale; } void SetSkyAtmosphereComponentRayleighScatteringScale(UObject* Object, float InRayleighScatteringScale) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetRayleighScatteringScale(InRayleighScatteringScale); } float GetSkyAtmosphereComponentRayleighExponentialDistribution(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->RayleighExponentialDistribution; } void SetSkyAtmosphereComponentRayleighExponentialDistribution(UObject* Object, float InRayleighExponentialDistribution) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetRayleighExponentialDistribution(InRayleighExponentialDistribution); } float GetSkyAtmosphereComponentAerialPerspectiveViewDistanceScale(const UObject* Object) { const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return SkyAtmosphereComponent->AerialPespectiveViewDistanceScale; } void SetSkyAtmosphereComponentAerialPerspectiveViewDistanceScale(UObject* Object, float InAerialPerspectiveViewDistanceScale) { USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetAerialPespectiveViewDistanceScale(InAerialPerspectiveViewDistanceScale); } FIntermediateColor GetSkyAtmosphereComponentMieAbsorption(const UObject* Object, EColorPropertyType InColorType) { // USkyAtmosphereComponent::MieAbsorption is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return FIntermediateColor(SkyAtmosphereComponent->MieAbsorption); } void SetSkyAtmosphereComponentMieAbsorption(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // USkyAtmosphereComponent::MieAbsorption is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetMieAbsorption(InColor.GetLinearColor()); } FIntermediateColor GetSkyAtmosphereComponentMieScattering(const UObject* Object, EColorPropertyType InColorType) { // USkyAtmosphereComponent::MieScattering is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return FIntermediateColor(SkyAtmosphereComponent->MieScattering); } void SetSkyAtmosphereComponentMieScattering(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // USkyAtmosphereComponent::MieScattering is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetMieScattering(InColor.GetLinearColor()); } FIntermediateColor GetSkyAtmosphereComponentRayleighScattering(const UObject* Object, EColorPropertyType InColorType) { // USkyAtmosphereComponent::RayleighScattering is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return FIntermediateColor(SkyAtmosphereComponent->RayleighScattering); } void SetSkyAtmosphereComponentRayleighScattering(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // USkyAtmosphereComponent::RayleighScattering is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetRayleighScattering(InColor.GetLinearColor()); } FIntermediateColor GetSkyAtmosphereComponentSkyLuminanceFactor(const UObject* Object, EColorPropertyType InColorType) { // USkyAtmosphereComponent::SkyLuminanceFactor is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); const USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); return FIntermediateColor(SkyAtmosphereComponent->SkyLuminanceFactor); } void SetSkyAtmosphereComponentSkyLuminanceFactor(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // USkyAtmosphereComponent::SkyLuminanceFactor is a FLinearColor. FIntermediateColor is always blended and dealt with // in linear space so it should be safe to reinterpret it as linear. ensure(InColorType == EColorPropertyType::Linear); USkyAtmosphereComponent* SkyAtmosphereComponent = CastChecked(Object); SkyAtmosphereComponent->SetSkyLuminanceFactor(InColor.GetLinearColor()); } float GetMassScale(const UObject* Object) { const UPrimitiveComponent* PrimitiveComponent = CastChecked(Object); return PrimitiveComponent->GetMassScale(); } void SetMassScale(UObject* Object, float InMassScale) { UPrimitiveComponent* PrimitiveComponent = CastChecked(Object); PrimitiveComponent->SetMassScale(NAME_None, InMassScale); } float GetExponentialHeightFogComponentFogDensity(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->FogDensity; } void SetExponentialHeightFogComponentFogDensity(UObject* Object, float InFogDensity) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetFogDensity(InFogDensity); } float GetExponentialHeightFogComponentFogHeightFalloff(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->FogHeightFalloff; } void SetExponentialHeightFogComponentFogHeightFalloff(UObject* Object, float InFogHeightFalloff) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetFogHeightFalloff(InFogHeightFalloff); } float GetExponentialHeightFogComponentFogMaxOpacity(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->FogMaxOpacity; } void SetExponentialHeightFogComponentFogMaxOpacity(UObject* Object, float InFogMaxOpacity) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetFogMaxOpacity(InFogMaxOpacity); } float GetExponentialHeightFogComponentDirectionalInscatteringExponent(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->DirectionalInscatteringExponent; } void SetExponentialHeightFogComponentDirectionalInscatteringExponent(UObject* Object, float InDirectionalInscatteringExponent) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetDirectionalInscatteringExponent(InDirectionalInscatteringExponent); } float GetExponentialHeightFogComponentStartDistance(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->StartDistance; } void SetExponentialHeightFogComponentStartDistance(UObject* Object, float InStartDistance) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetStartDistance(InStartDistance); } float GetExponentialHeightFogComponentVolumetricFogExtinctionScale(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->VolumetricFogExtinctionScale; } void SetExponentialHeightFogComponentVolumetricFogExtinctionScale(UObject* Object, float InVolumetricFogExtinctionScale) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetVolumetricFogExtinctionScale(InVolumetricFogExtinctionScale); } float GetExponentialHeightFogComponentVolumetricFogStartDistance(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->VolumetricFogStartDistance; } void SetExponentialHeightFogComponentVolumetricFogStartDistance(UObject* Object, float InVolumetricFogStartDistance) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetVolumetricFogStartDistance(InVolumetricFogStartDistance); } float GetExponentialHeightFogComponentVolumetricFogNearFadeInDistance(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->VolumetricFogNearFadeInDistance; } void SetExponentialHeightFogComponentVolumetricFogNearFadeInDistance(UObject* Object, float InVolumetricFogNearFadeInDistance) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetVolumetricFogNearFadeInDistance(InVolumetricFogNearFadeInDistance); } FIntermediateColor GetExponentialHeightFogComponentDirectionalInscatteringColor(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Linear); const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return FIntermediateColor(ExponentialHeightFogComponent->DirectionalInscatteringLuminance); } void SetExponentialHeightFogComponentDirectionalInscatteringColor(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { ensure(InColorType == EColorPropertyType::Linear); UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetDirectionalInscatteringColor(InColor.GetLinearColor()); } FIntermediateColor GetExponentialHeightFogComponentFogInscatteringColor(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Linear); const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return FIntermediateColor(ExponentialHeightFogComponent->FogInscatteringLuminance); } void SetExponentialHeightFogComponentFogInscatteringColor(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { ensure(InColorType == EColorPropertyType::Linear); UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetFogInscatteringColor(InColor.GetLinearColor()); } FIntermediateColor GetExponentialHeightFogVolumetricFogAlbedo(const UObject* Object, EColorPropertyType InColorType) { // UExponentialHeightFog::VolumetricFogAlbedo is an FColor. FIntermediateColor is always blended and dealt with // in linear space, so reinterpret the color. ensure(InColorType == EColorPropertyType::Color); const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return FIntermediateColor(ExponentialHeightFogComponent->VolumetricFogAlbedo); } void SetExponentialHeightFogVolumetricFogAlbedo(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { // UExponentialHeightFog::VolumetricFogAlbedo is an FColor. FIntermediateColor is always blended and dealt with // in linear space, so reinterpret the color back to FColor when setting via the public interface. ensure(InColorType == EColorPropertyType::Color); UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetVolumetricFogAlbedo(InColor.GetColor()); } float GetSecondFogDataFogDensity(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->SecondFogData.FogDensity; } void SetSecondFogDataFogDensity(UObject* Object, float InFogDensity) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetSecondFogDensity(InFogDensity); } float GetSecondFogDataFogHeightFalloff(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->SecondFogData.FogHeightFalloff; } void SetSecondFogDataFogHeightFalloff(UObject* Object, float InFogHeightFalloff) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetSecondFogHeightFalloff(InFogHeightFalloff); } float GetSecondFogDataFogHeightOffset(const UObject* Object) { const UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); return ExponentialHeightFogComponent->SecondFogData.FogHeightOffset; } void SetSecondFogDataFogHeightOffset(UObject* Object, float InFogHeightOffset) { UExponentialHeightFogComponent* ExponentialHeightFogComponent = CastChecked(Object); ExponentialHeightFogComponent->SetSecondFogHeightOffset(InFogHeightOffset); } float GetLocalFogVolumeComponentRadialFogExtinction(const UObject* Object) { const ULocalFogVolumeComponent* LocalFogVolumeComponent = CastChecked(Object); return LocalFogVolumeComponent->RadialFogExtinction; } void SetLocalFogVolumeComponentRadialFogExtinction(UObject* Object, float InRadialFogExtinction) { ULocalFogVolumeComponent* LocalFogVolumeComponent = CastChecked(Object); LocalFogVolumeComponent->SetRadialFogExtinction(InRadialFogExtinction); } FIntermediateColor GetLocalFogVolumeComponentFogAlbedo(const UObject* Object, EColorPropertyType InColorType) { ensure(InColorType == EColorPropertyType::Linear); const ULocalFogVolumeComponent* LocalFogVolumeComponent = CastChecked(Object); return FIntermediateColor(LocalFogVolumeComponent->FogAlbedo); } void SetLocalFogVolumeComponentFogAlbedo(UObject* Object, EColorPropertyType InColorType, const FIntermediateColor& InColor) { ensure(InColorType == EColorPropertyType::Linear); ULocalFogVolumeComponent* LocalFogVolumeComponent = CastChecked(Object); LocalFogVolumeComponent->SetFogAlbedo(InColor.GetLinearColor()); } FObjectComponent GetSkeletalMeshAsset(const UObject* Object, FObjectPropertyTraits::FObjectMetadata ObjectMetadata) { const USkeletalMeshComponent* SkeletalMeshComponent = CastChecked(Object); return FObjectComponent::Strong(SkeletalMeshComponent->GetSkeletalMeshAsset()); } void SetSkeletalMeshAsset(UObject* Object, FObjectPropertyTraits::FObjectMetadata ObjectMetadata, const FObjectComponent& InSkeletalMeshAsset) { USkeletalMeshComponent* SkeletalMeshComponent = CastChecked(Object); SkeletalMeshComponent->SetSkeletalMeshAsset(Cast(InSkeletalMeshAsset.GetObject())); } FObjectComponent GetSkeletalMesh_DEPRECATED(const UObject* Object, FObjectPropertyTraits::FObjectMetadata ObjectMetadata) { const USkinnedMeshComponent* SkinnedMeshComponent = CastChecked(Object); PRAGMA_DISABLE_DEPRECATION_WARNINGS return FObjectComponent::Strong(SkinnedMeshComponent->GetSkeletalMesh_DEPRECATED()); PRAGMA_ENABLE_DEPRECATION_WARNINGS } void SetSkeletalMesh_DEPRECATED(UObject* Object, FObjectPropertyTraits::FObjectMetadata ObjectMetadata, const FObjectComponent& InSkeletalMeshAsset) { USkinnedMeshComponent* SkinnedMeshComponent = CastChecked(Object); PRAGMA_DISABLE_DEPRECATION_WARNINGS SkinnedMeshComponent->SetSkeletalMesh_DEPRECATED(Cast(InSkeletalMeshAsset.GetObject())); PRAGMA_ENABLE_DEPRECATION_WARNINGS } void InitializeMovieSceneTracksAccessors(FMovieSceneTracksComponentTypes* TracksComponents) { // We have some custom accessors for well-known types. // LightComponent TracksComponents->Accessors.Color.Add( ULightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULightComponent, LightColor), GetLightComponentLightColor, SetLightComponentLightColor); TracksComponents->Accessors.Float.Add( ULightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULightComponent, Intensity), GetLightComponentIntensity, SetLightComponentIntensity); TracksComponents->Accessors.Float.Add( ULightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULightComponent, VolumetricScatteringIntensity), GetLightComponentVolumetricScatteringIntensity, SetLightComponentVolumetricScatteringIntensity); TracksComponents->Accessors.Float.Add( ULightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULightComponent, IndirectLightingIntensity), GetLightComponentIndirectLightingIntensity, SetLightComponentIndirectLightingIntensity); // DirectionalLightComponent TracksComponents->Accessors.Float.Add( UDirectionalLightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UDirectionalLightComponent, LightSourceAngle), GetDirectionalLightComponentLightSourceAngle, SetDirectionalLightComponentLightSourceAngle); // SkyLightComponent TracksComponents->Accessors.Color.Add( USkyLightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyLightComponent, LightColor), GetSkyLightComponentLightColor, SetSkyLightComponentLightColor); TracksComponents->Accessors.Float.Add( USkyLightComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyLightComponent, Intensity), GetSkyLightComponentIntensity, SetSkyLightComponentIntensity); // SkyAtmosphereComponent TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, MieScatteringScale), GetSkyAtmosphereComponentMieScatteringScale, SetSkyAtmosphereComponentMieScatteringScale); TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, MieExponentialDistribution), GetSkyAtmosphereComponentMieExponentialDistribution, SetSkyAtmosphereComponentMieExponentialDistribution); TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, OtherAbsorptionScale), GetSkyAtmosphereComponentOtherAbsorptionScale, SetSkyAtmosphereComponentOtherAbsorptionScale); TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, RayleighExponentialDistribution), GetSkyAtmosphereComponentRayleighExponentialDistribution, SetSkyAtmosphereComponentRayleighExponentialDistribution); TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, RayleighScatteringScale), GetSkyAtmosphereComponentRayleighScatteringScale, SetSkyAtmosphereComponentRayleighScatteringScale); TracksComponents->Accessors.Float.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, AerialPespectiveViewDistanceScale), GetSkyAtmosphereComponentAerialPerspectiveViewDistanceScale, SetSkyAtmosphereComponentAerialPerspectiveViewDistanceScale); TracksComponents->Accessors.Color.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, MieAbsorption), GetSkyAtmosphereComponentMieAbsorption, SetSkyAtmosphereComponentMieAbsorption); TracksComponents->Accessors.Color.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, MieScattering), GetSkyAtmosphereComponentMieScattering, SetSkyAtmosphereComponentMieScattering); TracksComponents->Accessors.Color.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, OtherAbsorption), GetSkyAtmosphereComponentOtherAbsorption, SetSkyAtmosphereComponentOtherAbsorption); TracksComponents->Accessors.Color.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, RayleighScattering), GetSkyAtmosphereComponentRayleighScattering, SetSkyAtmosphereComponentRayleighScattering); TracksComponents->Accessors.Color.Add( USkyAtmosphereComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(USkyAtmosphereComponent, SkyLuminanceFactor), GetSkyAtmosphereComponentSkyLuminanceFactor, SetSkyAtmosphereComponentSkyLuminanceFactor); // PrimitiveComponent const FString MassScalePath = FString::Printf(TEXT("%s.%s"), GET_MEMBER_NAME_STRING_CHECKED(UPrimitiveComponent, BodyInstance), GET_MEMBER_NAME_STRING_CHECKED(FBodyInstance, MassScale)); TracksComponents->Accessors.Float.Add( UPrimitiveComponent::StaticClass(), *MassScalePath, GetMassScale, SetMassScale); // ExponentialHeightFogComponent TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, FogDensity), GetExponentialHeightFogComponentFogDensity, SetExponentialHeightFogComponentFogDensity); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, FogHeightFalloff), GetExponentialHeightFogComponentFogHeightFalloff, SetExponentialHeightFogComponentFogHeightFalloff); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, DirectionalInscatteringExponent), GetExponentialHeightFogComponentDirectionalInscatteringExponent, SetExponentialHeightFogComponentDirectionalInscatteringExponent); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, StartDistance), GetExponentialHeightFogComponentStartDistance, SetExponentialHeightFogComponentStartDistance); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, VolumetricFogStartDistance), GetExponentialHeightFogComponentVolumetricFogStartDistance, SetExponentialHeightFogComponentVolumetricFogStartDistance); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, VolumetricFogNearFadeInDistance), GetExponentialHeightFogComponentVolumetricFogNearFadeInDistance, SetExponentialHeightFogComponentVolumetricFogNearFadeInDistance); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, VolumetricFogExtinctionScale), GetExponentialHeightFogComponentVolumetricFogExtinctionScale, SetExponentialHeightFogComponentVolumetricFogExtinctionScale); TracksComponents->Accessors.Color.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, DirectionalInscatteringLuminance), GetExponentialHeightFogComponentDirectionalInscatteringColor, SetExponentialHeightFogComponentDirectionalInscatteringColor); TracksComponents->Accessors.Color.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, FogInscatteringLuminance), GetExponentialHeightFogComponentFogInscatteringColor, SetExponentialHeightFogComponentFogInscatteringColor); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, FogMaxOpacity), GetExponentialHeightFogComponentFogMaxOpacity, SetExponentialHeightFogComponentFogMaxOpacity); TracksComponents->Accessors.Color.Add( UExponentialHeightFogComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(UExponentialHeightFogComponent, VolumetricFogAlbedo), GetExponentialHeightFogVolumetricFogAlbedo, SetExponentialHeightFogVolumetricFogAlbedo); const FString SecondFogDataFogDensityPath = FString::Printf(TEXT("%s.%s"), GET_MEMBER_NAME_STRING_CHECKED(UExponentialHeightFogComponent, SecondFogData), GET_MEMBER_NAME_STRING_CHECKED(FExponentialHeightFogData, FogDensity)); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), *SecondFogDataFogDensityPath, GetSecondFogDataFogDensity, SetSecondFogDataFogDensity); const FString SecondFogDataFogHeightFalloffPath = FString::Printf(TEXT("%s.%s"), GET_MEMBER_NAME_STRING_CHECKED(UExponentialHeightFogComponent, SecondFogData), GET_MEMBER_NAME_STRING_CHECKED(FExponentialHeightFogData, FogHeightFalloff)); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), *SecondFogDataFogHeightFalloffPath, GetSecondFogDataFogHeightFalloff, SetSecondFogDataFogHeightFalloff); const FString SecondFogDataFogHeightOffsetPath = FString::Printf(TEXT("%s.%s"), GET_MEMBER_NAME_STRING_CHECKED(UExponentialHeightFogComponent, SecondFogData), GET_MEMBER_NAME_STRING_CHECKED(FExponentialHeightFogData, FogHeightOffset)); TracksComponents->Accessors.Float.Add( UExponentialHeightFogComponent::StaticClass(), *SecondFogDataFogHeightOffsetPath, GetSecondFogDataFogHeightOffset, SetSecondFogDataFogHeightOffset); // LocalFogVolumeComponent TracksComponents->Accessors.Float.Add( ULocalFogVolumeComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULocalFogVolumeComponent, RadialFogExtinction), GetLocalFogVolumeComponentRadialFogExtinction, SetLocalFogVolumeComponentRadialFogExtinction); TracksComponents->Accessors.Color.Add( ULocalFogVolumeComponent::StaticClass(), GET_MEMBER_NAME_CHECKED(ULocalFogVolumeComponent, FogAlbedo), GetLocalFogVolumeComponentFogAlbedo, SetLocalFogVolumeComponentFogAlbedo); // SceneComponent TracksComponents->Accessors.ComponentTransform.Add(USceneComponent::StaticClass(), "Transform", &GetComponentTransform, &SetComponentTransformAndVelocity); // SkeletalMeshComponent TracksComponents->Accessors.Object.Add(USkeletalMeshComponent::StaticClass(), "SkeletalMeshAsset", &GetSkeletalMeshAsset, &SetSkeletalMeshAsset, { USkeletalMeshComponent::StaticClass(), true }); //SkinnedMeshComponent TracksComponents->Accessors.Object.Add(USkinnedMeshComponent::StaticClass(), "SkeletalMesh", &GetSkeletalMesh_DEPRECATED, &SetSkeletalMesh_DEPRECATED, { USkinnedMeshComponent::StaticClass() , true}); } } // namespace UE::MovieScene