diff --git a/FearTheTimeloop/Assertions.7z b/FearTheTimeloop/Assertions.7z new file mode 100644 index 0000000..8eb162b Binary files /dev/null and b/FearTheTimeloop/Assertions.7z differ diff --git a/FearTheTimeloop/NameCollisions.inl b/FearTheTimeloop/NameCollisions.inl new file mode 100644 index 0000000..1b2c018 --- /dev/null +++ b/FearTheTimeloop/NameCollisions.inl @@ -0,0 +1,277 @@ +#pragma once + +/* +* SDK generated by Dumper-7 +* +* https://github.com/Encryqed/Dumper-7 +*/ + +// FORWARD DECLARATIONS + + +namespace ABP_Enemy_Scarface { struct FAnimBlueprintGeneratedConstantData; } + +namespace CR_Mannequin_Procedural { class UCR_Mannequin_Procedural_C; } + +namespace ABP_Enemy_Nurse { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Flashlight_Pistol2H { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Clown { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Zombie { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Surgeon { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Wincheser1873 { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Static { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Manny_To_Cooper_Retargeter { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Anger_Face { struct FAnimBlueprintGeneratedConstantData; } + +namespace W_PainkillersTooltip_0 { class UW_PainkillersTooltip_C; } + +namespace ABP_Injured_Shotgun { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Watch { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Kamikaze { struct FAnimBlueprintGeneratedConstantData; } + +namespace W_PainkillersTooltip { class UW_PainkillersTooltip_C; } + +namespace ABP_Enemy_Retargeter { struct FAnimBlueprintGeneratedConstantData; } + +namespace Face_AnimBP { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Monkey { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Guilt_Burden { struct FAnimBlueprintGeneratedConstantData; } + +namespace BP_Prefab_Parent_0 { class ABP_Prefab_Parent_C; } + +namespace ABP_Guilt_Face { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_Harrison { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Manny_To_Guilt_Retargeter { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_InteractionLayer { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Flashlight_Default { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_GuiltFace_PostProcess { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Weapon_Pistol2H_Deagle { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_CopyPose { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Tooo_FaceMesh_PostProcess { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Weapon_Pistol2H_DefaultHandgun { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Weapon_Pistol2H_OldPistol { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Injured_AR10 { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Injured_DoubleBarrel { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Injured_Default { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_DefaultShotgun { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Cooper_Face { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_DoubleBarrel { struct FAnimBlueprintGeneratedConstantData; } + +namespace ABP_Enemy_BiggySmoke { struct FAnimBlueprintGeneratedConstantData; } + +namespace BP_Prefab_Parent { class ABP_Prefab_Parent_C; } + +namespace CR_Mannequin_Procedural_0 { class UCR_Mannequin_Procedural_C; } + +namespace E_InteractionType { enum class E_InteractionType : uint8; } + +namespace E_InteractionType_0 { enum class E_InteractionType : uint8; } + + +namespace ABP_Weapon_WalkieTalkie +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Enemy_Identity_Base +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Padlock +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Weapon_AR10 +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_OldPistol +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Manny_PostProcess_0 +{ + struct FAnimBlueprintGeneratedConstantData; + class UABP_Manny_PostProcess_C; +} + +namespace ABP_Enemy +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Enemy_Sinner +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Weapon_Winchester +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace Face_PostProcess_AnimBP +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Weapon_Unarmed +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Manny_PostProcess +{ + class UABP_Manny_PostProcess_C; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Enemy_Identity_Anger +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Enemy_Identity_Guilt +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Weapon_PoliceTonfa +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Overlay_LeftHand_Base +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Weapon_DoubleBarrel +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_MM_Overlayed +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace m_tal_nrw_animbp_Cinematic +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_ExhangeMachine +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_CarryPerson +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace m_med_nrw_animbp_High +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Weapon_Shotgun +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_LayerBlending +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Weapon_Pistol2H_Base +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_MM_Locomotion +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_AR10 +{ + struct FAnimBlueprintGeneratedMutableData; + struct FAnimBlueprintGeneratedConstantData; +} + +namespace ABP_Overlay_Simple_Base +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_Deagle +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} + +namespace ABP_DefaultHandgun +{ + struct FAnimBlueprintGeneratedConstantData; + struct FAnimBlueprintGeneratedMutableData; +} diff --git a/FearTheTimeloop/PropertyFixup.hpp b/FearTheTimeloop/PropertyFixup.hpp new file mode 100644 index 0000000..6728734 --- /dev/null +++ b/FearTheTimeloop/PropertyFixup.hpp @@ -0,0 +1,21 @@ +#pragma once + +/* +* SDK generated by Dumper-7 +* +* https://github.com/Encryqed/Dumper-7 +*/ + +// PROPERTY-FIXUP + + +namespace SDK +{ + +class alignas(0x01) FMulticastSparseDelegateProperty_ +{ + unsigned __int8 Pad[0x1]; +}; + +} + diff --git a/FearTheTimeloop/SDK.hpp b/FearTheTimeloop/SDK.hpp new file mode 100644 index 0000000..946648b --- /dev/null +++ b/FearTheTimeloop/SDK.hpp @@ -0,0 +1,1592 @@ +#pragma once + +/* +* SDK generated by Dumper-7 +* +* https://github.com/Encryqed/Dumper-7 +*/ + +// FearTheTimeloop +// 5.5.4-40574608+++UE5+Release-5.5 + +// Includes the entire SDK. Include files directly for faster compilation! + +#include "SDK/Basic.hpp" +#include "SDK/CoreUObject_structs.hpp" +#include "SDK/InputCore_structs.hpp" +#include "SDK/Slate_structs.hpp" +#include "SDK/PhysicsCore_structs.hpp" +#include "SDK/Chaos_structs.hpp" +#include "SDK/SlateCore_structs.hpp" +#include "SDK/Engine_structs.hpp" +#include "SDK/E_AIState_structs.hpp" +#include "SDK/CoreUObject_classes.hpp" +#include "SDK/BTT_AI_Sinner_Fire_classes.hpp" +#include "SDK/AnimationCore_structs.hpp" +#include "SDK/AnimationCore_classes.hpp" +#include "SDK/S_Sound_structs.hpp" +#include "SDK/ClothingSystemRuntimeInterface_structs.hpp" +#include "SDK/DeveloperSettings_structs.hpp" +#include "SDK/DeveloperSettings_classes.hpp" +#include "SDK/AudioPlatformConfiguration_structs.hpp" +#include "SDK/PhysicsCore_classes.hpp" +#include "SDK/AudioExtensions_structs.hpp" +#include "SDK/AudioExtensions_classes.hpp" +#include "SDK/FieldNotification_structs.hpp" +#include "SDK/NetCore_structs.hpp" +#include "SDK/NetCore_classes.hpp" +#include "SDK/Engine_classes.hpp" +#include "SDK/BPC_SafeZoneHandler_classes.hpp" +#include "SDK/InputCore_classes.hpp" +#include "SDK/E_MovementKey_structs.hpp" +#include "SDK/SlateCore_classes.hpp" +#include "SDK/ImageCore_structs.hpp" +#include "SDK/ImageCore_classes.hpp" +#include "SDK/Slate_classes.hpp" +#include "SDK/EngineSettings_structs.hpp" +#include "SDK/EngineSettings_classes.hpp" +#include "SDK/PDA_RifleDamageIncrease_classes.hpp" +#include "SDK/BuildPatchServices_structs.hpp" +#include "SDK/BuildPatchServices_classes.hpp" +#include "SDK/ChaosVDBlueprint_classes.hpp" +#include "SDK/AnimationSharing_structs.hpp" +#include "SDK/AnimationSharing_classes.hpp" +#include "SDK/FieldNotification_classes.hpp" +#include "SDK/E_TooltipType_structs.hpp" +#include "SDK/PDA_TooltipDefinition_classes.hpp" +#include "SDK/BP_Wall_Mount_Autopsy_Station_Enum_structs.hpp" +#include "SDK/BP_MouthStation_classes.hpp" +#include "SDK/IrisCore_structs.hpp" +#include "SDK/IrisCore_classes.hpp" +#include "SDK/MeshDescription_structs.hpp" +#include "SDK/MeshDescription_classes.hpp" +#include "SDK/UniversalObjectLocator_structs.hpp" +#include "SDK/MovieScene_structs.hpp" +#include "SDK/UMG_structs.hpp" +#include "SDK/E_GameMode_structs.hpp" +#include "SDK/W_MauserWeaponDisplayer_classes.hpp" +#include "SDK/StaticMeshDescription_structs.hpp" +#include "SDK/StaticMeshDescription_classes.hpp" +#include "SDK/SkeletalMeshDescription_structs.hpp" +#include "SDK/SkeletalMeshDescription_classes.hpp" +#include "SDK/DataflowCore_structs.hpp" +#include "SDK/DataflowCore_classes.hpp" +#include "SDK/PropertyPath_structs.hpp" +#include "SDK/PropertyPath_classes.hpp" +#include "SDK/BP_HandleSecondTaskTrigger_classes.hpp" +#include "SDK/TypedElementFramework_structs.hpp" +#include "SDK/TypedElementFramework_classes.hpp" +#include "SDK/TypedElementRuntime_structs.hpp" +#include "SDK/TypedElementRuntime_classes.hpp" +#include "SDK/AudioLinkCore_classes.hpp" +#include "SDK/ABP_CopyPose_structs.hpp" +#include "SDK/AnimGraphRuntime_structs.hpp" +#include "SDK/ABP_CopyPose_classes.hpp" +#include "SDK/JsonUtilities_structs.hpp" +#include "SDK/JsonUtilities_classes.hpp" +#include "SDK/AssetRegistry_structs.hpp" +#include "SDK/AssetRegistry_classes.hpp" +#include "SDK/W_QuickMenuAction_classes.hpp" +#include "SDK/PacketHandler_classes.hpp" +#include "SDK/ClothingSystemRuntimeInterface_classes.hpp" +#include "SDK/E_InputDevice_structs.hpp" +#include "SDK/W_InputHint_classes.hpp" +#include "SDK/ImageWriteQueue_structs.hpp" +#include "SDK/ImageWriteQueue_classes.hpp" +#include "SDK/BP_JumpInput_classes.hpp" +#include "SDK/MaterialShaderQualitySettings_structs.hpp" +#include "SDK/MaterialShaderQualitySettings_classes.hpp" +#include "SDK/m_tal_nrw_animbp_Cinematic_structs.hpp" +#include "SDK/Constraints_structs.hpp" +#include "SDK/RigVM_structs.hpp" +#include "SDK/ControlRig_structs.hpp" +#include "SDK/m_tal_nrw_animbp_Cinematic_classes.hpp" +#include "SDK/EyeTracker_structs.hpp" +#include "SDK/EyeTracker_classes.hpp" +#include "SDK/Renderer_structs.hpp" +#include "SDK/Renderer_classes.hpp" +#include "SDK/HeadMountedDisplay_structs.hpp" +#include "SDK/HeadMountedDisplay_classes.hpp" +#include "SDK/PDA_AdditiveWeaponsCollected_classes.hpp" +#include "SDK/Foliage_structs.hpp" +#include "SDK/Foliage_classes.hpp" +#include "SDK/Landscape_structs.hpp" +#include "SDK/Landscape_classes.hpp" +#include "SDK/BP_CeilingTile_4x4_01a_classes.hpp" +#include "SDK/BP_Meddevice_Stack_01a_classes.hpp" +#include "SDK/SlateRHIRenderer_structs.hpp" +#include "SDK/SlateRHIRenderer_classes.hpp" +#include "SDK/BP_EndRescueSignal_classes.hpp" +#include "SDK/TimeManagement_structs.hpp" +#include "SDK/TimeManagement_classes.hpp" +#include "SDK/BP_TriggerEnemySpawn_classes.hpp" +#include "SDK/MovieScene_classes.hpp" +#include "SDK/BP_CeilingTile_6x8_01a_classes.hpp" +#include "SDK/DataflowEngine_structs.hpp" +#include "SDK/DataflowEngine_classes.hpp" +#include "SDK/DataflowSimulation_structs.hpp" +#include "SDK/DataflowSimulation_classes.hpp" +#include "SDK/ChaosSolverEngine_structs.hpp" +#include "SDK/ChaosSolverEngine_classes.hpp" +#include "SDK/FieldSystemEngine_structs.hpp" +#include "SDK/FieldSystemEngine_classes.hpp" +#include "SDK/GeometryCollectionEngine_structs.hpp" +#include "SDK/GeometryCollectionEngine_classes.hpp" +#include "SDK/S_DialogueAnimation_structs.hpp" +#include "SDK/S_DialogueLine_structs.hpp" +#include "SDK/S_Voice_structs.hpp" +#include "SDK/BP_CandyMachineStation_classes.hpp" +#include "SDK/E_CombinationDirection_structs.hpp" +#include "SDK/W_SafeStation_classes.hpp" +#include "SDK/AnimGraphRuntime_classes.hpp" +#include "SDK/BP_ToiletDoor_classes.hpp" +#include "SDK/Constraints_classes.hpp" +#include "SDK/BP_FlashlightQuickTooltip_classes.hpp" +#include "SDK/MovieSceneTracks_structs.hpp" +#include "SDK/MovieSceneTracks_classes.hpp" +#include "SDK/BP_ContextOnPickupObserver_classes.hpp" +#include "SDK/RigLogicModule_structs.hpp" +#include "SDK/W_SaveStation_classes.hpp" +#include "SDK/UMG_classes.hpp" +#include "SDK/BP_FirePoint_01a_classes.hpp" +#include "SDK/W_Display_FrameRate_classes.hpp" +#include "SDK/CinematicCamera_structs.hpp" +#include "SDK/CinematicCamera_classes.hpp" +#include "SDK/AudioLinkEngine_classes.hpp" +#include "SDK/E_Enemy_Identity_structs.hpp" +#include "SDK/S_BonusesData_structs.hpp" +#include "SDK/AudioMixer_structs.hpp" +#include "SDK/AudioMixer_classes.hpp" +#include "SDK/GameplayTags_structs.hpp" +#include "SDK/GameplayTags_classes.hpp" +#include "SDK/BP_Decal_Graffiti_01c_classes.hpp" +#include "SDK/MovieSceneCapture_structs.hpp" +#include "SDK/MovieSceneCapture_classes.hpp" +#include "SDK/DmgTypeBP_Environmental_classes.hpp" +#include "SDK/MediaAssets_structs.hpp" +#include "SDK/MediaAssets_classes.hpp" +#include "SDK/LevelSequence_structs.hpp" +#include "SDK/LevelSequence_classes.hpp" +#include "SDK/MRMesh_structs.hpp" +#include "SDK/MRMesh_classes.hpp" +#include "SDK/BP_Switcher_classes.hpp" +#include "SDK/MoviePlayer_structs.hpp" +#include "SDK/MoviePlayer_classes.hpp" +#include "SDK/S_Item_structs.hpp" +#include "SDK/S_SpawnableItem_structs.hpp" +#include "SDK/E_DamageType_structs.hpp" +#include "SDK/E_DamageWeapon_structs.hpp" +#include "SDK/E_DamageResponse_structs.hpp" +#include "SDK/S_DamageInfo_structs.hpp" +#include "SDK/E_Attack_Phase_structs.hpp" +#include "SDK/S_WeaponReactionMultiplier_structs.hpp" +#include "SDK/S_BodyPart_structs.hpp" +#include "SDK/S_StaggerSettings_structs.hpp" +#include "SDK/S_PartStagger_structs.hpp" +#include "SDK/S_AIStaggerSettings_structs.hpp" +#include "SDK/E_FoleyEventSide_structs.hpp" +#include "SDK/E_GuiltAttackType_structs.hpp" +#include "SDK/BP_Guilt_classes.hpp" +#include "SDK/MassEntity_structs.hpp" +#include "SDK/MassEntity_classes.hpp" +#include "SDK/AvfMediaFactory_classes.hpp" +#include "SDK/Overlay_structs.hpp" +#include "SDK/Overlay_classes.hpp" +#include "SDK/ClothingSystemRuntimeCommon_structs.hpp" +#include "SDK/ClothingSystemRuntimeCommon_classes.hpp" +#include "SDK/ClothingSystemRuntimeNv_structs.hpp" +#include "SDK/ClothingSystemRuntimeNv_classes.hpp" +#include "SDK/BlendStack_structs.hpp" +#include "SDK/BlendStack_classes.hpp" +#include "SDK/LevelBlock_Traversable_classes.hpp" +#include "SDK/PoseSearch_structs.hpp" +#include "SDK/PoseSearch_classes.hpp" +#include "SDK/MotionWarping_structs.hpp" +#include "SDK/MotionWarping_classes.hpp" +#include "SDK/BP_StreamingLevelRender_classes.hpp" +#include "SDK/MotionTrajectory_structs.hpp" +#include "SDK/MotionTrajectory_classes.hpp" +#include "SDK/AnimationWarpingRuntime_structs.hpp" +#include "SDK/AnimationWarpingRuntime_classes.hpp" +#include "SDK/E_Section_structs.hpp" +#include "SDK/E_LightType_structs.hpp" +#include "SDK/BP_PointLight_classes.hpp" +#include "SDK/AnimationLocomotionLibraryRuntime_classes.hpp" +#include "SDK/PDA_EndingAchievement_classes.hpp" +#include "SDK/Chooser_structs.hpp" +#include "SDK/Chooser_classes.hpp" +#include "SDK/ProxyTable_structs.hpp" +#include "SDK/ProxyTable_classes.hpp" +#include "SDK/RigVM_classes.hpp" +#include "SDK/BP_NavigationPoint_classes.hpp" +#include "SDK/W_Graphics_Shadows_classes.hpp" +#include "SDK/ControlRig_classes.hpp" +#include "SDK/RigLogicModule_classes.hpp" +#include "SDK/SequencerScripting_structs.hpp" +#include "SDK/SequencerScripting_classes.hpp" +#include "SDK/W_ShotgunCrosshair_classes.hpp" +#include "SDK/LiveLinkInterface_structs.hpp" +#include "SDK/LiveLinkInterface_classes.hpp" +#include "SDK/LiveLinkAnimationCore_structs.hpp" +#include "SDK/LiveLinkAnimationCore_classes.hpp" +#include "SDK/BPI_Pausable_classes.hpp" +#include "SDK/LiveLink_structs.hpp" +#include "SDK/LiveLink_classes.hpp" +#include "SDK/BP_GuiltSFXHandler_classes.hpp" +#include "SDK/LiveLinkComponents_structs.hpp" +#include "SDK/LiveLinkComponents_classes.hpp" +#include "SDK/LiveLinkMovieScene_structs.hpp" +#include "SDK/LiveLinkMovieScene_classes.hpp" +#include "SDK/TakeMovieScene_classes.hpp" +#include "SDK/W_Camera_RotationLag_classes.hpp" +#include "SDK/AudioCapture_structs.hpp" +#include "SDK/AudioCapture_classes.hpp" +#include "SDK/BP_PatrolRoute_classes.hpp" +#include "SDK/NiagaraCore_structs.hpp" +#include "SDK/NiagaraCore_classes.hpp" +#include "SDK/NiagaraShader_structs.hpp" +#include "SDK/NiagaraShader_classes.hpp" +#include "SDK/Niagara_structs.hpp" +#include "SDK/Niagara_classes.hpp" +#include "SDK/GeometryCache_structs.hpp" +#include "SDK/GeometryCache_classes.hpp" +#include "SDK/HairStrandsCore_structs.hpp" +#include "SDK/HairStrandsCore_classes.hpp" +#include "SDK/ComputeFramework_structs.hpp" +#include "SDK/ComputeFramework_classes.hpp" +#include "SDK/E_Gait_structs.hpp" +#include "SDK/OptimusSettings_structs.hpp" +#include "SDK/OptimusSettings_classes.hpp" +#include "SDK/OptimusCore_structs.hpp" +#include "SDK/OptimusCore_classes.hpp" +#include "SDK/BPI_EnemiesManager_classes.hpp" +#include "SDK/HairStrandsDeformer_structs.hpp" +#include "SDK/HairStrandsDeformer_classes.hpp" +#include "SDK/BPC_SaveLoadComponent_classes.hpp" +#include "SDK/NiagaraAnimNotifies_structs.hpp" +#include "SDK/NiagaraAnimNotifies_classes.hpp" +#include "SDK/GeometryCacheTracks_structs.hpp" +#include "SDK/GeometryCacheTracks_classes.hpp" +#include "SDK/E_ItemSlotAction_structs.hpp" +#include "SDK/AugmentedReality_structs.hpp" +#include "SDK/AugmentedReality_classes.hpp" +#include "SDK/XRBase_classes.hpp" +#include "SDK/AppleImageUtils_structs.hpp" +#include "SDK/AppleImageUtils_classes.hpp" +#include "SDK/W_CodelockCombination_classes.hpp" +#include "SDK/ARUtilities_structs.hpp" +#include "SDK/ARUtilities_classes.hpp" +#include "SDK/AppleARKit_structs.hpp" +#include "SDK/AppleARKit_classes.hpp" +#include "SDK/BP_EnemyActivationObserver_classes.hpp" +#include "SDK/ProceduralMeshComponent_structs.hpp" +#include "SDK/ProceduralMeshComponent_classes.hpp" +#include "SDK/AppleARKitFaceSupport_structs.hpp" +#include "SDK/AppleARKitFaceSupport_classes.hpp" +#include "SDK/BPC_LookHandler_classes.hpp" +#include "SDK/EnhancedInput_structs.hpp" +#include "SDK/W_ControlItem_classes.hpp" +#include "SDK/AppleARKitPoseTrackingLiveLink_classes.hpp" +#include "SDK/BP_EndingHandler_classes.hpp" +#include "SDK/SerializeSubsystem_structs.hpp" +#include "SDK/SerializeSubsystem_classes.hpp" +#include "SDK/SkeletalMerging_structs.hpp" +#include "SDK/SkeletalMerging_classes.hpp" +#include "SDK/BP_OnSaveAdditiveTaskEnable_classes.hpp" +#include "SDK/CustomizableObject_structs.hpp" +#include "SDK/CustomizableObject_classes.hpp" +#include "SDK/HairStrandsMutable_structs.hpp" +#include "SDK/HairStrandsMutable_classes.hpp" +#include "SDK/PhysicsControl_structs.hpp" +#include "SDK/PhysicsControl_classes.hpp" +#include "SDK/NavigationSystem_structs.hpp" +#include "SDK/NavigationSystem_classes.hpp" +#include "SDK/GameplayTasks_structs.hpp" +#include "SDK/GameplayTasks_classes.hpp" +#include "SDK/AIModule_structs.hpp" +#include "SDK/AIModule_classes.hpp" +#include "SDK/Water_structs.hpp" +#include "SDK/Water_classes.hpp" +#include "SDK/W_PoliceBatTooltip_classes.hpp" +#include "SDK/OnlineSubsystem_structs.hpp" +#include "SDK/OnlineSubsystem_classes.hpp" +#include "SDK/S_SlotData_structs.hpp" +#include "SDK/GeometryFramework_structs.hpp" +#include "SDK/GeometryFramework_classes.hpp" +#include "SDK/OnlineSubsystemUtils_structs.hpp" +#include "SDK/OnlineSubsystemUtils_classes.hpp" +#include "SDK/Qos_structs.hpp" +#include "SDK/Qos_classes.hpp" +#include "SDK/Party_structs.hpp" +#include "SDK/Party_classes.hpp" +#include "SDK/Lobby_structs.hpp" +#include "SDK/Lobby_classes.hpp" +#include "SDK/BP_Zombie_Burnt_classes.hpp" +#include "SDK/Hotfix_structs.hpp" +#include "SDK/Hotfix_classes.hpp" +#include "SDK/BP_Decal_Crack_01a_classes.hpp" +#include "SDK/BP_Desk_02b_classes.hpp" +#include "SDK/Rejoin_structs.hpp" +#include "SDK/Rejoin_classes.hpp" +#include "SDK/BP_LeatherCase_classes.hpp" +#include "SDK/OnlineSubsystemSteam_classes.hpp" +#include "SDK/StatsIntegration_structs.hpp" +#include "SDK/StatsIntegration_classes.hpp" +#include "SDK/StateTreeModule_structs.hpp" +#include "SDK/StateTreeModule_classes.hpp" +#include "SDK/GameplayStateTreeModule_structs.hpp" +#include "SDK/GameplayStateTreeModule_classes.hpp" +#include "SDK/ShaderCompilationScreen_classes.hpp" +#include "SDK/S_FuseView_structs.hpp" +#include "SDK/NaniteDisplacedMesh_structs.hpp" +#include "SDK/NaniteDisplacedMesh_classes.hpp" +#include "SDK/WindowsDualsense_ds5w_structs.hpp" +#include "SDK/WindowsDualsense_ds5w_classes.hpp" +#include "SDK/BTT_AI_Anger_Attack_classes.hpp" +#include "SDK/DLSS_structs.hpp" +#include "SDK/DLSS_classes.hpp" +#include "SDK/W_SelectStation_classes.hpp" +#include "SDK/InteractiveToolsFramework_structs.hpp" +#include "SDK/InteractiveToolsFramework_classes.hpp" +#include "SDK/DLSSBlueprint_structs.hpp" +#include "SDK/DLSSBlueprint_classes.hpp" +#include "SDK/ABP_Padlock_structs.hpp" +#include "SDK/ABP_Padlock_classes.hpp" +#include "SDK/NISBlueprint_structs.hpp" +#include "SDK/NISBlueprint_classes.hpp" +#include "SDK/BP_AchievementGainTrigger_classes.hpp" +#include "SDK/FFXFSR3Settings_structs.hpp" +#include "SDK/FFXFSR3Settings_classes.hpp" +#include "SDK/GPUHelper_classes.hpp" +#include "SDK/ABP_Guilt_Face_structs.hpp" +#include "SDK/ABP_Guilt_Face_classes.hpp" +#include "SDK/InterchangeCore_structs.hpp" +#include "SDK/InterchangeCore_classes.hpp" +#include "SDK/S_RoomSavable_structs.hpp" +#include "SDK/InterchangeNodes_structs.hpp" +#include "SDK/InterchangeNodes_classes.hpp" +#include "SDK/W_TextDisplayer_classes.hpp" +#include "SDK/VariantManagerContent_structs.hpp" +#include "SDK/VariantManagerContent_classes.hpp" +#include "SDK/InterchangeEngine_structs.hpp" +#include "SDK/InterchangeEngine_classes.hpp" +#include "SDK/W_InteractionDisable_classes.hpp" +#include "SDK/BP_SaveBonuses_classes.hpp" +#include "SDK/TextureUtilitiesCommon_structs.hpp" +#include "SDK/TextureUtilitiesCommon_classes.hpp" +#include "SDK/S_RoomData_structs.hpp" +#include "SDK/InterchangeFactoryNodes_structs.hpp" +#include "SDK/InterchangeFactoryNodes_classes.hpp" +#include "SDK/BP_UVLightDisable_classes.hpp" +#include "SDK/InterchangeMessages_classes.hpp" +#include "SDK/USDClasses_structs.hpp" +#include "SDK/USDClasses_classes.hpp" +#include "SDK/PBIK_structs.hpp" +#include "SDK/Transient_structs.hpp" +#include "SDK/InterchangeImport_structs.hpp" +#include "SDK/UnrealUSDWrapper_structs.hpp" +#include "SDK/InterchangeImport_classes.hpp" +#include "SDK/InterchangeExport_classes.hpp" +#include "SDK/W_OnePageText_classes.hpp" +#include "SDK/DataflowEnginePlugin_structs.hpp" +#include "SDK/DataflowNodes_structs.hpp" +#include "SDK/InterchangePipelines_structs.hpp" +#include "SDK/InterchangeCommon_structs.hpp" +#include "SDK/InterchangePipelines_classes.hpp" +#include "SDK/BP_Box_01c_classes.hpp" +#include "SDK/GeometryCacheStreamer_classes.hpp" +#include "SDK/E_CandleBurnType_structs.hpp" +#include "SDK/BP_Candle_Cluster_Parent_classes.hpp" +#include "SDK/W_StationSelection_classes.hpp" +#include "SDK/GeometryCacheUSD_classes.hpp" +#include "SDK/BP_InvalidTaskChecker_classes.hpp" +#include "SDK/USDStage_structs.hpp" +#include "SDK/USDStage_classes.hpp" +#include "SDK/AnalyticsBlueprintLibrary_structs.hpp" +#include "SDK/AnalyticsBlueprintLibrary_classes.hpp" +#include "SDK/LocalFileNetworkReplayStreaming_structs.hpp" +#include "SDK/Paper2D_structs.hpp" +#include "SDK/Paper2D_classes.hpp" +#include "SDK/ACLPlugin_structs.hpp" +#include "SDK/ACLPlugin_classes.hpp" +#include "SDK/ABP_ExhangeMachine_structs.hpp" +#include "SDK/ABP_ExhangeMachine_classes.hpp" +#include "SDK/IKRig_structs.hpp" +#include "SDK/IKRig_classes.hpp" +#include "SDK/MetaHumanSDKRuntime_structs.hpp" +#include "SDK/MetaHumanSDKRuntime_classes.hpp" +#include "SDK/EnhancedInput_classes.hpp" +#include "SDK/BP_ST12S_classes.hpp" +#include "SDK/TemplateSequence_structs.hpp" +#include "SDK/TemplateSequence_classes.hpp" +#include "SDK/GameplayCameras_structs.hpp" +#include "SDK/GameplayCameras_classes.hpp" +#include "SDK/EngineCameras_structs.hpp" +#include "SDK/EngineCameras_classes.hpp" +#include "SDK/W_MapView_classes.hpp" +#include "SDK/PDA_InputKeyData_classes.hpp" +#include "SDK/ChaosCaching_structs.hpp" +#include "SDK/ChaosCaching_classes.hpp" +#include "SDK/ChaosCloth_structs.hpp" +#include "SDK/ChaosCloth_classes.hpp" +#include "SDK/W_MauserCrosshair_classes.hpp" +#include "SDK/W_InteractionInfoDisplayer_classes.hpp" +#include "SDK/OodleNetworkHandlerComponent_structs.hpp" +#include "SDK/OodleNetworkHandlerComponent_classes.hpp" +#include "SDK/SignificanceManager_classes.hpp" +#include "SDK/BP_BookShelf_02a_classes.hpp" +#include "SDK/BP_CardReaderStation_classes.hpp" +#include "SDK/UObjectPlugin_structs.hpp" +#include "SDK/UObjectPlugin_classes.hpp" +#include "SDK/W_ContainerSizeChangeTooltip_classes.hpp" +#include "SDK/FacialAnimation_classes.hpp" +#include "SDK/BP_MedDevice_01a_classes.hpp" +#include "SDK/DatasmithContent_structs.hpp" +#include "SDK/DatasmithContent_classes.hpp" +#include "SDK/W_Audio_classes.hpp" +#include "SDK/GLTFExporter_structs.hpp" +#include "SDK/GLTFExporter_classes.hpp" +#include "SDK/AutomationUtils_classes.hpp" +#include "SDK/W_LightTooltip_classes.hpp" +#include "SDK/GeometryCollectionTracks_structs.hpp" +#include "SDK/GeometryCollectionTracks_classes.hpp" +#include "SDK/DataflowEnginePlugin_classes.hpp" +#include "SDK/LocalizableMessage_structs.hpp" +#include "SDK/ModelingOperators_structs.hpp" +#include "SDK/ModelingOperators_classes.hpp" +#include "SDK/W_ItemActions_classes.hpp" +#include "SDK/ModelingComponents_structs.hpp" +#include "SDK/ModelingComponents_classes.hpp" +#include "SDK/MeshModelingTools_structs.hpp" +#include "SDK/MeshModelingTools_classes.hpp" +#include "SDK/MeshModelingToolsExp_structs.hpp" +#include "SDK/MeshModelingToolsExp_classes.hpp" +#include "SDK/ChaosNiagara_structs.hpp" +#include "SDK/ChaosNiagara_classes.hpp" +#include "SDK/S_GridMaterialParams_structs.hpp" +#include "SDK/LocalizableMessageBlueprint_classes.hpp" +#include "SDK/BP_radio_mic_cable_classes.hpp" +#include "SDK/S_SavableItem_structs.hpp" +#include "SDK/NiagaraSimCaching_structs.hpp" +#include "SDK/NiagaraSimCaching_classes.hpp" +#include "SDK/ImgMediaEngine_classes.hpp" +#include "SDK/ImgMedia_structs.hpp" +#include "SDK/ImgMedia_classes.hpp" +#include "SDK/ImgMediaFactory_classes.hpp" +#include "SDK/BP_AudioEmitterEnableTrigger_classes.hpp" +#include "SDK/BP_ChainedCase_classes.hpp" +#include "SDK/MediaCompositing_structs.hpp" +#include "SDK/MediaCompositing_classes.hpp" +#include "SDK/BP_TimeBasedDoor_classes.hpp" +#include "SDK/MediaPlate_structs.hpp" +#include "SDK/MediaPlate_classes.hpp" +#include "SDK/HoldoutComposite_classes.hpp" +#include "SDK/WmfMediaFactory_classes.hpp" +#include "SDK/TcpMessaging_classes.hpp" +#include "SDK/W_Pause_classes.hpp" +#include "SDK/UdpMessaging_structs.hpp" +#include "SDK/UdpMessaging_classes.hpp" +#include "SDK/ActorSequence_structs.hpp" +#include "SDK/ActorSequence_classes.hpp" +#include "SDK/NNE_structs.hpp" +#include "SDK/NNE_classes.hpp" +#include "SDK/NNEDenoiser_structs.hpp" +#include "SDK/NNEDenoiser_classes.hpp" +#include "SDK/E_Direction_structs.hpp" +#include "SDK/BP_TripleFuseInteractable_classes.hpp" +#include "SDK/DA_FileDefinition_classes.hpp" +#include "SDK/NNERuntimeORT_structs.hpp" +#include "SDK/NNERuntimeORT_classes.hpp" +#include "SDK/ActorLayerUtilities_structs.hpp" +#include "SDK/ActorLayerUtilities_classes.hpp" +#include "SDK/AndroidFileServer_structs.hpp" +#include "SDK/AndroidFileServer_classes.hpp" +#include "SDK/DA_HealthData_classes.hpp" +#include "SDK/AndroidPermission_classes.hpp" +#include "SDK/ArchVisCharacter_classes.hpp" +#include "SDK/AssetTags_structs.hpp" +#include "SDK/AssetTags_classes.hpp" +#include "SDK/CableComponent_classes.hpp" +#include "SDK/CustomMeshComponent_structs.hpp" +#include "SDK/CustomMeshComponent_classes.hpp" +#include "SDK/GooglePAD_structs.hpp" +#include "SDK/GooglePAD_classes.hpp" +#include "SDK/LocationServicesBPLibrary_structs.hpp" +#include "SDK/LocationServicesBPLibrary_classes.hpp" +#include "SDK/E_WieldabaleAttachment_structs.hpp" +#include "SDK/CBP_James_Cooper_classes.hpp" +#include "SDK/MetasoundFrontend_structs.hpp" +#include "SDK/MetasoundFrontend_classes.hpp" +#include "SDK/BP_StorageInteractable_classes.hpp" +#include "SDK/WaveTable_structs.hpp" +#include "SDK/WaveTable_classes.hpp" +#include "SDK/MetasoundEngine_structs.hpp" +#include "SDK/MetasoundEngine_classes.hpp" +#include "SDK/AudioAnalyzer_classes.hpp" +#include "SDK/AudioSynesthesia_structs.hpp" +#include "SDK/AudioSynesthesia_classes.hpp" +#include "SDK/ABP_Enemy_Scarface_structs.hpp" +#include "SDK/ABP_Enemy_Scarface_classes.hpp" +#include "SDK/AdvancedWidgets_structs.hpp" +#include "SDK/AdvancedWidgets_classes.hpp" +#include "SDK/AudioWidgets_structs.hpp" +#include "SDK/AudioWidgets_classes.hpp" +#include "SDK/W_Abillities_classes.hpp" +#include "SDK/MobilePatchingUtils_classes.hpp" +#include "SDK/BP_PedestalRoomData_classes.hpp" +#include "SDK/ResonanceAudio_structs.hpp" +#include "SDK/ResonanceAudio_classes.hpp" +#include "SDK/CS_AR10_Recoil_classes.hpp" +#include "SDK/SoundFields_classes.hpp" +#include "SDK/Synthesis_structs.hpp" +#include "SDK/Synthesis_classes.hpp" +#include "SDK/BP_Rack_07b_classes.hpp" +#include "SDK/BP_QuickMenuInput_classes.hpp" +#include "SDK/TraceUtilities_classes.hpp" +#include "SDK/WorldMetricsCore_structs.hpp" +#include "SDK/WorldMetricsCore_classes.hpp" +#include "SDK/CsvMetrics_classes.hpp" +#include "SDK/BP_CeilingTile_3x3_01a_classes.hpp" +#include "SDK/W_OptionPanel_classes.hpp" +#include "SDK/CoreOnline_structs.hpp" +#include "SDK/DA_Flashlight_classes.hpp" +#include "SDK/MediaUtils_structs.hpp" +#include "SDK/BTT_Guilt_DoubleHandAttack_classes.hpp" +#include "SDK/HttpNetworkReplayStreaming_structs.hpp" +#include "SDK/S_EnemySpawnData_structs.hpp" +#include "SDK/BP_EnemySpawner_classes.hpp" +#include "SDK/VectorVM_structs.hpp" +#include "SDK/MutableRuntime_structs.hpp" +#include "SDK/BTT_AI_PermanentMeleeAttack_classes.hpp" +#include "SDK/Landmass_structs.hpp" +#include "SDK/W_QuickFlashlightTooltip_classes.hpp" +#include "SDK/BP_Flashlight_classes.hpp" +#include "SDK/InterchangeCommonParser_structs.hpp" +#include "SDK/BP_BookBunch_01a_classes.hpp" +#include "SDK/ControlRigSpline_structs.hpp" +#include "SDK/FullBodyIK_structs.hpp" +#include "SDK/FractureEngine_structs.hpp" +#include "SDK/GeometryCollectionNodes_structs.hpp" +#include "SDK/GeometryCollectionDepNodes_structs.hpp" +#include "SDK/EngineMessages_structs.hpp" +#include "SDK/PDA_Achievement_classes.hpp" +#include "SDK/Serialization_structs.hpp" +#include "SDK/S_SectionData_structs.hpp" +#include "SDK/BP_LightManager_classes.hpp" +#include "SDK/CR_Mannequin_Procedural_classes.hpp" +#include "SDK/SessionMessages_structs.hpp" +#include "SDK/LiveLinkMessageBusFramework_structs.hpp" +#include "SDK/BP_UVLight_classes.hpp" +#include "SDK/BP_GameService_classes.hpp" +#include "SDK/LiveLinkControlRig_structs.hpp" +#include "SDK/Face_AnimBP_structs.hpp" +#include "SDK/Face_AnimBP_classes.hpp" +#include "SDK/WebBrowser_structs.hpp" +#include "SDK/W_Cursor_classes.hpp" +#include "SDK/S_EnemySaveData_structs.hpp" +#include "SDK/DA_ContainerRestriction_classes.hpp" +#include "SDK/DA_ItemProperty_classes.hpp" +#include "SDK/EFieldForceVel_structs.hpp" +#include "SDK/EFieldActivationType_structs.hpp" +#include "SDK/EFieldShapeType_structs.hpp" +#include "SDK/FS_DamageField_classes.hpp" +#include "SDK/S_ItemSlotSaveData_structs.hpp" +#include "SDK/BP_UltravioletLightStation_classes.hpp" +#include "SDK/BP_ComputerSquaresStation_classes.hpp" +#include "SDK/S_ContainerSaveData_structs.hpp" +#include "SDK/DA_ItemData_classes.hpp" +#include "SDK/S_ArmorPart_structs.hpp" +#include "SDK/E_ArmorPiece_structs.hpp" +#include "SDK/E_MovementSpeed_structs.hpp" +#include "SDK/BP_Biggy_classes.hpp" +#include "SDK/DA_Definition_classes.hpp" +#include "SDK/DA_ItemTagDefinition_classes.hpp" +#include "SDK/S_SlowDownData_structs.hpp" +#include "SDK/BP_Enemy_Base__classes.hpp" +#include "SDK/DA_CollectableDefinition_classes.hpp" +#include "SDK/DA_ItemDefinition_classes.hpp" +#include "SDK/BP_CeilingTile_6x4_01c_classes.hpp" +#include "SDK/DA_AbillityDefinition_classes.hpp" +#include "SDK/BP_AngerChaserRemover_classes.hpp" +#include "SDK/UO_ItemContainer_classes.hpp" +#include "SDK/DA_ItemAction_classes.hpp" +#include "SDK/BP_CeilingTile_3x4_01a_classes.hpp" +#include "SDK/BTT_MeleeAttack_classes.hpp" +#include "SDK/W_MessageDisplayerUI_classes.hpp" +#include "SDK/S_ItemSlotCallback_structs.hpp" +#include "SDK/UO_ItemSlot_classes.hpp" +#include "SDK/DA_Database_classes.hpp" +#include "SDK/UO_Item_classes.hpp" +#include "SDK/BP_PermanentRoomData_classes.hpp" +#include "SDK/BPI_CollectablesManager_classes.hpp" +#include "SDK/E_Enemy_AttackType_structs.hpp" +#include "SDK/BP_AI_Base_classes.hpp" +#include "SDK/BPI_ServiceLocator_classes.hpp" +#include "SDK/BPI_InteractableObject_classes.hpp" +#include "SDK/DA_InputContextBase_classes.hpp" +#include "SDK/DA_InputContext_classes.hpp" +#include "SDK/DA_InputContextGroup_classes.hpp" +#include "SDK/BPI_InputContextManager_classes.hpp" +#include "SDK/BP_CeilingTile_3x2_01a_classes.hpp" +#include "SDK/BP_TaskOnCollectablePickedUp_classes.hpp" +#include "SDK/PDA_SilentAbility_classes.hpp" +#include "SDK/BPI_NoticeableManager_classes.hpp" +#include "SDK/S_FloorSavable_structs.hpp" +#include "SDK/CAS_Idle_classes.hpp" +#include "SDK/BPI_PadlockInteraction_classes.hpp" +#include "SDK/BP_Rack_03c_classes.hpp" +#include "SDK/S_ChapterData_structs.hpp" +#include "SDK/BP_PushChapterOnStart_classes.hpp" +#include "SDK/DA_QuickAction_classes.hpp" +#include "SDK/ABP_Enemy_Zombie_structs.hpp" +#include "SDK/S_EnemySpeedValues_structs.hpp" +#include "SDK/ABP_Enemy_Zombie_classes.hpp" +#include "SDK/S_QuickActionSlot_structs.hpp" +#include "SDK/BPI_MessageDisplayer_classes.hpp" +#include "SDK/BPI_MapSavable_classes.hpp" +#include "SDK/S_ChapterAudio_structs.hpp" +#include "SDK/BP_Box_01a_classes.hpp" +#include "SDK/S_BreathingAudio_structs.hpp" +#include "SDK/PDA_OnePageTooltipDefinition_classes.hpp" +#include "SDK/BPI_TooltipManager_classes.hpp" +#include "SDK/PDA_LightTooltipDefinition_classes.hpp" +#include "SDK/W_OnePageTooltip_classes.hpp" +#include "SDK/BPI_AudioManager_classes.hpp" +#include "SDK/CR_LookAt_classes.hpp" +#include "SDK/W_Slot_classes.hpp" +#include "SDK/PDA_ShotgunsDamageIncrease_classes.hpp" +#include "SDK/S_PreContainerData_structs.hpp" +#include "SDK/PDA_HandgunsDamageIncrease_classes.hpp" +#include "SDK/PDA_BandagesEffectIncrease_classes.hpp" +#include "SDK/W_Floor_1_History_classes.hpp" +#include "SDK/PDA_TonfaDamageIncrease_classes.hpp" +#include "SDK/BPI_AbillitiesManager_classes.hpp" +#include "SDK/PDA_PainkillersEffectIncrease_classes.hpp" +#include "SDK/S_WieldableHolsterView_structs.hpp" +#include "SDK/S_PlaceableItemDefinition_structs.hpp" +#include "SDK/BPI_ItemDropModule_classes.hpp" +#include "SDK/S_SimpleCameraParams_structs.hpp" +#include "SDK/PDA_SecondLife_classes.hpp" +#include "SDK/BPI_Light_classes.hpp" +#include "SDK/BPC_ItemDropHandler_classes.hpp" +#include "SDK/BP_TooltipManager_classes.hpp" +#include "SDK/BP_SaveData_classes.hpp" +#include "SDK/BP_CeilingTile_6x8_01d_classes.hpp" +#include "SDK/UO_ItemPickupIntermediate_classes.hpp" +#include "SDK/BPI_PlayerModule_classes.hpp" +#include "SDK/BP_SaveSlots_classes.hpp" +#include "SDK/BP_OldHandgun_classes.hpp" +#include "SDK/E_OverlayLeftHand_structs.hpp" +#include "SDK/S_AchievementSavableData_structs.hpp" +#include "SDK/S_SpeedModifier_structs.hpp" +#include "SDK/PDA_EndingNoticeablesAchievement_classes.hpp" +#include "SDK/BPI_MovementSystem_classes.hpp" +#include "SDK/S_RecoilParameters_structs.hpp" +#include "SDK/BTT_AI_Anger_Phase_Attack_classes.hpp" +#include "SDK/BPI_DeathManager_classes.hpp" +#include "SDK/E_InteractionType_structs.hpp" +#include "SDK/BPI_GameMode_classes.hpp" +#include "SDK/W_MapHistory_classes.hpp" +#include "SDK/BP_LampMesh_classes.hpp" +#include "SDK/E_Axis_structs.hpp" +#include "SDK/ABI_Weapon_classes.hpp" +#include "SDK/BPI_AchievementsManager_classes.hpp" +#include "SDK/ABP_Weapon_WalkieTalkie_structs.hpp" +#include "SDK/E_OverlayGeneral_structs.hpp" +#include "SDK/ABP_Weapon_WalkieTalkie_classes.hpp" +#include "SDK/CAS_Run_Step_R_classes.hpp" +#include "SDK/E_WieldableHand_structs.hpp" +#include "SDK/BPI_SaveLoadManager_classes.hpp" +#include "SDK/BP_SaveLoadManager_classes.hpp" +#include "SDK/BP_TimerBasedDoorMap_classes.hpp" +#include "SDK/S_MeleeChooserParams_structs.hpp" +#include "SDK/BP_Prefab_Parent_classes.hpp" +#include "SDK/UO_HealthObserver_classes.hpp" +#include "SDK/S_StepShakes_structs.hpp" +#include "SDK/BP_MapSavablePickup_classes.hpp" +#include "SDK/S_RoomDataUI_structs.hpp" +#include "SDK/BP_Chair_01b_classes.hpp" +#include "SDK/W_ShotgunTooltip_classes.hpp" +#include "SDK/HeadMovementIK_Proc_CtrlRig_classes.hpp" +#include "SDK/BPI_InputManager_classes.hpp" +#include "SDK/PDA_InputKeysHandler_classes.hpp" +#include "SDK/S_ShadersData_structs.hpp" +#include "SDK/PDA_GenericWeaponsAbility_classes.hpp" +#include "SDK/BP_SaveShader_classes.hpp" +#include "SDK/BP_Desk_01a_classes.hpp" +#include "SDK/BP_Inventory_classes.hpp" +#include "SDK/S_LoopObserverIntermediateSave_structs.hpp" +#include "SDK/S_FootPlacementParams_structs.hpp" +#include "SDK/S_SurfaceFoley_structs.hpp" +#include "SDK/E_OutfitState_structs.hpp" +#include "SDK/BP_Rack_06a_classes.hpp" +#include "SDK/BPI_OutfitManager_classes.hpp" +#include "SDK/ABP_Manny_To_Cooper_Retargeter_structs.hpp" +#include "SDK/ABP_Manny_To_Cooper_Retargeter_classes.hpp" +#include "SDK/W_Crosshair_classes.hpp" +#include "SDK/DA_WieldableTagDefinition_classes.hpp" +#include "SDK/BP_Hoverable_classes.hpp" +#include "SDK/S_HoverInfo_structs.hpp" +#include "SDK/PDA_TonfaDoorAbility_classes.hpp" +#include "SDK/S_Dialogue_structs.hpp" +#include "SDK/BPI_ChaptersManager_classes.hpp" +#include "SDK/Neck_CtrlRig_classes.hpp" +#include "SDK/E_PairedAnimationState_structs.hpp" +#include "SDK/E_RotationMode_structs.hpp" +#include "SDK/BTD_CanCatchPlayer_classes.hpp" +#include "SDK/E_CheckDirection_structs.hpp" +#include "SDK/BP_InteractableStation_classes.hpp" +#include "SDK/BPI_FlashlightModule_classes.hpp" +#include "SDK/BPI_Inventory_classes.hpp" +#include "SDK/BP_BedsideTable_01c_classes.hpp" +#include "SDK/PDA_Move_classes.hpp" +#include "SDK/W_DoorTimerDisplayer_classes.hpp" +#include "SDK/W_SlotLockItemData_classes.hpp" +#include "SDK/S_SafeCombination_structs.hpp" +#include "SDK/BP_InfoBoard_02a_classes.hpp" +#include "SDK/PDA_SafeCombination_classes.hpp" +#include "SDK/PDA_StepShakes_classes.hpp" +#include "SDK/BP_SurgicalStuff_01a_classes.hpp" +#include "SDK/E_InteractionType_0_structs.hpp" +#include "SDK/BPI_InteractionHandler_classes.hpp" +#include "SDK/BP_Skeleton_04a_classes.hpp" +#include "SDK/BPI_SafeZone_classes.hpp" +#include "SDK/CS_Aiming_classes.hpp" +#include "SDK/CAS_Run_Step_L_classes.hpp" +#include "SDK/S_WieldableAttachment_structs.hpp" +#include "SDK/W_MinutesRemainingNotifier_classes.hpp" +#include "SDK/CAS_Walk_Step_L_classes.hpp" +#include "SDK/BP_OnSaveAdditiveTaskDisable_classes.hpp" +#include "SDK/BP_WeaponCase_classes.hpp" +#include "SDK/CS_Deagle_Recoil_classes.hpp" +#include "SDK/BP_CeilingTile_6x2_01a_classes.hpp" +#include "SDK/W_PlayerLocation_classes.hpp" +#include "SDK/ABI_InteractionLayer_classes.hpp" +#include "SDK/BP_CeilingTile_8x8_01a_classes.hpp" +#include "SDK/W_Inventory_classes.hpp" +#include "SDK/CS_DefaultShotgun_Recoil_classes.hpp" +#include "SDK/BPI_EffectsManager_classes.hpp" +#include "SDK/BP_MovieAudio_classes.hpp" +#include "SDK/BPI_HolsterSelector_classes.hpp" +#include "SDK/W_Camera_Crosshair_classes.hpp" +#include "SDK/BPI_FacialAnimations_classes.hpp" +#include "SDK/Face_PostProcess_AnimBP_structs.hpp" +#include "SDK/Face_PostProcess_AnimBP_classes.hpp" +#include "SDK/ABP_Tooo_FaceMesh_PostProcess_structs.hpp" +#include "SDK/ABP_Tooo_FaceMesh_PostProcess_classes.hpp" +#include "SDK/PDA_FoleyAudioBank_classes.hpp" +#include "SDK/BP_StreamingLevelsUnloader_classes.hpp" +#include "SDK/BPI_FoleyAudioBankInterface_classes.hpp" +#include "SDK/ABP_Weapon_Shotgun_structs.hpp" +#include "SDK/ABP_Weapon_Shotgun_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Land_classes.hpp" +#include "SDK/BP_LineEnableTriggerDestructibl_classes.hpp" +#include "SDK/W_Display_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Walk_L_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Walk_R_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Run_R_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Scuff_L_classes.hpp" +#include "SDK/W_Graphics_Upscalers_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Run_L_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Handplant_L_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Jump_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Handplant_R_classes.hpp" +#include "SDK/BP_CollectablePickupObserver_classes.hpp" +#include "SDK/W_Storage_classes.hpp" +#include "SDK/BP_AnimNotify_FoleyEvent_Scuff_R_classes.hpp" +#include "SDK/BPI_CameraManager_classes.hpp" +#include "SDK/BPI_OverlaySystem_classes.hpp" +#include "SDK/BPI_WieldablesSystem_classes.hpp" +#include "SDK/BP_WieldableItem_classes.hpp" +#include "SDK/BPC_Wieldables_classes.hpp" +#include "SDK/BPC_ToolsSelector_classes.hpp" +#include "SDK/BP_AnimNotify_UpdateAttachments_classes.hpp" +#include "SDK/CR_Recoil_classes.hpp" +#include "SDK/BP_BedsideTable_01b_classes.hpp" +#include "SDK/AnimNotify_NiagraWithTag_classes.hpp" +#include "SDK/E_MovementMode_structs.hpp" +#include "SDK/BP_Tomb_classes.hpp" +#include "SDK/DA_AmmoInMagazine_classes.hpp" +#include "SDK/ALI_Overlay_classes.hpp" +#include "SDK/BP_TreatmentTable_02c_classes.hpp" +#include "SDK/E_MovementState_structs.hpp" +#include "SDK/W_SaveProgress_classes.hpp" +#include "SDK/BP_FakeDisabledRoomDoor_classes.hpp" +#include "SDK/Teleporter_Destination_classes.hpp" +#include "SDK/Teleporter_Sender_classes.hpp" +#include "SDK/LevelButton_classes.hpp" +#include "SDK/BP_WaterCooler_01a_classes.hpp" +#include "SDK/BP_NavigationModifier_classes.hpp" +#include "SDK/BPI_LoopManager_classes.hpp" +#include "SDK/S_WatchesStatusColor_structs.hpp" +#include "SDK/W_HolsterSlotDisplayer_classes.hpp" +#include "SDK/BPC_Inventory_classes.hpp" +#include "SDK/DA_DialogueDefinition_classes.hpp" +#include "SDK/BPI_VoiceHandler_classes.hpp" +#include "SDK/W_FilesTooltip_classes.hpp" +#include "SDK/BP_RoomData_classes.hpp" +#include "SDK/BP_BiggySequence_classes.hpp" +#include "SDK/BPC_DamageSystem_classes.hpp" +#include "SDK/BP_Rack_03b_classes.hpp" +#include "SDK/BP_Weapon_Melee_classes.hpp" +#include "SDK/BPI_Damageable_classes.hpp" +#include "SDK/metahuman_proc_ControlRig_classes.hpp" +#include "SDK/m_med_nrw_animbp_High_structs.hpp" +#include "SDK/m_med_nrw_animbp_High_classes.hpp" +#include "SDK/ABP_CarryPerson_structs.hpp" +#include "SDK/ABP_CarryPerson_classes.hpp" +#include "SDK/CS_DefaultHandgun_Recoil_classes.hpp" +#include "SDK/E_Stance_structs.hpp" +#include "SDK/PDA_Assign_classes.hpp" +#include "SDK/BPI_InteractionTransform_classes.hpp" +#include "SDK/BP_Sign_classes.hpp" +#include "SDK/PSC_Traversal_Head_classes.hpp" +#include "SDK/W_Background_classes.hpp" +#include "SDK/S_UserSettings_structs.hpp" +#include "SDK/EQS_Context_AttackTarget_classes.hpp" +#include "SDK/BP_SaveSettings_classes.hpp" +#include "SDK/S_Decals_structs.hpp" +#include "SDK/S_DecalsArray_structs.hpp" +#include "SDK/W_HolsterSlot_classes.hpp" +#include "SDK/BP_Light_classes.hpp" +#include "SDK/BPI_LightManager_classes.hpp" +#include "SDK/BP_Fridge_02a_classes.hpp" +#include "SDK/BP_SpotLight_classes.hpp" +#include "SDK/DA_Task_classes.hpp" +#include "SDK/BPI_TaskManager_classes.hpp" +#include "SDK/W_ComputerSquares_classes.hpp" +#include "SDK/BP_Vehicles_classes.hpp" +#include "SDK/PDA_AmmoSpawnCondition_classes.hpp" +#include "SDK/BP_AimInput_classes.hpp" +#include "SDK/BPI_Updator_classes.hpp" +#include "SDK/BPI_UpdateManager_classes.hpp" +#include "SDK/BP_UpdateManager_classes.hpp" +#include "SDK/E_TraversalBlendOutCondition_structs.hpp" +#include "SDK/BP_OutfitManager_classes.hpp" +#include "SDK/BP_NotifyState_MontageBlendOut_classes.hpp" +#include "SDK/W_Display_MotionBlur_classes.hpp" +#include "SDK/E_TraversalActionType_structs.hpp" +#include "SDK/S_TraversalCheckResult_structs.hpp" +#include "SDK/BP_GuiltSpawnerTrigger_classes.hpp" +#include "SDK/W_Audio_SoundEffects_classes.hpp" +#include "SDK/S_TraversalChooserParams_structs.hpp" +#include "SDK/S_Particles_structs.hpp" +#include "SDK/BP_SafeData_classes.hpp" +#include "SDK/S_ParticlesArray_structs.hpp" +#include "SDK/W_Graphics_AntiAliasing_classes.hpp" +#include "SDK/PDA_ProjectileHitEffects_classes.hpp" +#include "SDK/BP_CandleCluster_01da_classes.hpp" +#include "SDK/BP_SingleFuseInteractable_classes.hpp" +#include "SDK/W_ActionDescription_classes.hpp" +#include "SDK/W_Subtitles_classes.hpp" +#include "SDK/BP_Guilt_Chained_classes.hpp" +#include "SDK/W_RadioNoticeableTooltip_classes.hpp" +#include "SDK/W_MessageInstance_classes.hpp" +#include "SDK/BP_MedDevice_01b_classes.hpp" +#include "SDK/BP_RoomDoor_classes.hpp" +#include "SDK/W_Popup_classes.hpp" +#include "SDK/W_VideotapeTooltip_classes.hpp" +#include "SDK/W_BandagesTooltip_classes.hpp" +#include "SDK/BP_BookShelf_03b_classes.hpp" +#include "SDK/BP_CatacombsLever_classes.hpp" +#include "SDK/W_ItemSlot_classes.hpp" +#include "SDK/W_ItemDisplayer_classes.hpp" +#include "SDK/W_TimeDoorTooltip_classes.hpp" +#include "SDK/W_MainMenuButton_classes.hpp" +#include "SDK/W_Abillity_classes.hpp" +#include "SDK/W_ArchiveReelTooltip_classes.hpp" +#include "SDK/BP_CooperShowStation_classes.hpp" +#include "SDK/W_SelectionTooltip_classes.hpp" +#include "SDK/W_MapTooltip_classes.hpp" +#include "SDK/W_MapPickupTooltip_classes.hpp" +#include "SDK/W_ExchangeMachineTooltip_classes.hpp" +#include "SDK/BP_DoorSelectionData_classes.hpp" +#include "SDK/W_PopupButton_classes.hpp" +#include "SDK/BP_Monkey_classes.hpp" +#include "SDK/W_OptionSelector_classes.hpp" +#include "SDK/W_IconHelper_classes.hpp" +#include "SDK/BTT_Focus_classes.hpp" +#include "SDK/S_RoomAdditiveUI_structs.hpp" +#include "SDK/BP_Clown_classes.hpp" +#include "SDK/W_SaveLoadSlot_classes.hpp" +#include "SDK/W_Display_DisplayMode_classes.hpp" +#include "SDK/W_Display_ScreenResolution_classes.hpp" +#include "SDK/W_Graphics_Reflections_classes.hpp" +#include "SDK/W_Display_VSync_classes.hpp" +#include "SDK/W_Graphics_Textures_classes.hpp" +#include "SDK/W_Graphics_Shaders_classes.hpp" +#include "SDK/W_Language_Main_classes.hpp" +#include "SDK/BPI_GameInstanceSave_classes.hpp" +#include "SDK/BPC_MapSavable_classes.hpp" +#include "SDK/W_Audio_Master_classes.hpp" +#include "SDK/W_Audio_Interface_classes.hpp" +#include "SDK/W_Audio_Heartbeat_classes.hpp" +#include "SDK/W_Audio_Music_classes.hpp" +#include "SDK/PlayableGameMode_classes.hpp" +#include "SDK/W_Audio_Voice_classes.hpp" +#include "SDK/BP_LoopManager_classes.hpp" +#include "SDK/BP_RoomActor_classes.hpp" +#include "SDK/W_MedkitTooltip_classes.hpp" +#include "SDK/E_AnalogMovementBehavior_structs.hpp" +#include "SDK/CR_Interaction_Door_classes.hpp" +#include "SDK/PSC_Traversal_Pos_classes.hpp" +#include "SDK/BTD_IsFarFromTree_classes.hpp" +#include "SDK/W_SafeZoneTooltip_classes.hpp" +#include "SDK/W_FusesTooltip_classes.hpp" +#include "SDK/BPI_PlayerInput_classes.hpp" +#include "SDK/CAS_Walk_Step_R_classes.hpp" +#include "SDK/W_BloodBagTooltip_classes.hpp" +#include "SDK/LevelBlock_classes.hpp" +#include "SDK/BP_SwitchLightIndicator_classes.hpp" +#include "SDK/BPI_PairedCaller_classes.hpp" +#include "SDK/W_PainkillersTooltip_classes.hpp" +#include "SDK/W_ItemAction_classes.hpp" +#include "SDK/BPI_PauseManager_classes.hpp" +#include "SDK/ABP_Manny_PostProcess_structs.hpp" +#include "SDK/ABP_Manny_PostProcess_classes.hpp" +#include "SDK/W_MoviesTooltip_classes.hpp" +#include "SDK/BP_LightDisableTrigger_classes.hpp" +#include "SDK/BTD_CanAttackPlayer_classes.hpp" +#include "SDK/BP_PoliceTonfa_classes.hpp" +#include "SDK/CS_EnemyRumbling_classes.hpp" +#include "SDK/W_Floor_2_History_classes.hpp" +#include "SDK/W_BasementHistory_classes.hpp" +#include "SDK/BP_AntiqueBox_classes.hpp" +#include "SDK/W_Floor_3_History_classes.hpp" +#include "SDK/W_MapSystem_classes.hpp" +#include "SDK/ABP_Enemy_BiggySmoke_structs.hpp" +#include "SDK/ABP_Enemy_BiggySmoke_classes.hpp" +#include "SDK/W_Credits_classes.hpp" +#include "SDK/BP_AbilityCage_classes.hpp" +#include "SDK/BP_InputManager_classes.hpp" +#include "SDK/W_BaseInputWidget_classes.hpp" +#include "SDK/W_InventoryTooltip_classes.hpp" +#include "SDK/BP_LightSwitcher_01a_classes.hpp" +#include "SDK/W_AmmoPouchesTooltip_classes.hpp" +#include "SDK/W_QuickPoliceBatonTooltip_classes.hpp" +#include "SDK/BP_EnemyDestroyTrigger_classes.hpp" +#include "SDK/W_PainkillersTooltip_0_classes.hpp" +#include "SDK/W_VaultTooltip_classes.hpp" +#include "SDK/W_MovementTooltip_classes.hpp" +#include "SDK/BP_PhoneInteractable_classes.hpp" +#include "SDK/W_RunningTooltip_classes.hpp" +#include "SDK/W_LightTooltipsHandler_classes.hpp" +#include "SDK/W_Language_classes.hpp" +#include "SDK/W_Controls_classes.hpp" +#include "SDK/W_DisablePanel_classes.hpp" +#include "SDK/W_InteractionButton_classes.hpp" +#include "SDK/BP_Rack_04a_classes.hpp" +#include "SDK/BTT_AI_MeleeAttack_classes.hpp" +#include "SDK/W_CommonInteractionDisplayer_classes.hpp" +#include "SDK/BP_Interactable_classes.hpp" +#include "SDK/W_ItemPickupDisplayer_classes.hpp" +#include "SDK/BP_ItemPickupBase_classes.hpp" +#include "SDK/BP_PauseManager_classes.hpp" +#include "SDK/PDA_StimulateData_classes.hpp" +#include "SDK/BP_InputContextManager_classes.hpp" +#include "SDK/W_FilePickupDisplayer_classes.hpp" +#include "SDK/BP_CollectablesManager_classes.hpp" +#include "SDK/BP_Collectable_classes.hpp" +#include "SDK/W_FileTab_classes.hpp" +#include "SDK/W_ExitPanel_classes.hpp" +#include "SDK/BP_NeutralEnemySpawner_classes.hpp" +#include "SDK/W_AbilityTooltip_classes.hpp" +#include "SDK/W_FlashlightTooltip_classes.hpp" +#include "SDK/W_WatchesTooltip_classes.hpp" +#include "SDK/W_RadioTooltip_classes.hpp" +#include "SDK/W_DropConfirmation_classes.hpp" +#include "SDK/BP_ChapterLight_classes.hpp" +#include "SDK/W_ExitConfirmation_classes.hpp" +#include "SDK/BPC_SignReaderHandler_classes.hpp" +#include "SDK/W_DeagleCrosshair_classes.hpp" +#include "SDK/BPC_InteractionHandler_classes.hpp" +#include "SDK/W_SaveConfirmation_classes.hpp" +#include "SDK/W_MultiplePageText_classes.hpp" +#include "SDK/BP_Candelabra_02a_classes.hpp" +#include "SDK/W_LoadSlots_classes.hpp" +#include "SDK/BP_ContainerUpgradePickup_classes.hpp" +#include "SDK/BPC_PairedAnimations_classes.hpp" +#include "SDK/W_AspectRation_classes.hpp" +#include "SDK/BP_ProjectileBase_classes.hpp" +#include "SDK/ABP_MM_Locomotion_structs.hpp" +#include "SDK/ABP_MM_Locomotion_classes.hpp" +#include "SDK/CBP_MM_Character_classes.hpp" +#include "SDK/BP_DoubleDoor_classes.hpp" +#include "SDK/ABP_Weapon_Pistol2H_Base_structs.hpp" +#include "SDK/ABP_Weapon_Pistol2H_Base_classes.hpp" +#include "SDK/ABP_Weapon_Pistol2H_DefaultHandgun_structs.hpp" +#include "SDK/ABP_Weapon_Pistol2H_DefaultHandgun_classes.hpp" +#include "SDK/ABP_MM_Overlayed_structs.hpp" +#include "SDK/ABP_MM_Overlayed_classes.hpp" +#include "SDK/CBP_MM_Character_Overlayed_classes.hpp" +#include "SDK/ABP_Overlay_LeftHand_Base_structs.hpp" +#include "SDK/ABP_Overlay_LeftHand_Base_classes.hpp" +#include "SDK/ABP_Flashlight_Pistol2H_structs.hpp" +#include "SDK/ABP_Flashlight_Pistol2H_classes.hpp" +#include "SDK/ABP_Watch_structs.hpp" +#include "SDK/ABP_Watch_classes.hpp" +#include "SDK/AIC_Base_classes.hpp" +#include "SDK/ABP_Overlay_Simple_Base_structs.hpp" +#include "SDK/ABP_Overlay_Simple_Base_classes.hpp" +#include "SDK/ABP_Injured_Default_structs.hpp" +#include "SDK/ABP_Injured_Default_classes.hpp" +#include "SDK/BP_TooltipOnItemPickupObserver_classes.hpp" +#include "SDK/ABP_Flashlight_Default_structs.hpp" +#include "SDK/ABP_Flashlight_Default_classes.hpp" +#include "SDK/ABP_Weapon_Unarmed_structs.hpp" +#include "SDK/ABP_Weapon_Unarmed_classes.hpp" +#include "SDK/ABP_Weapon_Pistol2H_OldPistol_structs.hpp" +#include "SDK/ABP_Weapon_Pistol2H_OldPistol_classes.hpp" +#include "SDK/ABP_Injured_AR10_structs.hpp" +#include "SDK/ABP_Injured_AR10_classes.hpp" +#include "SDK/ABP_Weapon_AR10_structs.hpp" +#include "SDK/ABP_Weapon_AR10_classes.hpp" +#include "SDK/BP_Decal_BloodSplash_01b_classes.hpp" +#include "SDK/ABP_Weapon_Pistol2H_Deagle_structs.hpp" +#include "SDK/ABP_Weapon_Pistol2H_Deagle_classes.hpp" +#include "SDK/ABP_Injured_Shotgun_structs.hpp" +#include "SDK/ABP_Injured_Shotgun_classes.hpp" +#include "SDK/ABP_Injured_DoubleBarrel_structs.hpp" +#include "SDK/ABP_Injured_DoubleBarrel_classes.hpp" +#include "SDK/ABP_Weapon_DoubleBarrel_structs.hpp" +#include "SDK/ABP_Weapon_DoubleBarrel_classes.hpp" +#include "SDK/ABP_Weapon_Winchester_structs.hpp" +#include "SDK/ABP_Weapon_Winchester_classes.hpp" +#include "SDK/ABP_InteractionLayer_structs.hpp" +#include "SDK/ABP_InteractionLayer_classes.hpp" +#include "SDK/ABP_LayerBlending_structs.hpp" +#include "SDK/ABP_LayerBlending_classes.hpp" +#include "SDK/ABP_Weapon_PoliceTonfa_structs.hpp" +#include "SDK/ABP_Weapon_PoliceTonfa_classes.hpp" +#include "SDK/W_DoorInteractionDisplayer_classes.hpp" +#include "SDK/BP_UnlockableStation_classes.hpp" +#include "SDK/BP_LocationTrigger_classes.hpp" +#include "SDK/BP_DoorInteractable_classes.hpp" +#include "SDK/BP_SingleDoor_classes.hpp" +#include "SDK/BP_InteractionManager_classes.hpp" +#include "SDK/W_QuickMenu_classes.hpp" +#include "SDK/BPC_QuickMenu_classes.hpp" +#include "SDK/DA_RestartLoop_classes.hpp" +#include "SDK/BP_ChaptersManager_classes.hpp" +#include "SDK/W_TaskDisplayer_classes.hpp" +#include "SDK/BP_TaskManager_classes.hpp" +#include "SDK/W_DeathScreen_classes.hpp" +#include "SDK/BPC_HealthSystem_classes.hpp" +#include "SDK/BPI_ItemSpawnManager_classes.hpp" +#include "SDK/BP_AudioManager_classes.hpp" +#include "SDK/W_RadioEndedNotification_classes.hpp" +#include "SDK/W_FullUI_classes.hpp" +#include "SDK/BP_DatabaseManager_classes.hpp" +#include "SDK/W_RestartLoop_classes.hpp" +#include "SDK/BP_Rack_02b_classes.hpp" +#include "SDK/BP_AbillitiesManager_classes.hpp" +#include "SDK/W_EndingFader_classes.hpp" +#include "SDK/BP_AchievementsManager_classes.hpp" +#include "SDK/W_Graphics_OptimizedLighting_classes.hpp" +#include "SDK/BP_EffectsManager_classes.hpp" +#include "SDK/W_Graphics_GlobalIllumination_classes.hpp" +#include "SDK/BP_PushLineObserved_classes.hpp" +#include "SDK/W_Graphics_API_classes.hpp" +#include "SDK/W_Graphics_classes.hpp" +#include "SDK/W_Display_Brightness_classes.hpp" +#include "SDK/W_Camera_InvertYAxis_classes.hpp" +#include "SDK/BP_CameraManager_classes.hpp" +#include "SDK/W_Camera_InvertXAxis_classes.hpp" +#include "SDK/W_Camera_AimSensitivity_classes.hpp" +#include "SDK/PDA_Combine_classes.hpp" +#include "SDK/W_Camera_FOV_classes.hpp" +#include "SDK/BP_Scarface_classes.hpp" +#include "SDK/W_Camera_MovementLag_classes.hpp" +#include "SDK/W_Camera_MouseSensitivity_classes.hpp" +#include "SDK/W_Camera_classes.hpp" +#include "SDK/BP_Pot_02a_classes.hpp" +#include "SDK/W_Options_classes.hpp" +#include "SDK/BP_Prefab_Parent_0_classes.hpp" +#include "SDK/BP_CatacombsInitialDoorTrigger_classes.hpp" +#include "SDK/BP_SelectStationRiddle_classes.hpp" +#include "SDK/BPI_InteractionManager_classes.hpp" +#include "SDK/BP_Neutral_classes.hpp" +#include "SDK/W_InteractableStation_classes.hpp" +#include "SDK/BP_Safe_classes.hpp" +#include "SDK/BP_ChangeTabInput_classes.hpp" +#include "SDK/BP_ItemPickup_classes.hpp" +#include "SDK/W_WatchesStation_classes.hpp" +#include "SDK/BP_WatchesStation_classes.hpp" +#include "SDK/BP_ContainerUpgradeItemData_classes.hpp" +#include "SDK/W_UnlockableStation_classes.hpp" +#include "SDK/BP_Codelock_classes.hpp" +#include "SDK/W_CodelockStation_classes.hpp" +#include "SDK/W_ComputerSquaresStation_classes.hpp" +#include "SDK/W_AntiqueBoxLocker_classes.hpp" +#include "SDK/BP_Pot_05a_classes.hpp" +#include "SDK/BP_BookShelf_02b_classes.hpp" +#include "SDK/BP_StairsTrigger_classes.hpp" +#include "SDK/W_TripleFuseStation_classes.hpp" +#include "SDK/BP_WeaponLocker_classes.hpp" +#include "SDK/W_WeaponLockerStation_classes.hpp" +#include "SDK/BP_Locker_classes.hpp" +#include "SDK/BP_PadlockLocker_Pouch_classes.hpp" +#include "SDK/W_PadlockStation_Pouch_classes.hpp" +#include "SDK/BP_PedestalStation_classes.hpp" +#include "SDK/W_PedestalStation_classes.hpp" +#include "SDK/BP_DoorTimerEnable_classes.hpp" +#include "SDK/S_StaggerData_structs.hpp" +#include "SDK/BP_WorkbenchStation_classes.hpp" +#include "SDK/BP_Roller_01a_classes.hpp" +#include "SDK/W_WorkbenchStation_classes.hpp" +#include "SDK/BP_PadlockLocker_Item_classes.hpp" +#include "SDK/W_PadlockStation_classes.hpp" +#include "SDK/W_DoorTimerStation_classes.hpp" +#include "SDK/BP_SwitchersUnlockStation_classes.hpp" +#include "SDK/BPC_VoiceHandler_classes.hpp" +#include "SDK/W_SwitchersStation_classes.hpp" +#include "SDK/W_InteractableStationsView_classes.hpp" +#include "SDK/BP_SaveStation_classes.hpp" +#include "SDK/PDA_Drop_classes.hpp" +#include "SDK/BP_HandStation_classes.hpp" +#include "SDK/W_HandStation_classes.hpp" +#include "SDK/W_HealthVignette_classes.hpp" +#include "SDK/BP_Statue_classes.hpp" +#include "SDK/BP_MainCharacter_classes.hpp" +#include "SDK/W_OnePageTooltipsHandler_classes.hpp" +#include "SDK/W_TooltipManager_classes.hpp" +#include "SDK/BP_UI_HorizontalInput_classes.hpp" +#include "SDK/W_FileDisplayer_classes.hpp" +#include "SDK/BP_Decal_BloodSplash_01a_classes.hpp" +#include "SDK/DA_CheckRemainingTime_classes.hpp" +#include "SDK/PDA_EnemiesDamageAbility_classes.hpp" +#include "SDK/BP_Watches_classes.hpp" +#include "SDK/W_ChaptersViewer_classes.hpp" +#include "SDK/W_WeaponDisplayer_classes.hpp" +#include "SDK/BPC_AimHandler_classes.hpp" +#include "SDK/BP_Weapon_classes.hpp" +#include "SDK/BPC_FireHandler_classes.hpp" +#include "SDK/BP_PickupObserver_classes.hpp" +#include "SDK/W_RifleDisplayer_classes.hpp" +#include "SDK/W_ShotgunWeaponDisplayer_classes.hpp" +#include "SDK/W_DeagleWeaponDisplayer_classes.hpp" +#include "SDK/W_GenericCrosshair_classes.hpp" +#include "SDK/BP_StreamingLevelForcedUpdated_classes.hpp" +#include "SDK/W_GenericWeaponDisplayer_classes.hpp" +#include "SDK/BP_LockerRoomData_classes.hpp" +#include "SDK/W_DoubleBarrelWeaponDisplayer_classes.hpp" +#include "SDK/S_FloorData_structs.hpp" +#include "SDK/BP_MapManager_classes.hpp" +#include "SDK/ABP_DefaultShotgun_structs.hpp" +#include "SDK/ABP_DefaultShotgun_classes.hpp" +#include "SDK/W_ExchangeMachineInteractionDisplayer_classes.hpp" +#include "SDK/W_FileView_classes.hpp" +#include "SDK/W_NavigationTab_classes.hpp" +#include "SDK/W_Files_classes.hpp" +#include "SDK/W_Task_classes.hpp" +#include "SDK/W_NavigationHandler_classes.hpp" +#include "SDK/BP_ColdWeatherZoneTrigger_classes.hpp" +#include "SDK/W_HolsterContainer_classes.hpp" +#include "SDK/W_SelectedAbilities_classes.hpp" +#include "SDK/W_Floor2_classes.hpp" +#include "SDK/BPI_MapManager_classes.hpp" +#include "SDK/W_Floor3_classes.hpp" +#include "SDK/W_Basement_classes.hpp" +#include "SDK/PDA_CollectablesSize_classes.hpp" +#include "SDK/PDA_FullAbilitiesAchievement_classes.hpp" +#include "SDK/BP_TV_Slideshow_classes.hpp" +#include "SDK/PDA_CounterAchievement_classes.hpp" +#include "SDK/BP_Decal_Graffiti_04a_classes.hpp" +#include "SDK/PDA_ChapterAchievement_classes.hpp" +#include "SDK/PDA_NoDeathEnding_classes.hpp" +#include "SDK/PDA_EndingStateAchievement_classes.hpp" +#include "SDK/PDA_ItemAddedAchievement_classes.hpp" +#include "SDK/PDA_EndingModeAchievement_classes.hpp" +#include "SDK/PDA_ItemSpawnCondition_classes.hpp" +#include "SDK/BP_ItemSpawnManager_classes.hpp" +#include "SDK/PDA_FullInventorySize_classes.hpp" +#include "SDK/BP_NoticeablesManager_classes.hpp" +#include "SDK/BP_Noticeable_classes.hpp" +#include "SDK/BP_InputBehaviour_classes.hpp" +#include "SDK/BP_FireInput_classes.hpp" +#include "SDK/BP_ReloadInput_classes.hpp" +#include "SDK/BP_Decal_Graffiti_01a_classes.hpp" +#include "SDK/ABP_Wincheser1873_structs.hpp" +#include "SDK/ABP_Wincheser1873_classes.hpp" +#include "SDK/BP_Levergun_classes.hpp" +#include "SDK/W_Overlay_classes.hpp" +#include "SDK/BP_DefaultHandgun_Bullet_classes.hpp" +#include "SDK/BP_Winchester1873_classes.hpp" +#include "SDK/BP_HolsterInput_classes.hpp" +#include "SDK/BP_AbillitiesInput_classes.hpp" +#include "SDK/BTT_MoveToTarget_classes.hpp" +#include "SDK/BTT_Guilt_BackHit_classes.hpp" +#include "SDK/BP_Autorifle_classes.hpp" +#include "SDK/ABP_DefaultHandgun_structs.hpp" +#include "SDK/ABP_DefaultHandgun_classes.hpp" +#include "SDK/ABP_AR10_structs.hpp" +#include "SDK/ABP_AR10_classes.hpp" +#include "SDK/BP_AR10_classes.hpp" +#include "SDK/BPC_MovementSystem_classes.hpp" +#include "SDK/BP_RunInput_classes.hpp" +#include "SDK/CBP_Enemy_Animated_classes.hpp" +#include "SDK/ABP_Cooper_Face_structs.hpp" +#include "SDK/ABP_Cooper_Face_classes.hpp" +#include "SDK/BP_MapInput_classes.hpp" +#include "SDK/BPC_WieldablesHolsterViewer_classes.hpp" +#include "SDK/BPC_LinesHandler_classes.hpp" +#include "SDK/BPC_BattleSystem_classes.hpp" +#include "SDK/BPC_HeartbeatSystem_classes.hpp" +#include "SDK/BPC_HolsterSelector_classes.hpp" +#include "SDK/BP_Rack_02a_classes.hpp" +#include "SDK/BP_SwitchersLockChecker_classes.hpp" +#include "SDK/BP_LookInput_classes.hpp" +#include "SDK/BP_Enemy_Static_classes.hpp" +#include "SDK/BP_MovementInput_classes.hpp" +#include "SDK/S_NoticeableHoverInfo_structs.hpp" +#include "SDK/BP_Radio_classes.hpp" +#include "SDK/BP_AmbientDisableTrigger_classes.hpp" +#include "SDK/BP_Handgun_classes.hpp" +#include "SDK/BP_Deagle_classes.hpp" +#include "SDK/BP_Rack_05c_classes.hpp" +#include "SDK/ABP_Deagle_structs.hpp" +#include "SDK/ABP_Deagle_classes.hpp" +#include "SDK/BP_DefaultHandgun_classes.hpp" +#include "SDK/BP_Shotgun_classes.hpp" +#include "SDK/BP_AdditiveTaskFinishTrigger_classes.hpp" +#include "SDK/BP_DefaultShotgun_classes.hpp" +#include "SDK/BP_DoubleBarrel_classes.hpp" +#include "SDK/ABP_DoubleBarrel_structs.hpp" +#include "SDK/ABP_DoubleBarrel_classes.hpp" +#include "SDK/W_WatchesViewer_classes.hpp" +#include "SDK/ABP_Enemy_Identity_Guilt_structs.hpp" +#include "SDK/ABP_Enemy_Identity_Guilt_classes.hpp" +#include "SDK/BP_InteractionInput_classes.hpp" +#include "SDK/BP_AmbientEnableTrigger_classes.hpp" +#include "SDK/BP_InventoryInput_classes.hpp" +#include "SDK/BP_FilesInput_classes.hpp" +#include "SDK/DA_Radio_classes.hpp" +#include "SDK/DA_Tonfa_classes.hpp" +#include "SDK/BP_FlashlightInput_classes.hpp" +#include "SDK/BP_WatchersShowSpawn_classes.hpp" +#include "SDK/BP_PoliceTonfaInput_classes.hpp" +#include "SDK/ABP_OldPistol_structs.hpp" +#include "SDK/ABP_OldPistol_classes.hpp" +#include "SDK/BP_UI_VerticalInput_classes.hpp" +#include "SDK/BP_GoodChoiceHandler_classes.hpp" +#include "SDK/BP_Trigger_classes.hpp" +#include "SDK/BP_PlayerLocationTrigger_classes.hpp" +#include "SDK/W_Floor1_classes.hpp" +#include "SDK/W_Map_classes.hpp" +#include "SDK/BP_LightTooltipOnPickupObserver_classes.hpp" +#include "SDK/W_LeverGunDisplayer_classes.hpp" +#include "SDK/W_WeaponDisplayers_classes.hpp" +#include "SDK/BP_Decal_Graffiti_01d_classes.hpp" +#include "SDK/BP_MedDevice_Stack_01b_classes.hpp" +#include "SDK/W_HolsterSlotsView_classes.hpp" +#include "SDK/GI_FTL_classes.hpp" +#include "SDK/BP_WindowFrame_Cracked_03a_classes.hpp" +#include "SDK/M_Complex_classes.hpp" +#include "SDK/BP_GuiltChainedSpawner_classes.hpp" +#include "SDK/BP_CoinsMachine_classes.hpp" +#include "SDK/BP_Kamikaze_classes.hpp" +#include "SDK/WallExplode_classes.hpp" +#include "SDK/BP_ExchangeMachine_classes.hpp" +#include "SDK/BP_CrapteRoomData_classes.hpp" +#include "SDK/BP_Desk_02a_classes.hpp" +#include "SDK/BP_Case_classes.hpp" +#include "SDK/BP_Guilt_Burden_classes.hpp" +#include "SDK/BP_Decal_Graffiti_01e_classes.hpp" +#include "SDK/BTT_Guilt_Hurricane_classes.hpp" +#include "SDK/BTD_IsClingedByTree_classes.hpp" +#include "SDK/BTT_Guilt_LeftBurden_classes.hpp" +#include "SDK/BP_LineEnableTrigger_classes.hpp" +#include "SDK/BTT_Guilt_Hummer_classes.hpp" +#include "SDK/BP_Ritual_classes.hpp" +#include "SDK/BTT_Guilt_ShutterAttack_classes.hpp" +#include "SDK/BTT_Guilt_FootAttack_classes.hpp" +#include "SDK/BP_AdditiveTaskStartTrigger_classes.hpp" +#include "SDK/BTT_Guilt_Charge_classes.hpp" +#include "SDK/BTD_IsTargetNearBack_classes.hpp" +#include "SDK/BP_Destructible_GuiltWall_classes.hpp" +#include "SDK/BP_BookShelf_01b_classes.hpp" +#include "SDK/BP_Guilt_Tree_classes.hpp" +#include "SDK/BP_CooperShowData_classes.hpp" +#include "SDK/BP_Watcher_Light_classes.hpp" +#include "SDK/ABP_Enemy_Static_structs.hpp" +#include "SDK/ABP_Enemy_Static_classes.hpp" +#include "SDK/BP_Surgeon_classes.hpp" +#include "SDK/BP_Zombie_classes.hpp" +#include "SDK/BP_Nurse_classes.hpp" +#include "SDK/BP_Sinner_classes.hpp" +#include "SDK/BTT_AI_Sinner_DrinkFuel_classes.hpp" +#include "SDK/BP_Harrison_classes.hpp" +#include "SDK/BP_Harrison_Speaker_classes.hpp" +#include "SDK/BP_Anger_SecondPhase_classes.hpp" +#include "SDK/BP_CheckAngerDeathObserver_classes.hpp" +#include "SDK/BP_Anger_Chaser_classes.hpp" +#include "SDK/BP_LockedCrateRoomData_classes.hpp" +#include "SDK/BP_KeycardCase_classes.hpp" +#include "SDK/BTT_MoveToNavigationPoint_Investigating_classes.hpp" +#include "SDK/BP_TripwireTrap_classes.hpp" +#include "SDK/BP_ExplosiveTank_classes.hpp" +#include "SDK/BTT_AI_MeleeCatch_classes.hpp" +#include "SDK/BTT_SetStateAsInvestigating_classes.hpp" +#include "SDK/BP_OnDoorDestroyedSpawner_classes.hpp" +#include "SDK/BP_PouchPickedUpSpawner_classes.hpp" +#include "SDK/BP_TriggerSpawnOnMinChapter_classes.hpp" +#include "SDK/BP_StationUnlockedSpawner_classes.hpp" +#include "SDK/BP_ToiletDoorOpennedSpawner_classes.hpp" +#include "SDK/BP_ItemPickupSpawner_classes.hpp" +#include "SDK/BP_ChapterStartSpawn_classes.hpp" +#include "SDK/BP_BadChoiceHandler_classes.hpp" +#include "SDK/BP_MoveToTriggerSpawn_classes.hpp" +#include "SDK/BP_EventSpawn_classes.hpp" +#include "SDK/BP_CloseDoorForcedTrigger_classes.hpp" +#include "SDK/BTS_AI_StopAttackingIfTargetIsDead_classes.hpp" +#include "SDK/W_MapPickupDisplayer_classes.hpp" +#include "SDK/E_AISense_structs.hpp" +#include "SDK/AIC_Guilt_classes.hpp" +#include "SDK/BP_LineAfterTooltipEnded_classes.hpp" +#include "SDK/BTD_IsAttackTargetInRange_classes.hpp" +#include "SDK/BP_StatueDetailLockChecker_classes.hpp" +#include "SDK/BP_Melee_classes.hpp" +#include "SDK/BPC_EnemyAudio_classes.hpp" +#include "SDK/BTT_MoveToNavigationPoint_classes.hpp" +#include "SDK/AIC_Melee_classes.hpp" +#include "SDK/BP_SurgicalStuff_01b_classes.hpp" +#include "SDK/AIC_Anger_1_classes.hpp" +#include "SDK/BPC_AIPerceptionChecker_classes.hpp" +#include "SDK/BTD_NeedToMoveToTarget_classes.hpp" +#include "SDK/BTS_StopAttackingIfTargetIsDead_classes.hpp" +#include "SDK/BP_Box_01b_classes.hpp" +#include "SDK/ABP_Enemy_Identity_Anger_structs.hpp" +#include "SDK/ABP_Enemy_Identity_Anger_classes.hpp" +#include "SDK/BP_TriggerSpawnNeutral_classes.hpp" +#include "SDK/AIC_Enemy_Base_classes.hpp" +#include "SDK/BP_Medical_Cart_1_classes.hpp" +#include "SDK/BTT_SetStateAsPassive_classes.hpp" +#include "SDK/BTT_UpdateSpeed_classes.hpp" +#include "SDK/ABP_Anger_Face_structs.hpp" +#include "SDK/ABP_Anger_Face_classes.hpp" +#include "SDK/BP_EnemiesManager_classes.hpp" +#include "SDK/BP_ChainedCrateRoomData_classes.hpp" +#include "SDK/BP_Sinner_Censer_classes.hpp" +#include "SDK/ABP_Enemy_Nurse_structs.hpp" +#include "SDK/ABP_Enemy_Nurse_classes.hpp" +#include "SDK/BP_ToiletDoorObserver_classes.hpp" +#include "SDK/ABP_Enemy_Harrison_structs.hpp" +#include "SDK/ABP_Enemy_Harrison_classes.hpp" +#include "SDK/ABP_Guilt_Burden_structs.hpp" +#include "SDK/ABP_Guilt_Burden_classes.hpp" +#include "SDK/ABP_Enemy_Monkey_structs.hpp" +#include "SDK/ABP_Enemy_Monkey_classes.hpp" +#include "SDK/BP_InfoBoard_01a_classes.hpp" +#include "SDK/ABP_Enemy_Surgeon_structs.hpp" +#include "SDK/ABP_Enemy_Surgeon_classes.hpp" +#include "SDK/ABP_Enemy_Kamikaze_structs.hpp" +#include "SDK/ABP_Enemy_Kamikaze_classes.hpp" +#include "SDK/ABP_Enemy_Clown_structs.hpp" +#include "SDK/ABP_Enemy_Clown_classes.hpp" +#include "SDK/ABP_Enemy_Sinner_structs.hpp" +#include "SDK/ABP_Enemy_Sinner_classes.hpp" +#include "SDK/ABP_Enemy_structs.hpp" +#include "SDK/ABP_Enemy_classes.hpp" +#include "SDK/ABP_Enemy_Identity_Base_structs.hpp" +#include "SDK/ABP_Enemy_Identity_Base_classes.hpp" +#include "SDK/ALI_Enemy_classes.hpp" +#include "SDK/BPI_EnemyAI_classes.hpp" +#include "SDK/BTT_ClearFocus_classes.hpp" +#include "SDK/BP_TaskEnableTrigger_classes.hpp" +#include "SDK/BP_CloseCatacombsDoorTrigger_classes.hpp" +#include "SDK/BP_CatacombsInitialDoor_classes.hpp" +#include "SDK/BP_Bench_01a_classes.hpp" +#include "SDK/BP_GiantMouthStation_classes.hpp" +#include "SDK/BP_DoubleBarrelHolder_classes.hpp" +#include "SDK/BP_Chair_01a_classes.hpp" +#include "SDK/BP_XrayStation_classes.hpp" +#include "SDK/BP_AdditiveTaskOnDoorDestroyed_classes.hpp" +#include "SDK/BTD_HasMoveToPoint_classes.hpp" +#include "SDK/BPI_AI_classes.hpp" +#include "SDK/BP_DestructibleRoomDoor_classes.hpp" +#include "SDK/BP_DestructibleDoorData_classes.hpp" +#include "SDK/BP_DestructibleDoor_classes.hpp" +#include "SDK/BP_PoolMotorStation_classes.hpp" +#include "SDK/BP_DoorChainsStation_classes.hpp" +#include "SDK/BP_CeilingTile_4x1_01a_classes.hpp" +#include "SDK/BP_CeilingTile_6x4_01b_classes.hpp" +#include "SDK/BP_CeilingLamp_classes.hpp" +#include "SDK/BP_RoomSign_classes.hpp" +#include "SDK/BTT_FocusPlayer_classes.hpp" +#include "SDK/ABP_Enemy_Retargeter_structs.hpp" +#include "SDK/ABP_Enemy_Retargeter_classes.hpp" +#include "SDK/BP_AnimNotify_EnemyAttack_PlaySound_classes.hpp" +#include "SDK/BPI_EnemyAudio_classes.hpp" +#include "SDK/BP_Destructible_BasementWall_classes.hpp" +#include "SDK/BP_WallLamp_classes.hpp" +#include "SDK/BP_LineOnDoorOpenned_classes.hpp" +#include "SDK/BP_AudioOnToilerDoorOpen_classes.hpp" +#include "SDK/BP_BedsideTable_01a_classes.hpp" +#include "SDK/BP_AmbientAudio_classes.hpp" +#include "SDK/BP_CatacombesDoor_classes.hpp" +#include "SDK/E_RadiatorSection_structs.hpp" +#include "SDK/BP_Radiator_classes.hpp" +#include "SDK/BP_Sky_Sphere_classes.hpp" +#include "SDK/ABP_Manny_PostProcess_0_structs.hpp" +#include "SDK/ABP_Manny_PostProcess_0_classes.hpp" +#include "SDK/BP_Cooper_Light_classes.hpp" +#include "SDK/BTT_MoveToRandomPositionNearPlayer_classes.hpp" +#include "SDK/BP_PhoneInteractableData_classes.hpp" +#include "SDK/FS_MasterField_classes.hpp" +#include "SDK/BP_DestructibleBase_classes.hpp" +#include "SDK/BP_EndingLights_Main_classes.hpp" +#include "SDK/BP_DiscoBall_classes.hpp" +#include "SDK/ABP_Manny_To_Guilt_Retargeter_structs.hpp" +#include "SDK/ABP_Manny_To_Guilt_Retargeter_classes.hpp" +#include "SDK/BP_WatchesData_classes.hpp" +#include "SDK/BP_GateDoor_classes.hpp" +#include "SDK/BP_ComputerGateData_classes.hpp" +#include "SDK/BP_ComputerGates_classes.hpp" +#include "SDK/BP_Pills_01b_classes.hpp" +#include "SDK/FS_AnchorField_Generic_classes.hpp" +#include "SDK/BP_RescueSignalObserver_classes.hpp" +#include "SDK/BP_LineAfterPickingFile_classes.hpp" +#include "SDK/BP_StationDefinitionDepleteHandler_classes.hpp" +#include "SDK/ABP_GuiltFace_PostProcess_structs.hpp" +#include "SDK/ABP_GuiltFace_PostProcess_classes.hpp" +#include "SDK/BTT_MoveAlongPatrolRoute_classes.hpp" +#include "SDK/BTD_HasPatrolRoute_classes.hpp" +#include "SDK/BTT_SetMovementSpeed_classes.hpp" +#include "SDK/BP_EnableMusicOnNoticeableEnded_classes.hpp" +#include "SDK/CR_Mannequin_Procedural_0_classes.hpp" +#include "SDK/W_HealthBar_classes.hpp" +#include "SDK/BP_DeathManager_classes.hpp" +#include "SDK/BP_AbilityRoom_classes.hpp" +#include "SDK/BP_WatchesActivateTrigger_classes.hpp" +#include "SDK/PDA_Ability_Disable_classes.hpp" +#include "SDK/BP_SafeZoneTrigger_classes.hpp" +#include "SDK/PDA_Ability_Equip_classes.hpp" +#include "SDK/BP_MapBlockerTrigger_classes.hpp" +#include "SDK/BP_NoticeableData_classes.hpp" +#include "SDK/BP_LineOnBattleStart_classes.hpp" +#include "SDK/BP_StartBattleObserver_classes.hpp" +#include "SDK/BP_ContextChangeOnTrigger_classes.hpp" +#include "SDK/BP_MovieEndedTooltip_classes.hpp" +#include "SDK/BP_SireneAudioTrigger_classes.hpp" +#include "SDK/BP_BlockerOnWatchVideo_classes.hpp" +#include "SDK/BP_LineNoticeableWaitTrigger_classes.hpp" +#include "SDK/BP_CeilingTile_6x6_01a_classes.hpp" +#include "SDK/BP_StreamingLevelsLoader_classes.hpp" +#include "SDK/BP_SafeZoneExitTrigger_classes.hpp" +#include "SDK/BP_ItemPickupRoom_classes.hpp" +#include "SDK/BP_Desk_02d_classes.hpp" +#include "SDK/BP_SetLevelStreamingLocation_classes.hpp" +#include "SDK/BP_AdditiveTaskOnItemPickup_classes.hpp" +#include "SDK/BP_ObjectDisableOnPickedUp_classes.hpp" +#include "SDK/BP_BookShelf_01a_classes.hpp" +#include "SDK/BP_ComputerSquaresRiddleData_classes.hpp" +#include "SDK/BP_ExitTaskStartTrigger_classes.hpp" +#include "SDK/BP_LightsDisabledObserver_classes.hpp" +#include "SDK/BP_EnableAudioBeforeItemPickedUp_classes.hpp" +#include "SDK/BP_PushTagObserver_classes.hpp" +#include "SDK/BP_AdditiveTaskOnItemInInventory_classes.hpp" +#include "SDK/BP_WorkbenchItemData_classes.hpp" +#include "SDK/BP_FileLineEnableTrigger_classes.hpp" +#include "SDK/BP_LineOnItemPickupObserver_classes.hpp" +#include "SDK/BP_StationEnableTaskDisable_classes.hpp" +#include "SDK/BP_LineOnPickupObserver_classes.hpp" +#include "SDK/BP_AntiqueBoxData_classes.hpp" +#include "SDK/BP_LibraryTaskOnCollectablePickedUp_classes.hpp" +#include "SDK/BP_CatacombsLeverStation_classes.hpp" +#include "SDK/BP_LaddersRiddle_classes.hpp" +#include "SDK/BP_TaskStartTrigger_classes.hpp" +#include "SDK/BP_TimeLockedDoorRoomData_classes.hpp" +#include "SDK/BP_LockedDoorRoomData_classes.hpp" +#include "SDK/BP_AudioEnableTrigger_classes.hpp" +#include "SDK/BP_TooltipEnableTrigger_classes.hpp" +#include "SDK/BP_SequenceEnableTrigger_classes.hpp" +#include "SDK/BP_TriggerObserver_classes.hpp" +#include "SDK/BP_CollectableRoom_classes.hpp" +#include "SDK/BP_TooltipOnPickupObserver_classes.hpp" +#include "SDK/BP_PushTooltipOnStart_classes.hpp" +#include "SDK/BP_ContainerSizeChangedTooltip_classes.hpp" +#include "SDK/BP_Mortuary_Rack_System_classes.hpp" +#include "SDK/PDA_HealthcareSpawnCondition_classes.hpp" +#include "SDK/BP_DelayedObserver_classes.hpp" +#include "SDK/BPI_DatabaseManager_classes.hpp" +#include "SDK/PDA_MaxHealthEffectIncrease_classes.hpp" +#include "SDK/BP_LoopObserver_classes.hpp" +#include "SDK/PDA_EnemiesSelfDamage_classes.hpp" +#include "SDK/W_CandyMachineStation_classes.hpp" +#include "SDK/W_ComputerGates_classes.hpp" +#include "SDK/W_SignDisplayer_classes.hpp" +#include "SDK/BP_Decal_FloorDirt_02e_classes.hpp" +#include "SDK/BP_Pills_01a_classes.hpp" +#include "SDK/BP_Pills_01d_classes.hpp" +#include "SDK/BP_InfoBoard_03a_classes.hpp" +#include "SDK/BP_Pills_01c_classes.hpp" +#include "SDK/BP_TestTube_01b_classes.hpp" +#include "SDK/BP_Box_02a_classes.hpp" +#include "SDK/BP_Decal_Crack_04a_classes.hpp" +#include "SDK/BP_CeilingTile_4x4_01b_classes.hpp" +#include "SDK/BP_TestTube_01a_classes.hpp" +#include "SDK/BP_Medical_Cart_7_classes.hpp" +#include "SDK/BP_Rack_05a_classes.hpp" +#include "SDK/BP_MedDevice_02a_classes.hpp" +#include "SDK/BP_CeilingTile_6x4_01a_classes.hpp" +#include "SDK/BP_CeilingTile_8x8_01b_classes.hpp" +#include "SDK/BP_Candle_Single_01a_classes.hpp" +#include "SDK/BP_Fridge_01a_classes.hpp" +#include "SDK/BP_Desk_02c_classes.hpp" +#include "SDK/BP_Desk_01c_classes.hpp" +#include "SDK/BP_Mortuary_Trolley_classes.hpp" +#include "SDK/BP_CeilingTile_6x8_01b_classes.hpp" +#include "SDK/BP_Hanger_01a_classes.hpp" +#include "SDK/BP_TreatmentTable_02b_classes.hpp" +#include "SDK/BP_TreatmentTable_02a_classes.hpp" +#include "SDK/BP_Desk_01b_classes.hpp" +#include "SDK/BP_TreatmentTable_01b_classes.hpp" +#include "SDK/BP_TreatmentTable_03a_classes.hpp" +#include "SDK/BP_TreatmentTable_02d_classes.hpp" +#include "SDK/BP_TreatmentTable_01a_classes.hpp" +#include "SDK/BP_Pot_04a_classes.hpp" +#include "SDK/BP_Operation_Lamp_2_classes.hpp" +#include "SDK/BP_CeilingTile_8x8_01c_classes.hpp" +#include "SDK/BP_CeilingTile_4x4_01c_classes.hpp" +#include "SDK/BP_Rack_05b_classes.hpp" +#include "SDK/BP_Rack_03a_classes.hpp" +#include "SDK/BP_Rack_06b_classes.hpp" +#include "SDK/BP_Medical_Cart_2_classes.hpp" +#include "SDK/BP_Decal_FloorDirt_03b_classes.hpp" +#include "SDK/BP_TreatmentTable_01d_classes.hpp" +#include "SDK/BP_Decal_BloodSplash_01d_classes.hpp" +#include "SDK/BP_Generator_01a_classes.hpp" +#include "SDK/BP_Watcher_classes.hpp" +#include "SDK/BP_CeilingTile_6x8_01c_classes.hpp" +#include "SDK/BP_WatchersClothSimulation_classes.hpp" +#include "SDK/BP_Rack_01a_classes.hpp" +#include "SDK/BP_Decal_Crack_03a_classes.hpp" +#include "SDK/BP_Candle_Cluster_01a_classes.hpp" +#include "SDK/BP_ThickCandle_01a_classes.hpp" +#include "SDK/BP_BookShelf_03a_classes.hpp" +#include "SDK/BP_Fridge_03a_classes.hpp" +#include "SDK/BP_Socket_01a_classes.hpp" +#include "SDK/BP_Decal_BloodSplash_01c_classes.hpp" +#include "SDK/BP_L_Shaped_Autopsy_Table_classes.hpp" +#include "SDK/BP_Radiator_01a_classes.hpp" +#include "SDK/BP_Radiator_01b_classes.hpp" +#include "SDK/BP_Decontamination_Sink_classes.hpp" +#include "SDK/BP_Bottle_classes.hpp" +#include "SDK/BP_Faretto_On_classes.hpp" +#include "SDK/BP_Luggage_RandomColor_classes.hpp" +#include "SDK/BP_Skylight_01a_classes.hpp" +#include "SDK/BP_SUV01_classes.hpp" +#include "SDK/BP_CeilingTile_2x4_01a_classes.hpp" +#include "SDK/BP_Woman_on_Chair_classes.hpp" +#include "SDK/BPP_Scatola_Plastica_Con_Toppig_classes.hpp" +#include "SDK/BP_Pot_03a_classes.hpp" +#include "SDK/BP_Pot_01a_classes.hpp" +#include "SDK/BP_Rack_07a_classes.hpp" +#include "SDK/BP_Decal_Crack_05a_classes.hpp" +#include "SDK/BP_Skeleton_01a_classes.hpp" +#include "SDK/BP_Skeleton_03a_classes.hpp" +#include "SDK/BP_BonesPile_01a_classes.hpp" +#include "SDK/BP_Rack_04b_classes.hpp" +#include "SDK/BPP_Beverage_Dressing_Table_classes.hpp" +#include "SDK/BP_Wall_Mount_Autopsy_Station_classes.hpp" diff --git a/FearTheTimeloop/UnrealContainers.hpp b/FearTheTimeloop/UnrealContainers.hpp new file mode 100644 index 0000000..4874083 --- /dev/null +++ b/FearTheTimeloop/UnrealContainers.hpp @@ -0,0 +1,909 @@ +#pragma once + +/* +* SDK generated by Dumper-7 +* +* https://github.com/Encryqed/Dumper-7 +*/ + +// Container implementations with iterators. See https://github.com/Fischsalat/UnrealContainers + +#include +#include +#include +#include "UtfN.hpp" + +namespace UC +{ + typedef int8_t int8; + typedef int16_t int16; + typedef int32_t int32; + typedef int64_t int64; + + typedef uint8_t uint8; + typedef uint16_t uint16; + typedef uint32_t uint32; + typedef uint64_t uint64; + + template + class TArray; + + template + class TSparseArray; + + template + class TSet; + + template + class TMap; + + template + class TPair; + + namespace Iterators + { + class FSetBitIterator; + + template + class TArrayIterator; + + template + class TContainerIterator; + + template + using TSparseArrayIterator = TContainerIterator>; + + template + using TSetIterator = TContainerIterator>; + + template + using TMapIterator = TContainerIterator>; + } + + + namespace ContainerImpl + { + namespace HelperFunctions + { + inline uint32 FloorLog2(uint32 Value) + { + uint32 pos = 0; + if (Value >= 1 << 16) { Value >>= 16; pos += 16; } + if (Value >= 1 << 8) { Value >>= 8; pos += 8; } + if (Value >= 1 << 4) { Value >>= 4; pos += 4; } + if (Value >= 1 << 2) { Value >>= 2; pos += 2; } + if (Value >= 1 << 1) { pos += 1; } + return pos; + } + + inline uint32 CountLeadingZeros(uint32 Value) + { + if (Value == 0) + return 32; + + return 31 - FloorLog2(Value); + } + } + + template + struct TAlignedBytes + { + alignas(Alignment) uint8 Pad[Size]; + }; + + template + class TInlineAllocator + { + public: + template + class ForElementType + { + private: + static constexpr int32 ElementSize = sizeof(ElementType); + static constexpr int32 ElementAlign = alignof(ElementType); + + static constexpr int32 InlineDataSizeBytes = NumInlineElements * ElementSize; + + private: + TAlignedBytes InlineData[NumInlineElements]; + ElementType* SecondaryData; + + public: + ForElementType() + : InlineData{ 0x0 }, SecondaryData(nullptr) + { + } + + ForElementType(ForElementType&&) = default; + ForElementType(const ForElementType&) = default; + + public: + ForElementType& operator=(ForElementType&&) = default; + ForElementType& operator=(const ForElementType&) = default; + + public: + inline const ElementType* GetAllocation() const { return SecondaryData ? SecondaryData : reinterpret_cast(&InlineData); } + + inline uint32 GetNumInlineBytes() const { return NumInlineElements; } + }; + }; + + class FBitArray + { + protected: + static constexpr int32 NumBitsPerDWORD = 32; + static constexpr int32 NumBitsPerDWORDLogTwo = 5; + + private: + TInlineAllocator<4>::ForElementType Data; + int32 NumBits; + int32 MaxBits; + + public: + FBitArray() + : NumBits(0), MaxBits(Data.GetNumInlineBytes() * NumBitsPerDWORD) + { + } + + FBitArray(const FBitArray&) = default; + + FBitArray(FBitArray&&) = default; + + public: + FBitArray& operator=(FBitArray&&) = default; + + FBitArray& operator=(const FBitArray& Other) = default; + + private: + inline void VerifyIndex(int32 Index) const { if (!IsValidIndex(Index)) throw std::out_of_range("Index was out of range!"); } + + public: + inline int32 Num() const { return NumBits; } + inline int32 Max() const { return MaxBits; } + + inline const uint32* GetData() const { return reinterpret_cast(Data.GetAllocation()); } + + inline bool IsValidIndex(int32 Index) const { return Index >= 0 && Index < NumBits; } + + inline bool IsValid() const { return GetData() && NumBits > 0; } + + public: + inline bool operator[](int32 Index) const { VerifyIndex(Index); return GetData()[Index / NumBitsPerDWORD] & (1 << (Index & (NumBitsPerDWORD - 1))); } + + inline bool operator==(const FBitArray& Other) const { return NumBits == Other.NumBits && GetData() == Other.GetData(); } + inline bool operator!=(const FBitArray& Other) const { return NumBits != Other.NumBits || GetData() != Other.GetData(); } + + public: + friend Iterators::FSetBitIterator begin(const FBitArray& Array); + friend Iterators::FSetBitIterator end (const FBitArray& Array); + }; + + template + union TSparseArrayElementOrFreeListLink + { + SparseArrayType ElementData; + + struct + { + int32 PrevFreeIndex; + int32 NextFreeIndex; + }; + }; + + template + class SetElement + { + private: + template + friend class TSet; + + private: + SetType Value; + int32 HashNextId; + int32 HashIndex; + }; + } + + + template + class TPair + { + public: + KeyType First; + ValueType Second; + + public: + TPair(KeyType Key, ValueType Value) + : First(Key), Second(Value) + { + } + + public: + inline KeyType& Key() { return First; } + inline const KeyType& Key() const { return First; } + + inline ValueType& Value() { return Second; } + inline const ValueType& Value() const { return Second; } + }; + + template + class TArray + { + private: + template + friend class TAllocatedArray; + + template + friend class TSparseArray; + + protected: + static constexpr uint64 ElementAlign = alignof(ArrayElementType); + static constexpr uint64 ElementSize = sizeof(ArrayElementType); + + protected: + ArrayElementType* Data; + int32 NumElements; + int32 MaxElements; + + public: + TArray() + : TArray(nullptr, 0, 0) + { + } + + TArray(ArrayElementType* Data, int32 NumElements, int32 MaxElements) + : Data(Data), NumElements(NumElements), MaxElements(MaxElements) + { + } + + TArray(const TArray&) = default; + + TArray(TArray&&) = default; + + public: + TArray& operator=(TArray&&) = default; + TArray& operator=(const TArray&) = default; + + private: + inline int32 GetSlack() const { return MaxElements - NumElements; } + + inline void VerifyIndex(int32 Index) const { if (!IsValidIndex(Index)) throw std::out_of_range("Index was out of range!"); } + + inline ArrayElementType& GetUnsafe(int32 Index) { return Data[Index]; } + inline const ArrayElementType& GetUnsafe(int32 Index) const { return Data[Index]; } + + public: + /* Adds to the array if there is still space for one more element */ + inline bool Add(const ArrayElementType& Element) + { + if (GetSlack() <= 0) + return false; + + Data[NumElements] = Element; + NumElements++; + + return true; + } + + inline bool Remove(int32 Index) + { + if (!IsValidIndex(Index)) + return false; + + NumElements--; + + for (int i = Index; i < NumElements; i++) + { + /* NumElements was decremented, acessing i + 1 is safe */ + Data[i] = Data[i + 1]; + } + + return true; + } + + inline void Clear() + { + NumElements = 0; + + if (Data) + memset(Data, 0, NumElements * ElementSize); + } + + public: + inline int32 Num() const { return NumElements; } + inline int32 Max() const { return MaxElements; } + + inline const ArrayElementType* GetDataPtr() const { return Data; } + + inline bool IsValidIndex(int32 Index) const { return Data && Index >= 0 && Index < NumElements; } + + inline bool IsValid() const { return Data && NumElements > 0 && MaxElements >= NumElements; } + + public: + inline ArrayElementType& operator[](int32 Index) { VerifyIndex(Index); return Data[Index]; } + inline const ArrayElementType& operator[](int32 Index) const { VerifyIndex(Index); return Data[Index]; } + + inline bool operator==(const TArray& Other) const { return Data == Other.Data; } + inline bool operator!=(const TArray& Other) const { return Data != Other.Data; } + + inline explicit operator bool() const { return IsValid(); }; + + public: + template friend Iterators::TArrayIterator begin(const TArray& Array); + template friend Iterators::TArrayIterator end (const TArray& Array); + }; + + class FString : public TArray + { + public: + friend std::ostream& operator<<(std::ostream& Stream, const UC::FString& Str) { return Stream << Str.ToString(); } + + public: + using TArray::TArray; + + FString(const wchar_t* Str) + { + const uint32 NullTerminatedLength = static_cast(wcslen(Str) + 0x1); + + Data = const_cast(Str); + NumElements = NullTerminatedLength; + MaxElements = NullTerminatedLength; + } + + FString(wchar_t* Str, int32 Num, int32 Max) + { + Data = Str; + NumElements = Num; + MaxElements = Max; + } + + public: + inline std::string ToString() const + { + if (*this) + { + return UtfN::Utf16StringToUtf8String(Data, NumElements - 1); // Exclude null-terminator + } + + return ""; + } + + inline std::wstring ToWString() const + { + if (*this) + return std::wstring(Data); + + return L""; + } + + public: + inline wchar_t* CStr() { return Data; } + inline const wchar_t* CStr() const { return Data; } + + public: + inline bool operator==(const FString& Other) const { return Other ? NumElements == Other.NumElements && wcscmp(Data, Other.Data) == 0 : false; } + inline bool operator!=(const FString& Other) const { return Other ? NumElements != Other.NumElements || wcscmp(Data, Other.Data) != 0 : true; } + }; + + // Utf8String that assumes C-APIs (strlen, strcmp) behaviour works for char8_t like Ansi strings, execept it's counting/comparing bytes not characters. + class FUtf8String : public TArray + { + public: + friend std::ostream& operator<<(std::ostream& Stream, const UC::FUtf8String& Str) { return Stream << Str.ToString(); } + + private: + inline const char* GetDataAsConstCharPtr() const + { + return reinterpret_cast(Data); + } + + public: + using TArray::TArray; + + FUtf8String(const char8_t* Str) + { + Data = const_cast(Str); + + const uint32 NullTerminatedLength = static_cast(strlen(GetDataAsConstCharPtr()) + 0x1); + + NumElements = NullTerminatedLength; + MaxElements = NullTerminatedLength; + } + + FUtf8String(char8_t* Str, int32 Num, int32 Max) + { + Data = Str; + NumElements = Num; + MaxElements = Max; + } + + public: + inline std::string ToString() const + { + if (*this) + { + return std::string(GetDataAsConstCharPtr(), NumElements - 1); // Exclude null-terminator + } + + return ""; + } + + inline std::wstring ToWString() const + { + if (*this) + return UtfN::StringToWString(ToString()); // Exclude null-terminator + + return L""; + } + + public: + inline char8_t* CStr() { return Data; } + inline const char8_t* CStr() const { return Data; } + + public: + inline bool operator==(const FUtf8String& Other) const { return Other ? NumElements == Other.NumElements && strcmp(GetDataAsConstCharPtr(), Other.GetDataAsConstCharPtr()) == 0 : false; } + inline bool operator!=(const FUtf8String& Other) const { return Other ? NumElements != Other.NumElements || strcmp(GetDataAsConstCharPtr(), Other.GetDataAsConstCharPtr()) != 0 : true; } + }; + + class FAnsiString : public TArray + { + public: + friend std::ostream& operator<<(std::ostream& Stream, const UC::FAnsiString& Str) { return Stream << Str.ToString(); } + + public: + using TArray::TArray; + + FAnsiString(const char* Str) + { + const uint32 NullTerminatedLength = static_cast(strlen(Str) + 0x1); + + Data = const_cast(Str); + NumElements = NullTerminatedLength; + MaxElements = NullTerminatedLength; + } + + FAnsiString(char* Str, int32 Num, int32 Max) + { + Data = Str; + NumElements = Num; + MaxElements = Max; + } + + public: + inline std::string ToString() const + { + if (*this) + { + return std::string(Data, NumElements - 1); // Exclude null-terminator + } + + return ""; + } + + inline std::wstring ToWString() const + { + if (*this) + return UtfN::StringToWString(ToString()); // Exclude null-terminator + + return L""; + } + + public: + inline char* CStr() { return Data; } + inline const char* CStr() const { return Data; } + + public: + inline bool operator==(const FAnsiString& Other) const { return Other ? NumElements == Other.NumElements && strcmp(Data, Other.Data) == 0 : false; } + inline bool operator!=(const FAnsiString& Other) const { return Other ? NumElements != Other.NumElements || strcmp(Data, Other.Data) != 0 : true; } + }; + + + /* + * Class to allow construction of a TArray, that uses c-style standard-library memory allocation. + * + * Useful for calling functions that expect a buffer of a certain size and do not reallocate that buffer. + * This avoids leaking memory, if the array would otherwise be allocated by the engine, and couldn't be freed without FMemory-functions. + */ + template + class TAllocatedArray : public TArray + { + public: + TAllocatedArray() = delete; + + public: + TAllocatedArray(int32 Size) + { + this->Data = static_cast(malloc(Size * sizeof(ArrayElementType))); + this->NumElements = 0x0; + this->MaxElements = Size; + } + + ~TAllocatedArray() + { + if (this->Data) + free(this->Data); + + this->NumElements = 0x0; + this->MaxElements = 0x0; + } + + public: + inline operator TArray() { return *reinterpret_cast< TArray*>(this); } + inline operator const TArray() const { return *reinterpret_cast*>(this); } + }; + + /* + * Class to allow construction of an FString, that uses c-style standard-library memory allocation. + * + * Useful for calling functions that expect a buffer of a certain size and do not reallocate that buffer. + * This avoids leaking memory, if the array would otherwise be allocated by the engine, and couldn't be freed without FMemory-functions. + */ + class FAllocatedString : public FString + { + public: + FAllocatedString() = delete; + + public: + FAllocatedString(int32 Size) + { + Data = static_cast(malloc(Size * sizeof(wchar_t))); + NumElements = 0x0; + MaxElements = Size; + } + + ~FAllocatedString() + { + if (Data) + free(Data); + + NumElements = 0x0; + MaxElements = 0x0; + } + + public: + inline operator FString() { return *reinterpret_cast< FString*>(this); } + inline operator const FString() const { return *reinterpret_cast(this); } + }; + template + class TSparseArray + { + private: + static constexpr uint32 ElementAlign = alignof(SparseArrayElementType); + static constexpr uint32 ElementSize = sizeof(SparseArrayElementType); + + private: + using FElementOrFreeListLink = ContainerImpl::TSparseArrayElementOrFreeListLink>; + + private: + TArray Data; + ContainerImpl::FBitArray AllocationFlags; + int32 FirstFreeIndex; + int32 NumFreeIndices; + + public: + TSparseArray() + : FirstFreeIndex(-1), NumFreeIndices(0) + { + } + + TSparseArray(TSparseArray&&) = default; + TSparseArray(const TSparseArray&) = default; + + public: + TSparseArray& operator=(TSparseArray&&) = default; + TSparseArray& operator=(const TSparseArray&) = default; + + private: + inline void VerifyIndex(int32 Index) const { if (!IsValidIndex(Index)) throw std::out_of_range("Index was out of range!"); } + + public: + inline int32 NumAllocated() const { return Data.Num(); } + + inline int32 Num() const { return NumAllocated() - NumFreeIndices; } + inline int32 Max() const { return Data.Max(); } + + inline bool IsValidIndex(int32 Index) const { return Data.IsValidIndex(Index) && AllocationFlags[Index]; } + + inline bool IsValid() const { return Data.IsValid() && AllocationFlags.IsValid(); } + + public: + const ContainerImpl::FBitArray& GetAllocationFlags() const { return AllocationFlags; } + + public: + inline SparseArrayElementType& operator[](int32 Index) { VerifyIndex(Index); return *reinterpret_cast(&Data.GetUnsafe(Index).ElementData); } + inline const SparseArrayElementType& operator[](int32 Index) const { VerifyIndex(Index); return *reinterpret_cast(&Data.GetUnsafe(Index).ElementData); } + + inline bool operator==(const TSparseArray& Other) const { return Data == Other.Data; } + inline bool operator!=(const TSparseArray& Other) const { return Data != Other.Data; } + + public: + template friend Iterators::TSparseArrayIterator begin(const TSparseArray& Array); + template friend Iterators::TSparseArrayIterator end (const TSparseArray& Array); + }; + + template + class TSet + { + private: + static constexpr uint32 ElementAlign = alignof(SetElementType); + static constexpr uint32 ElementSize = sizeof(SetElementType); + + private: + using SetDataType = ContainerImpl::SetElement; + using HashType = ContainerImpl::TInlineAllocator<1>::ForElementType; + + private: + TSparseArray Elements; + HashType Hash; + int32 HashSize; + + public: + TSet() + : HashSize(0) + { + } + + TSet(TSet&&) = default; + TSet(const TSet&) = default; + + public: + TSet& operator=(TSet&&) = default; + TSet& operator=(const TSet&) = default; + + private: + inline void VerifyIndex(int32 Index) const { if (!IsValidIndex(Index)) throw std::out_of_range("Index was out of range!"); } + + public: + inline int32 NumAllocated() const { return Elements.NumAllocated(); } + + inline int32 Num() const { return Elements.Num(); } + inline int32 Max() const { return Elements.Max(); } + + inline bool IsValidIndex(int32 Index) const { return Elements.IsValidIndex(Index); } + + inline bool IsValid() const { return Elements.IsValid(); } + + public: + const ContainerImpl::FBitArray& GetAllocationFlags() const { return Elements.GetAllocationFlags(); } + + public: + inline SetElementType& operator[] (int32 Index) { return Elements[Index].Value; } + inline const SetElementType& operator[] (int32 Index) const { return Elements[Index].Value; } + + inline bool operator==(const TSet& Other) const { return Elements == Other.Elements; } + inline bool operator!=(const TSet& Other) const { return Elements != Other.Elements; } + + public: + template friend Iterators::TSetIterator begin(const TSet& Set); + template friend Iterators::TSetIterator end (const TSet& Set); + }; + + template + class TMap + { + public: + using ElementType = TPair; + + private: + TSet Elements; + + private: + inline void VerifyIndex(int32 Index) const { if (!IsValidIndex(Index)) throw std::out_of_range("Index was out of range!"); } + + public: + inline int32 NumAllocated() const { return Elements.NumAllocated(); } + + inline int32 Num() const { return Elements.Num(); } + inline int32 Max() const { return Elements.Max(); } + + inline bool IsValidIndex(int32 Index) const { return Elements.IsValidIndex(Index); } + + inline bool IsValid() const { return Elements.IsValid(); } + + public: + const ContainerImpl::FBitArray& GetAllocationFlags() const { return Elements.GetAllocationFlags(); } + + public: + inline decltype(auto) Find(const KeyElementType& Key, bool(*Equals)(const KeyElementType& LeftKey, const KeyElementType& RightKey)) + { + for (auto It = begin(*this); It != end(*this); ++It) + { + if (Equals(It->Key(), Key)) + return It; + } + + return end(*this); + } + + public: + inline ElementType& operator[] (int32 Index) { return Elements[Index]; } + inline const ElementType& operator[] (int32 Index) const { return Elements[Index]; } + + inline bool operator==(const TMap& Other) const { return Elements == Other.Elements; } + inline bool operator!=(const TMap& Other) const { return Elements != Other.Elements; } + + public: + template friend Iterators::TMapIterator begin(const TMap& Map); + template friend Iterators::TMapIterator end (const TMap& Map); + }; + + namespace Iterators + { + class FRelativeBitReference + { + protected: + static constexpr int32 NumBitsPerDWORD = 32; + static constexpr int32 NumBitsPerDWORDLogTwo = 5; + + public: + inline explicit FRelativeBitReference(int32 BitIndex) + : WordIndex(BitIndex >> NumBitsPerDWORDLogTwo) + , Mask(1 << (BitIndex & (NumBitsPerDWORD - 1))) + { + } + + int32 WordIndex; + uint32 Mask; + }; + + class FSetBitIterator : public FRelativeBitReference + { + private: + const ContainerImpl::FBitArray& Array; + + uint32 UnvisitedBitMask; + int32 CurrentBitIndex; + int32 BaseBitIndex; + + public: + explicit FSetBitIterator(const ContainerImpl::FBitArray& InArray, int32 StartIndex = 0) + : FRelativeBitReference(StartIndex) + , Array(InArray) + , UnvisitedBitMask((~0U) << (StartIndex & (NumBitsPerDWORD - 1))) + , CurrentBitIndex(StartIndex) + , BaseBitIndex(StartIndex & ~(NumBitsPerDWORD - 1)) + { + if (StartIndex != Array.Num()) + FindFirstSetBit(); + } + + public: + inline FSetBitIterator& operator++() + { + UnvisitedBitMask &= ~this->Mask; + + FindFirstSetBit(); + + return *this; + } + + inline explicit operator bool() const { return CurrentBitIndex < Array.Num(); } + + inline bool operator==(const FSetBitIterator& Rhs) const { return CurrentBitIndex == Rhs.CurrentBitIndex && &Array == &Rhs.Array; } + inline bool operator!=(const FSetBitIterator& Rhs) const { return CurrentBitIndex != Rhs.CurrentBitIndex || &Array != &Rhs.Array; } + + public: + inline int32 GetIndex() { return CurrentBitIndex; } + + void FindFirstSetBit() + { + const uint32* ArrayData = Array.GetData(); + const int32 ArrayNum = Array.Num(); + const int32 LastWordIndex = (ArrayNum - 1) / NumBitsPerDWORD; + + uint32 RemainingBitMask = ArrayData[this->WordIndex] & UnvisitedBitMask; + while (!RemainingBitMask) + { + ++this->WordIndex; + BaseBitIndex += NumBitsPerDWORD; + if (this->WordIndex > LastWordIndex) + { + CurrentBitIndex = ArrayNum; + return; + } + + RemainingBitMask = ArrayData[this->WordIndex]; + UnvisitedBitMask = ~0; + } + + const uint32 NewRemainingBitMask = RemainingBitMask & (RemainingBitMask - 1); + + this->Mask = NewRemainingBitMask ^ RemainingBitMask; + + CurrentBitIndex = BaseBitIndex + NumBitsPerDWORD - 1 - ContainerImpl::HelperFunctions::CountLeadingZeros(this->Mask); + + if (CurrentBitIndex > ArrayNum) + CurrentBitIndex = ArrayNum; + } + }; + + template + class TArrayIterator + { + private: + TArray& IteratedArray; + int32 Index; + + public: + TArrayIterator(const TArray& Array, int32 StartIndex = 0x0) + : IteratedArray(const_cast&>(Array)), Index(StartIndex) + { + } + + public: + inline int32 GetIndex() { return Index; } + + inline int32 IsValid() { return IteratedArray.IsValidIndex(GetIndex()); } + + public: + inline TArrayIterator& operator++() { ++Index; return *this; } + inline TArrayIterator& operator--() { --Index; return *this; } + + inline ArrayType& operator*() { return IteratedArray[GetIndex()]; } + inline const ArrayType& operator*() const { return IteratedArray[GetIndex()]; } + + inline ArrayType* operator->() { return &IteratedArray[GetIndex()]; } + inline const ArrayType* operator->() const { return &IteratedArray[GetIndex()]; } + + inline bool operator==(const TArrayIterator& Other) const { return &IteratedArray == &Other.IteratedArray && Index == Other.Index; } + inline bool operator!=(const TArrayIterator& Other) const { return &IteratedArray != &Other.IteratedArray || Index != Other.Index; } + }; + + template + class TContainerIterator + { + private: + ContainerType& IteratedContainer; + FSetBitIterator BitIterator; + + public: + TContainerIterator(const ContainerType& Container, const ContainerImpl::FBitArray& BitArray, int32 StartIndex = 0x0) + : IteratedContainer(const_cast(Container)), BitIterator(BitArray, StartIndex) + { + } + + public: + inline int32 GetIndex() { return BitIterator.GetIndex(); } + + inline int32 IsValid() { return IteratedContainer.IsValidIndex(GetIndex()); } + + public: + inline TContainerIterator& operator++() { ++BitIterator; return *this; } + inline TContainerIterator& operator--() { --BitIterator; return *this; } + + inline auto& operator*() { return IteratedContainer[GetIndex()]; } + inline const auto& operator*() const { return IteratedContainer[GetIndex()]; } + + inline auto* operator->() { return &IteratedContainer[GetIndex()]; } + inline const auto* operator->() const { return &IteratedContainer[GetIndex()]; } + + inline bool operator==(const TContainerIterator& Other) const { return &IteratedContainer == &Other.IteratedContainer && BitIterator == Other.BitIterator; } + inline bool operator!=(const TContainerIterator& Other) const { return &IteratedContainer != &Other.IteratedContainer || BitIterator != Other.BitIterator; } + }; + } + + inline Iterators::FSetBitIterator begin(const ContainerImpl::FBitArray& Array) { return Iterators::FSetBitIterator(Array, 0); } + inline Iterators::FSetBitIterator end (const ContainerImpl::FBitArray& Array) { return Iterators::FSetBitIterator(Array, Array.Num()); } + + template inline Iterators::TArrayIterator begin(const TArray& Array) { return Iterators::TArrayIterator(Array, 0); } + template inline Iterators::TArrayIterator end (const TArray& Array) { return Iterators::TArrayIterator(Array, Array.Num()); } + + template inline Iterators::TSparseArrayIterator begin(const TSparseArray& Array) { return Iterators::TSparseArrayIterator(Array, Array.GetAllocationFlags(), 0); } + template inline Iterators::TSparseArrayIterator end (const TSparseArray& Array) { return Iterators::TSparseArrayIterator(Array, Array.GetAllocationFlags(), Array.NumAllocated()); } + + template inline Iterators::TSetIterator begin(const TSet& Set) { return Iterators::TSetIterator(Set, Set.GetAllocationFlags(), 0); } + template inline Iterators::TSetIterator end (const TSet& Set) { return Iterators::TSetIterator(Set, Set.GetAllocationFlags(), Set.NumAllocated()); } + + template inline Iterators::TMapIterator begin(const TMap& Map) { return Iterators::TMapIterator(Map, Map.GetAllocationFlags(), 0); } + template inline Iterators::TMapIterator end (const TMap& Map) { return Iterators::TMapIterator(Map, Map.GetAllocationFlags(), Map.NumAllocated()); } + +#if defined(_WIN64) + static_assert(sizeof(TArray) == 0x10, "TArray has a wrong size!"); + static_assert(sizeof(TSet) == 0x50, "TSet has a wrong size!"); + static_assert(sizeof(TMap) == 0x50, "TMap has a wrong size!"); +#elif defined(_WIN32) + static_assert(sizeof(TArray) == 0x0C, "TArray has a wrong size!"); + static_assert(sizeof(TSet) == 0x3C, "TSet has a wrong size!"); + static_assert(sizeof(TMap) == 0x3C, "TMap has a wrong size!"); +#endif +} diff --git a/FearTheTimeloop/UtfN.hpp b/FearTheTimeloop/UtfN.hpp new file mode 100644 index 0000000..0feb7d7 --- /dev/null +++ b/FearTheTimeloop/UtfN.hpp @@ -0,0 +1,1613 @@ +#pragma once + +/* +* SDK generated by Dumper-7 +* +* https://github.com/Encryqed/Dumper-7 +*/ + +// A simple C++ lib for converting between Utf8, Utf16 and Utf32. See https://github.com/Fischsalat/UTF-N + + +// Lower warning-level and turn off certain warnings for STL compilation +#if (defined(_MSC_VER)) +#pragma warning (push, 2) // Push warnings and set warn-level to 2 +#pragma warning(disable : 4365) // signed/unsigned mismatch +#pragma warning(disable : 4710) // 'FunctionName' was not inlined +#pragma warning(disable : 4711) // 'FunctionName' selected for automatic inline expansion +#elif (defined(__CLANG__) || defined(__GNUC__)) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-compare" +#endif + +#include +#include +#include +#include + +#ifdef _DEBUG +#include +#endif // _DEBUG + + +// Restore warnings-levels after STL includes +#if (defined(_MSC_VER)) +#pragma warning (pop) +#elif (defined(__CLANG__) || defined(__GNUC__)) +#pragma GCC diagnostic pop +#endif // Warnings + + + +#if (defined(_MSC_VER)) +#pragma warning (push) +#pragma warning (disable: 4514) // C4514 "unreferenced inline function has been removed" +#pragma warning (disable: 4820) // C4820 "'n' bytes padding added after data member '...'" +#pragma warning(disable : 4127) // C4127 conditional expression is constant +#pragma warning(disable : 5045) // C5045 Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified +#pragma warning(disable : 5246) // C5246 'ArrayVariable' the initialization of a subobject should be wrapped in braces +#elif (defined(__CLANG__) || defined(__GNUC__)) +#endif // Warnings + +#ifdef __cpp_constexpr +#define UTF_CONSTEXPR constexpr +#else +#define UTF_CONSTEXPR +#endif // __cpp_constexpr + + +#ifdef __cpp_if_constexpr +#define UTF_IF_CONSTEXPR constexpr +#else +#define UTF_IF_CONSTEXPR +#endif // __cpp_if_constexpr + + +#if (defined(__cpp_constexpr) && __cpp_constexpr >= 201304L) +#define UTF_CONSTEXPR14 constexpr +#else +#define UTF_CONSTEXPR14 +#endif + +#if (defined(__cpp_constexpr) && __cpp_constexpr >= 201603L) +#define UTF_CONSTEXPR17 constexpr +#else +#define UTF_CONSTEXPR17 inline +#endif + +#if (defined(__cpp_constexpr) && __cpp_constexpr >= 201907L) +#define UTF_CONSTEXPR20 constexpr +#else +#define UTF_CONSTEXPR20 inline +#endif + +#if (defined(__cpp_constexpr) && __cpp_constexpr >= 202211L) +#define UTF_CONSTEXPR23 constexpr +#else +#define UTF_CONSTEXPR23 inline +#endif + +#if (defined(__cpp_constexpr) && __cpp_constexpr >= 202406L) +#define UTF_CONSTEXPR26 constexpr +#else +#define UTF_CONSTEXPR26 inline +#endif + + +#ifdef __cpp_nodiscard +#define UTF_NODISCARD [[nodiscard]] +#else +#define UTF_NODISCARD +#endif + + +namespace UtfN +{ +#if defined(__cpp_char8_t) + typedef char8_t utf_cp8_t; + typedef char16_t utf_cp16_t; + typedef char32_t utf_cp32_t; +#elif defined(__cpp_unicode_characters) + typedef unsigned char utf_cp8_t; + typedef char16_t utf_cp16_t; + typedef char32_t utf_cp32_t; +#else + typedef unsigned char utf_cp8_t; + typedef uint16_t utf_cp16_t; + typedef uint32_t utf_cp32_t; +#endif + + namespace UtfImpl + { + namespace Utils + { + template + UTF_CONSTEXPR UTF_NODISCARD + bool IsFlagSet(value_type Value, flag_type Flag) noexcept + { + return (Value & Flag) == Flag; + } + + template + UTF_CONSTEXPR UTF_NODISCARD + value_type GetWithClearedFlag(value_type Value, flag_type Flag) noexcept + { + return static_cast(Value & static_cast(~Flag)); + } + + // Does not add/remove cv-qualifiers + template + UTF_CONSTEXPR UTF_NODISCARD + auto ForceCastIfMissmatch(current_type&& Arg) -> std::enable_if_t, std::decay_t>::value, current_type> + { + return static_cast(Arg); + } + + // Does not add/remove cv-qualifiers + template + UTF_CONSTEXPR UTF_NODISCARD + auto ForceCastIfMissmatch(current_type&& Arg) -> std::enable_if_t, std::decay_t>::value, target_type> + { + return reinterpret_cast(Arg); + } + } + + // wchar_t is a utf16 codepoint on windows, utf32 on linux + UTF_CONSTEXPR bool IsWCharUtf32 = sizeof(wchar_t) == 0x4; + + // Any value greater than this is not a valid Unicode symbol + UTF_CONSTEXPR utf_cp32_t MaxValidUnicodeChar = 0x10FFFF; + + namespace Utf8 + { + /* + * Available bits, and max values, for n-byte utf8 characters + * + * 01111111 -> 1 byte -> 7 bits + * 11011111 -> 2 bytes -> 5 + 6 bits -> 11 bits + * 11101111 -> 3 bytes -> 4 + 6 + 6 bits -> 16 bits + * 11110111 -> 4 bytes -> 3 + 6 + 6 + 6 bits -> 21 bits + * + * 10111111 -> follow up byte + */ + UTF_CONSTEXPR utf_cp32_t Max1ByteValue = (1 << 7) - 1; // 7 bits available + UTF_CONSTEXPR utf_cp32_t Max2ByteValue = (1 << 11) - 1; // 11 bits available + UTF_CONSTEXPR utf_cp32_t Max3ByteValue = (1 << 16) - 1; // 16 bits available + UTF_CONSTEXPR utf_cp32_t Max4ByteValue = 0x10FFFF; // 21 bits available, but not fully used + + // Flags for follow-up bytes of multibyte utf8 character + UTF_CONSTEXPR utf_cp8_t FollowupByteMask = 0b1000'0000; + UTF_CONSTEXPR utf_cp8_t FollowupByteDataMask = 0b0011'1111; + UTF_CONSTEXPR utf_cp8_t NumDataBitsInFollowupByte = 0x6; + + // Flags for start-bytes of multibyte utf8 characters + UTF_CONSTEXPR utf_cp8_t TwoByteFlag = 0b1100'0000; + UTF_CONSTEXPR utf_cp8_t ThreeByteFlag = 0b1110'0000; + UTF_CONSTEXPR utf_cp8_t FourByteFlag = 0b1111'0000; + + UTF_CONSTEXPR UTF_NODISCARD + bool IsValidFollowupCodepoint(const utf_cp8_t Codepoint) noexcept + { + // Test the upper 2 bytes for the FollowupByteMask + return (Codepoint & 0b1100'0000) == FollowupByteMask; + } + + template + UTF_CONSTEXPR UTF_NODISCARD + bool IsValidUtf8Sequence(const utf_cp8_t FirstCp, const utf_cp8_t SecondCp, const utf_cp8_t ThirdCp, const utf_cp8_t FourthCp) noexcept + { + switch (ByteSize) + { + case 1: + { + return SecondCp == 0 && ThirdCp == 0 && FourthCp == 0; + } + case 4: + { + const bool bIsOverlongEncoding = Utils::GetWithClearedFlag(FirstCp, ~Utf8::TwoByteFlag) != 0 && SecondCp == Utf8::FollowupByteMask; + return !bIsOverlongEncoding && IsValidFollowupCodepoint(SecondCp) && IsValidFollowupCodepoint(ThirdCp) && IsValidFollowupCodepoint(FourthCp); + } + case 3: + { + const bool bIsOverlongEncoding = Utils::GetWithClearedFlag(FirstCp, ~Utf8::ThreeByteFlag) != 0 && SecondCp == Utf8::FollowupByteMask; + return !bIsOverlongEncoding && IsValidFollowupCodepoint(SecondCp) && IsValidFollowupCodepoint(ThirdCp) && FourthCp == 0; + } + case 2: + { + const bool bIsOverlongEncoding = Utils::GetWithClearedFlag(FirstCp, ~Utf8::FourByteFlag) != 0 && SecondCp == Utf8::FollowupByteMask; + return !bIsOverlongEncoding && IsValidFollowupCodepoint(SecondCp) && ThirdCp == 0 && FourthCp == 0; + } + default: + { + return false; + break; + } + } + } + } + + namespace Utf16 + { + // Surrogate masks and offset for multibyte utf16 characters + UTF_CONSTEXPR utf_cp16_t HighSurrogateRangeStart = 0xD800; + UTF_CONSTEXPR utf_cp16_t LowerSurrogateRangeStart = 0xDC00; + + UTF_CONSTEXPR utf_cp32_t SurrogatePairOffset = 0x10000; + + // Unicode range for 2byte utf16 values + UTF_CONSTEXPR utf_cp32_t SurrogateRangeLowerBounds = 0xD800; + UTF_CONSTEXPR utf_cp32_t SurrogateRangeUpperBounds = 0xDFFF; + + + UTF_CONSTEXPR UTF_NODISCARD + bool IsHighSurrogate(const utf_cp16_t Codepoint) noexcept + { + // Range [0xD800 - 0xDC00[ + return Codepoint >= HighSurrogateRangeStart && Codepoint < LowerSurrogateRangeStart; + } + UTF_CONSTEXPR UTF_NODISCARD + bool IsLowSurrogate(const utf_cp16_t Codepoint) noexcept + { + // Range [0xDC00 - 0xDFFF] + return Codepoint >= LowerSurrogateRangeStart && Codepoint <= SurrogateRangeUpperBounds; + } + + // Tests if a utf16 value is a valid Unicode character + UTF_CONSTEXPR UTF_NODISCARD + bool IsValidUnicodeChar(const utf_cp16_t LowerCodepoint, const utf_cp16_t UpperCodepoint) noexcept + { + const bool IsValidHighSurrogate = IsHighSurrogate(UpperCodepoint); + const bool IsValidLowSurrogate = IsLowSurrogate(LowerCodepoint); + + // Both needt to be valid + if (IsValidHighSurrogate) + return IsValidLowSurrogate; + + // Neither are valid && the codepoints are not in the wrong surrogate ranges + return !IsValidLowSurrogate && !IsHighSurrogate(LowerCodepoint) && !IsLowSurrogate(UpperCodepoint); + } + } + + namespace Utf32 + { + // Tests if a utf32 value is a valid Unicode character + UTF_CONSTEXPR UTF_NODISCARD + bool IsValidUnicodeChar(const utf_cp32_t Codepoint) noexcept + { + // Codepoints must be within the valid unicode range and must not be within the range of Surrogate-values + return Codepoint < MaxValidUnicodeChar && (Codepoint < Utf16::SurrogateRangeLowerBounds || Codepoint > Utf16::SurrogateRangeUpperBounds); + } + } + + namespace Iterator + { + template + class utf_char_iterator_base_child_acessor + { + private: + template + friend class utf_char_iterator_base; + + private: + static UTF_CONSTEXPR + void ReadChar(child_type* This) + { + return This->ReadChar(); + } + }; + + template + class utf_char_iterator_base + { + public: + UTF_CONSTEXPR utf_char_iterator_base(codepoint_iterator_type Begin, codepoint_iterator_type End) + : CurrentIterator(Begin), NextCharStartIterator(Begin), EndIterator(End) + { + utf_char_iterator_base_child_acessor::ReadChar(static_cast(this)); + } + + template())), // Has begin + typename = decltype(std::end(std::declval())), // Has end + typename iterator_deref_type = decltype(*std::end(std::declval())), // Iterator can be dereferenced + typename = std::enable_if::type) == utf_char_type::GetCodepointSize()>::type // Return-value of derferenced iterator has the same size as one codepoint + > + explicit UTF_CONSTEXPR utf_char_iterator_base(container_type& Container) + : CurrentIterator(std::begin(Container)), NextCharStartIterator(std::begin(Container)), EndIterator(std::end(Container)) + { + utf_char_iterator_base_child_acessor::ReadChar(static_cast(this)); + } + + public: + UTF_CONSTEXPR inline + child_iterator_type& operator++() + { + // Skip ahead to the next char + CurrentIterator = NextCharStartIterator; + + // Populate the current char and advance the NextCharStartIterator + utf_char_iterator_base_child_acessor::ReadChar(static_cast(this)); + + + return *static_cast(this); + } + + public: + UTF_CONSTEXPR inline + utf_char_type operator*() const + { + return CurrentChar; + } + + UTF_CONSTEXPR inline bool operator==(const child_iterator_type& Other) const + { + return CurrentIterator == Other.CurrentIterator; + } + UTF_CONSTEXPR inline + bool operator!=(const child_iterator_type& Other) const + { + return CurrentIterator != Other.CurrentIterator; + } + + UTF_CONSTEXPR inline + explicit operator bool() const + { + return this->CurrentIterator != this->EndIterator; + } + + public: + UTF_CONSTEXPR inline + child_iterator_type begin() + { + return *static_cast(this); + } + + UTF_CONSTEXPR inline + child_iterator_type end() + { + return child_iterator_type(EndIterator, EndIterator); + } + + protected: + codepoint_iterator_type CurrentIterator; // Current byte pos + codepoint_iterator_type NextCharStartIterator; // Byte pos of the next character + codepoint_iterator_type EndIterator; // End Iterator + + utf_char_type CurrentChar; // Current character bytes + }; + } + } + + struct utf8_bytes + { + utf_cp8_t Codepoints[4] = { 0 }; + }; + + struct utf16_pair + { + utf_cp16_t Lower = 0; + utf_cp16_t Upper = 0; + }; + + UTF_CONSTEXPR inline + bool operator==(const utf8_bytes Left, const utf8_bytes Right) noexcept + { + return Left.Codepoints[0] == Right.Codepoints[0] + && Left.Codepoints[1] == Right.Codepoints[1] + && Left.Codepoints[2] == Right.Codepoints[2] + && Left.Codepoints[3] == Right.Codepoints[3]; + } + UTF_CONSTEXPR inline + bool operator!=(const utf8_bytes Left, const utf8_bytes Right) noexcept + { + return !(Left == Right); + } + + UTF_CONSTEXPR inline + bool operator==(const utf16_pair Left, const utf16_pair Right) noexcept + { + return Left.Upper == Right.Upper && Left.Lower == Right.Lower; + } + UTF_CONSTEXPR inline + bool operator!=(const utf16_pair Left, const utf16_pair Right) noexcept + { + return !(Left == Right); + } + + + enum class UtfEncodingType + { + Invalid, + Utf8, + Utf16, + Utf32 + }; + + template + struct utf_char; + + typedef utf_char utf_char8; + typedef utf_char utf_char16; + typedef utf_char utf_char32; + + template<> + struct utf_char + { + utf8_bytes Char = { 0 }; + + public: + UTF_CONSTEXPR utf_char() = default; + UTF_CONSTEXPR utf_char(utf_char&&) = default; + UTF_CONSTEXPR utf_char(const utf_char&) = default; + + UTF_CONSTEXPR utf_char(utf8_bytes InChar) noexcept; + + template()))> + UTF_CONSTEXPR utf_char(const char_type* SingleCharString) noexcept; + + public: + UTF_CONSTEXPR utf_char& operator=(utf_char&&) = default; + UTF_CONSTEXPR utf_char& operator=(const utf_char&) = default; + + UTF_CONSTEXPR utf_char& operator=(utf8_bytes inBytse) noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD utf_cp8_t& operator[](const uint8_t Index); + UTF_CONSTEXPR UTF_NODISCARD const utf_cp8_t& operator[](const uint8_t Index) const; + + UTF_CONSTEXPR UTF_NODISCARD bool operator==(utf_char8 Other) const noexcept; + UTF_CONSTEXPR UTF_NODISCARD bool operator!=(utf_char8 Other) const noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD utf_char8 GetAsUtf8() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char16 GetAsUtf16() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char32 GetAsUtf32() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD utf8_bytes Get() const; + + UTF_CONSTEXPR UTF_NODISCARD UtfEncodingType GetEncoding() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD uint8_t GetNumCodepoints() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD static uint8_t GetCodepointSize() noexcept; + }; + + template<> + struct utf_char + { + utf16_pair Char = { 0 }; + + public: + UTF_CONSTEXPR utf_char() = default; + UTF_CONSTEXPR utf_char(utf_char&&) = default; + UTF_CONSTEXPR utf_char(const utf_char&) = default; + + UTF_CONSTEXPR utf_char(utf16_pair InChar) noexcept; + + template()))> + UTF_CONSTEXPR utf_char(const char_type* SingleCharString) noexcept; + + public: + UTF_CONSTEXPR utf_char& operator=(utf_char&&) = default; + UTF_CONSTEXPR utf_char& operator=(const utf_char&) = default; + + UTF_CONSTEXPR utf_char& operator=(utf16_pair inBytse) noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD bool operator==(utf_char16 Other) const noexcept; + UTF_CONSTEXPR UTF_NODISCARD bool operator!=(utf_char16 Other) const noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD utf_char8 GetAsUtf8() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char16 GetAsUtf16() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char32 GetAsUtf32() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD utf16_pair Get() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD UtfEncodingType GetEncoding() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD uint8_t GetNumCodepoints() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD static uint8_t GetCodepointSize() noexcept; + }; + + template<> + struct utf_char + { + utf_cp32_t Char = { 0 }; + + public: + UTF_CONSTEXPR utf_char() = default; + UTF_CONSTEXPR utf_char(utf_char&&) = default; + UTF_CONSTEXPR utf_char(const utf_char&) = default; + + UTF_CONSTEXPR utf_char(utf_cp32_t InChar) noexcept; + + template()))> + UTF_CONSTEXPR utf_char(const char_type* SingleCharString) noexcept; + + public: + UTF_CONSTEXPR utf_char& operator=(utf_char&&) = default; + UTF_CONSTEXPR utf_char& operator=(const utf_char&) = default; + + UTF_CONSTEXPR utf_char& operator=(utf_cp32_t inBytse) noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD bool operator==(utf_char32 Other) const noexcept; + UTF_CONSTEXPR UTF_NODISCARD bool operator!=(utf_char32 Other) const noexcept; + + public: + UTF_CONSTEXPR UTF_NODISCARD utf_char8 GetAsUtf8() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char16 GetAsUtf16() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD utf_char32 GetAsUtf32() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD utf_cp32_t Get() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD UtfEncodingType GetEncoding() const noexcept; + UTF_CONSTEXPR UTF_NODISCARD uint8_t GetNumCodepoints() const noexcept; + + UTF_CONSTEXPR UTF_NODISCARD static uint8_t GetCodepointSize() noexcept; + }; + + UTF_CONSTEXPR UTF_NODISCARD + uint8_t GetUtf8CharLenght(const utf_cp8_t C) noexcept + { + using namespace UtfImpl; + + /* No flag for any other byte-count is set */ + if ((C & 0b1000'0000) == 0) + { + return 0x1; + } + else if (Utils::IsFlagSet(C, Utf8::FourByteFlag)) + { + return 0x4; + } + else if (Utils::IsFlagSet(C, Utf8::ThreeByteFlag)) + { + return 0x3; + } + else if (Utils::IsFlagSet(C, Utf8::TwoByteFlag)) + { + return 0x2; + } + else + { + /* Invalid! This is a follow up codepoint but conversion needs to start at the start-codepoint. */ + return 0x0; + } + } + + UTF_CONSTEXPR UTF_NODISCARD + uint8_t GetUtf16CharLenght(const utf_cp16_t UpperCodepoint) noexcept + { + if (UtfImpl::Utf16::IsHighSurrogate(UpperCodepoint)) + return 0x2; + + return 0x1; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 Utf32ToUtf16Pair(const utf_char32 Character) noexcept + { + using namespace UtfImpl; + + if (!Utf32::IsValidUnicodeChar(Character.Char)) + return utf16_pair{}; + + utf16_pair RetCharPair; + + if (Character.Char > USHRT_MAX) + { + const utf_cp32_t PreparedCodepoint = Character.Char - Utf16::SurrogatePairOffset; + + RetCharPair.Upper = (PreparedCodepoint >> 10) & 0b1111111111; + RetCharPair.Lower = PreparedCodepoint & 0b1111111111; + + // Surrogate-pair starting ranges for higher/lower surrogates + RetCharPair.Upper += Utf16::HighSurrogateRangeStart; + RetCharPair.Lower += Utf16::LowerSurrogateRangeStart; + + return RetCharPair; + } + + RetCharPair.Lower = static_cast(Character.Char); + + return RetCharPair; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char32 Utf16PairToUtf32(const utf_char16 Character) noexcept + { + using namespace UtfImpl; + + // The surrogate-values are not valid Unicode codepoints + if (!Utf16::IsValidUnicodeChar(Character.Char.Lower, Character.Char.Upper)) + return utf_cp32_t{ 0 }; + + if (Character.Char.Upper) + { + // Move the characters back from the surrogate range to the normal range + const utf_cp16_t UpperCodepointWithoutSurrogate = static_cast(Character.Char.Upper - Utf16::HighSurrogateRangeStart); + const utf_cp16_t LowerCodepointWithoutSurrogate = static_cast(Character.Char.Lower - Utf16::LowerSurrogateRangeStart); + + return ((static_cast(UpperCodepointWithoutSurrogate) << 10) | LowerCodepointWithoutSurrogate) + Utf16::SurrogatePairOffset; + } + + return Character.Char.Lower; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 Utf32ToUtf8Bytes(const utf_char32 Character) noexcept + { + using namespace UtfImpl; + using namespace UtfImpl::Utf8; + + if (!Utf32::IsValidUnicodeChar(Character.Char)) + return utf_char8{}; + + utf8_bytes RetBytes; + + if (Character.Char <= Max1ByteValue) + { + RetBytes.Codepoints[0] = static_cast(Character.Char); + } + else if (Character.Char <= Max2ByteValue) + { + /* Upper 3 bits of first byte are reserved for byte-lengh. */ + RetBytes.Codepoints[0] = TwoByteFlag; + RetBytes.Codepoints[0] |= Character.Char >> NumDataBitsInFollowupByte; // Lower bits stored in 2nd byte + + RetBytes.Codepoints[1] |= FollowupByteMask; + RetBytes.Codepoints[1] |= Character.Char & FollowupByteDataMask; + } + else if (Character.Char <= Max3ByteValue) + { + /* Upper 4 bits of first byte are reserved for byte-lengh. */ + RetBytes.Codepoints[0] = ThreeByteFlag; + RetBytes.Codepoints[0] |= Character.Char >> (NumDataBitsInFollowupByte * 2); // Lower bits stored in 2nd and 3rd bytes + + RetBytes.Codepoints[1] = FollowupByteMask; + RetBytes.Codepoints[1] |= (Character.Char >> NumDataBitsInFollowupByte) & FollowupByteDataMask; // Lower bits stored in 2nd byte + + RetBytes.Codepoints[2] = FollowupByteMask; + RetBytes.Codepoints[2] |= Character.Char & FollowupByteDataMask; + } + else if (Character.Char <= Max4ByteValue) + { + /* Upper 5 bits of first byte are reserved for byte-lengh. */ + RetBytes.Codepoints[0] = FourByteFlag; + RetBytes.Codepoints[0] |= Character.Char >> (NumDataBitsInFollowupByte * 3); // Lower bits stored in 2nd, 3rd and 4th bytes + + RetBytes.Codepoints[1] = FollowupByteMask; + RetBytes.Codepoints[1] |= (Character.Char >> (NumDataBitsInFollowupByte * 2)) & FollowupByteDataMask; // Lower bits stored in 3rd and 4th bytes + + RetBytes.Codepoints[2] = FollowupByteMask; + RetBytes.Codepoints[2] |= (Character.Char >> NumDataBitsInFollowupByte) & FollowupByteDataMask; // Lower bits stored in 4th byte + + RetBytes.Codepoints[3] = FollowupByteMask; + RetBytes.Codepoints[3] |= Character.Char & FollowupByteDataMask; + } + else + { + /* Above max allowed value. Invalid codepoint. */ + return RetBytes; + } + + return RetBytes; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_cp32_t Utf8BytesToUtf32(const utf_char8 Character) noexcept + { + using namespace UtfImpl; + using namespace UtfImpl::Utf8; + + /* No flag for any other byte-count is set */ + if ((Character[0] & 0b1000'0000) == 0) + { + if (!Utf8::IsValidUtf8Sequence<1>(Character[0], Character[1], Character[2], Character[3])) // Verifies encoding + return utf_cp32_t{ 0 }; + + return Character[0]; + } + else if (Utils::IsFlagSet(Character[0], FourByteFlag)) + { + utf_cp32_t RetChar = Utils::GetWithClearedFlag(Character[3], FollowupByteMask); + RetChar |= Utils::GetWithClearedFlag(Character[2], FollowupByteMask) << (NumDataBitsInFollowupByte * 1); // Clear the FollowupByteMask and move the bits to the right position + RetChar |= Utils::GetWithClearedFlag(Character[1], FollowupByteMask) << (NumDataBitsInFollowupByte * 2); // Clear the FollowupByteMask and move the bits to the right position + RetChar |= Utils::GetWithClearedFlag(Character[0], FourByteFlag) << (NumDataBitsInFollowupByte * 3); // Clear the FourByteFlag and move the bits to the right position + + if (!Utf8::IsValidUtf8Sequence<4>(Character[0], Character[1], Character[2], Character[3]) // Verifies encoding + || !Utf32::IsValidUnicodeChar(RetChar)) // Verifies ranges + return utf_cp32_t{ 0 }; + + return RetChar; + } + else if (Utils::IsFlagSet(Character[0], ThreeByteFlag)) + { + utf_cp32_t RetChar = Utils::GetWithClearedFlag(Character[2], FollowupByteMask); + RetChar |= Utils::GetWithClearedFlag(Character[1], FollowupByteMask) << (NumDataBitsInFollowupByte * 1); // Clear the FollowupByteMask and move the bits to the right position + RetChar |= Utils::GetWithClearedFlag(Character[0], ThreeByteFlag) << (NumDataBitsInFollowupByte * 2); // Clear the ThreeByteFlag and move the bits to the right position + + if (!Utf8::IsValidUtf8Sequence<3>(Character[0], Character[1], Character[2], Character[3]) // Verifies encoding + || !Utf32::IsValidUnicodeChar(RetChar)) // Verifies ranges + return utf_cp32_t{ 0 }; + + return RetChar; + } + else if (Utils::IsFlagSet(Character[0], TwoByteFlag)) + { + utf_cp32_t RetChar = Utils::GetWithClearedFlag(Character[1], FollowupByteMask); // Clear the FollowupByteMask and move the bits to the right position + RetChar |= Utils::GetWithClearedFlag(Character[0], TwoByteFlag) << NumDataBitsInFollowupByte; // Clear the TwoByteFlag and move the bits to the right position + + if (!Utf8::IsValidUtf8Sequence<2>(Character[0], Character[1], Character[2], Character[3]) // Verifies encoding + || !Utf32::IsValidUnicodeChar(RetChar)) // Verifies ranges + return utf_cp32_t{ 0 }; + + return RetChar; + } + else + { + /* Invalid! This is a follow up codepoint but conversion needs to start at the start-codepoint. */ + return 0; + } + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 Utf16PairToUtf8Bytes(const utf_char16 Character) noexcept + { + return Utf32ToUtf8Bytes(Utf16PairToUtf32(Character)); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 Utf8BytesToUtf16(const utf_char8 Character) noexcept + { + return Utf32ToUtf16Pair(Utf8BytesToUtf32(Character)); + } + + template< + typename codepoint_iterator_type, + typename iterator_deref_type = decltype(*std::declval()), // Iterator can be dereferenced + typename = typename std::enable_if::type) == utf_char8::GetCodepointSize()>::type // Return-value of derferenced iterator has the same size as one codepoint + > + class utf8_iterator : public UtfImpl::Iterator::utf_char_iterator_base, codepoint_iterator_type, utf_char8> + { + private: + typedef typename utf8_iterator own_type; + + friend UtfImpl::Iterator::utf_char_iterator_base_child_acessor; + + public: + using UtfImpl::Iterator::utf_char_iterator_base::utf_char_iterator_base; + + public: + utf8_iterator() = delete; + + private: + void ReadChar() + { + if (this->NextCharStartIterator == this->EndIterator) + return; + + // Reset the bytes of the character + this->CurrentChar = utf8_bytes{ 0 }; + + const int CharCodepointCount = GetUtf8CharLenght(static_cast(*this->NextCharStartIterator)); + + for (int i = 0; i < CharCodepointCount; i++) + { + // The least character ended abruptly + if (this->NextCharStartIterator == this->EndIterator) + { + this->CurrentIterator = this->EndIterator; + this->CurrentChar = utf8_bytes{ 0 }; + break; + } + + this->CurrentChar[static_cast(i)] = static_cast(*this->NextCharStartIterator); + this->NextCharStartIterator++; + } + } + }; + + template< + typename codepoint_iterator_type, + typename iterator_deref_type = decltype(*std::declval()), // Iterator can be dereferenced + typename = typename std::enable_if::type) == utf_char16::GetCodepointSize()>::type // Return-value of derferenced iterator has the same size as one codepoint + > + class utf16_iterator : public UtfImpl::Iterator::utf_char_iterator_base, codepoint_iterator_type, utf_char16> + { + private: + typedef typename utf16_iterator own_type; + + friend UtfImpl::Iterator::utf_char_iterator_base_child_acessor; + + public: + using UtfImpl::Iterator::utf_char_iterator_base::utf_char_iterator_base; + + public: + utf16_iterator() = delete; + + private: + UTF_CONSTEXPR void ReadChar() + { + if (this->NextCharStartIterator == this->EndIterator) + return; + + // Reset the bytes of the character + this->CurrentChar = utf16_pair{ 0 }; + + const int CharCodepointCount = GetUtf16CharLenght(static_cast(*this->NextCharStartIterator)); + + if (CharCodepointCount == 0x1) + { + // Read the only codepoint + this->CurrentChar.Char.Lower = *this->NextCharStartIterator; + this->NextCharStartIterator++; + + return; + } + + // Read the first of two codepoints + this->CurrentChar.Char.Upper = *this->NextCharStartIterator; + this->NextCharStartIterator++; + + // The least character ended abruptly + if (this->NextCharStartIterator == this->EndIterator) + { + this->CurrentChar = utf16_pair{ 0 }; + this->CurrentIterator = this->EndIterator; + return; + } + + // Read the second of two codepoints + this->CurrentChar.Char.Lower = *this->NextCharStartIterator; + this->NextCharStartIterator++; + } + }; + + template< + typename codepoint_iterator_type, + typename iterator_deref_type = decltype(*std::declval()), // Iterator can be dereferenced + typename = typename std::enable_if::type) == utf_char32::GetCodepointSize()>::type // Return-value of derferenced iterator has the same size as one codepoint + > + class utf32_iterator : public UtfImpl::Iterator::utf_char_iterator_base, codepoint_iterator_type, utf_char32> + { + private: + typedef typename utf32_iterator own_type; + + friend UtfImpl::Iterator::utf_char_iterator_base_child_acessor; + + public: + using UtfImpl::Iterator::utf_char_iterator_base::utf_char_iterator_base; + + public: + utf32_iterator() = delete; + + public: + template + auto Replace(const char_type NewChar) -> std::enable_if_t::value> + { + this->CurrentChar = NewChar; + *this->CurrentIterator = NewChar; + } + + private: + void ReadChar() + { + if (this->NextCharStartIterator == this->EndIterator) + return; + + this->CurrentChar = *this->NextCharStartIterator; + this->NextCharStartIterator++; + } + }; + + template::value, int>::type = 0 + > + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 ParseUtf8CharFromStr(const codepoint_type* Str) + { + if (!Str) + return utf8_bytes{}; + + const utf_cp8_t FirstCodepoint = static_cast(Str[0]); + const auto CharLength = GetUtf8CharLenght(FirstCodepoint); + + if (CharLength == 0) + return utf8_bytes{}; + + utf8_bytes RetChar; + RetChar.Codepoints[0] = FirstCodepoint; + + for (int i = 1; i < CharLength; i++) + { + const utf_cp8_t CurrentCodepoint = static_cast(Str[i]); + + // Filters the null-terminator and other invalid followup bytes + if (!UtfImpl::Utf8::IsValidFollowupCodepoint(CurrentCodepoint)) + return utf8_bytes{}; + + RetChar.Codepoints[i] = CurrentCodepoint; + } + + return RetChar; + } + + template::value, int>::type = 0 + > + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 ParseUtf16CharFromStr(const codepoint_type* Str) + { + if (!Str) + return utf_char16{}; + + const utf_cp16_t FirstCodepoint = static_cast(Str[0]); + + if (GetUtf16CharLenght(FirstCodepoint) == 1) + return utf16_pair{ FirstCodepoint }; + + return utf16_pair{ FirstCodepoint, static_cast(Str[1]) }; + } + + template::value, int>::type = 0 + > + UTF_CONSTEXPR UTF_NODISCARD + utf_char32 ParseUtf32CharFromStr(const codepoint_type* Str) + { + if (!Str) + return utf_char32{}; + + return static_cast(Str[0]); + } + + + /* + * Conversions from UTF-16 to UTF-8 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf16StringToUtf8String(utf16_iterator StringIteratorToConvert) + { + utf8_char_string RetString; + + for (const utf_char16 Char : StringIteratorToConvert) + { + const auto NewChar = Utf16PairToUtf8Bytes(Char); + + for (int i = 0; i < NewChar.GetNumCodepoints(); i++) + RetString += static_cast(NewChar[static_cast(i)]); + } + + return RetString; + } + + template())), + typename = utf16_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf16StringToUtf8String(const utf16_char_string& StringToConvert) + { + return Utf16StringToUtf8String(utf16_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf16StringToUtf8String(utf16_char_type(&StringToConvert)[CStrLenght]) + { + return Utf16StringToUtf8String(utf16_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf16StringToUtf8String(const utf16_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf16StringToUtf8String(utf16_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + /* + * Conversions from UTF-32 to UTF-8 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf32StringToUtf8String(utf32_iterator StringIteratorToConvert) + { + utf8_char_string RetString; + + for (const utf_char32 Char : StringIteratorToConvert) + { + const auto NewChar = Utf32ToUtf8Bytes(Char); + + for (int i = 0; i < NewChar.GetNumCodepoints(); i++) + RetString += static_cast(NewChar[static_cast(i)]); + } + + return RetString; + } + + template())), + typename = utf32_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf32StringToUtf8String(const utf32_char_string& StringToConvert) + { + return Utf32StringToUtf8String(utf32_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf32StringToUtf8String(utf32_char_type(&StringToConvert)[cstr_lenght]) + { + return Utf32StringToUtf8String(utf32_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf8_char_string Utf32StringToUtf8String(const utf32_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf32StringToUtf8String(utf32_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + /* + * Conversions from UTF-8 to UTF-16 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf8StringToUtf16String(utf8_iterator StringIteratorToConvert) + { + utf16_char_string RetString; + + for (const utf_char8 Char : StringIteratorToConvert) + { + const auto NewChar = Utf8BytesToUtf16(Char); + + if (NewChar.GetNumCodepoints() > 1) + RetString += NewChar.Get().Upper; + + RetString += NewChar.Get().Lower; + } + + return RetString; + } + + template())), + typename = utf8_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf8StringToUtf16String(const utf8_char_string& StringToConvert) + { + return Utf8StringToUtf16String(utf8_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf8StringToUtf16String(utf8_char_type(&StringToConvert)[cstr_lenght]) + { + return Utf32StringToUtf16String(utf8_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf8StringToUtf16String(const utf8_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf32StringToUtf16String(utf32_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + /* + * Conversions from UTF-32 to UTF-16 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf32StringToUtf16String(utf32_iterator StringIteratorToConvert) + { + utf16_char_string RetString; + + for (const utf_char32 Char : StringIteratorToConvert) + { + const auto NewChar = Utf32ToUtf16Pair(Char); + + if (NewChar.GetNumCodepoints() > 1) + RetString += NewChar.Get().Upper; + + RetString += NewChar.Get().Lower; + } + + return RetString; + } + + template())), + typename = utf32_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf32StringToUtf16String(const utf32_char_string& StringToConvert) + { + return Utf32StringToUtf16String(utf32_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf32StringToUtf16String(utf32_char_type(&StringToConvert)[cstr_lenght]) + { + return Utf32StringToUtf16String(utf32_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf16_char_string Utf32StringToUtf16String(const utf32_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf32StringToUtf16String(utf32_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + /* + * Conversions from UTF-8 to UTF-32 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf8StringToUtf32String(utf8_iterator StringIteratorToConvert) + { + utf32_char_string RetString; + + for (const utf_char8 Char : StringIteratorToConvert) + { + RetString += Utf8BytesToUtf32(Char); + } + + return RetString; + } + + template())), + typename = utf8_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf8StringToUtf32String(const utf8_char_string& StringToConvert) + { + return Utf8StringToUtf32String(utf8_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf8StringToUtf32String(utf8_char_type(&StringToConvert)[cstr_lenght]) + { + return Utf8StringToUtf32String(utf8_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf8StringToUtf32String(const utf8_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf8StringToUtf32String(utf8_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + /* + * Conversions from UTF-16 to UTF-32 + */ + template()))>::type + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf16StringToUtf32String(utf16_iterator StringIteratorToConvert) + { + utf32_char_string RetString; + + for (const utf_char16 Char : StringIteratorToConvert) + { + RetString += Utf16PairToUtf32(Char).Get(); + } + + return RetString; + } + + template())), + typename = utf16_iterator + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf16StringToUtf32String(const utf16_char_string& StringToConvert) + { + return Utf16StringToUtf32String(utf16_iterator(StringToConvert)); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf16StringToUtf32String(utf16_char_type(&StringToConvert)[cstr_lenght]) + { + return Utf16StringToUtf32String(utf16_iterator(std::begin(StringToConvert), std::end(StringToConvert))); + } + + template + > + UTF_CONSTEXPR20 UTF_NODISCARD + utf32_char_string Utf16StringToUtf32String(const utf16_char_type* StringToConvert, int NonNullTermiantedLength) + { + return Utf16StringToUtf32String(utf16_iterator(StringToConvert, StringToConvert + NonNullTermiantedLength)); + } + + + template())), // has 'begin()' + typename = decltype(std::end(std::declval())) // has 'end()' + > + UTF_CONSTEXPR20 UTF_NODISCARD + string_type WStringToString(const wstring_type& WideString) + { + using char_type = typename std::decay()))>::type; + + // Workaround to missing 'if constexpr (...)' in Cpp14. Satisfies the requirements of conversion-functions. Safe because the incorrect function is never going to be invoked. + struct dummy_2byte_str { uint16_t* begin() const { return nullptr; }; uint16_t* end() const { return nullptr; }; }; + struct dummy_4byte_str { uint32_t* begin() const { return nullptr; }; uint32_t* end() const { return nullptr; }; }; + + if UTF_IF_CONSTEXPR (sizeof(char_type) == 0x2) // UTF-16 + { + using type_to_use = typename std::conditional::type; + return Utf16StringToUtf8String(UtfImpl::Utils::ForceCastIfMissmatch(WideString)); + } + else // UTF-32 + { + using type_to_use = typename std::conditional::type; + return Utf32StringToUtf8String(UtfImpl::Utils::ForceCastIfMissmatch(WideString)); + } + } + + template())), // has 'begin()' + typename = decltype(std::end(std::declval())) // has 'end()' + > + UTF_CONSTEXPR20 UTF_NODISCARD + wstring_type StringToWString(const string_type& NarrowString) + { + using char_type = typename std::decay()))>::type; + + // Workaround to missing 'if constexpr (...)' in Cpp14. Satisfies the requirements of conversion-functions. Safe because the incorrect function is never going to be invoked. + struct dummy_2byte_str { uint16_t* begin() const { return nullptr; }; uint16_t* end() const { return nullptr; }; }; + struct dummy_4byte_str { uint32_t* begin() const { return nullptr; }; uint32_t* end() const { return nullptr; }; }; + + if UTF_IF_CONSTEXPR(sizeof(char_type) == 0x2) // UTF-16 + { + using type_to_use = typename std::conditional::type; + return Utf8StringToUtf16String(NarrowString); + } + else // UTF-32 + { + using type_to_use = typename std::conditional::type; + return Utf8StringToUtf32String(NarrowString); + } + } + + + template + UTF_CONSTEXPR byte_iterator_type ReplaceUtf8(byte_iterator_type Begin, byte_iterator_type End, utf_cp8_t CharToReplace, utf_cp8_t ReplacementChar) + { + using namespace UtfImpl; + + if (Begin == End) + return End; + + const auto ToReplaceSize = GetUtf8CharLenght(CharToReplace); + const auto ReplacementSize = GetUtf8CharLenght(ReplacementChar); + + if (ToReplaceSize == ReplacementSize) // Trivial replacement + { + // TODO + } + else if (ToReplaceSize < ReplacementSize) // + { + // TODO + } + else /* if (ToReplaceSize > ReplacementSize) */ // Replace and move following bytes back + { + // TODO + } + } + + // utf_char spezialization-implementation for Utf8 + UTF_CONSTEXPR utf_char::utf_char(utf8_bytes InChar) noexcept + : Char(InChar) + { + } + + template + UTF_CONSTEXPR utf_char::utf_char(const char_type* SingleCharString) noexcept + : utf_char(ParseUtf8CharFromStr(SingleCharString)) + { + } + + UTF_CONSTEXPR utf_char& utf_char::operator=(utf8_bytes inBytse) noexcept + { + Char.Codepoints[0] = inBytse.Codepoints[0]; + Char.Codepoints[1] = inBytse.Codepoints[1]; + Char.Codepoints[2] = inBytse.Codepoints[2]; + Char.Codepoints[3] = inBytse.Codepoints[3]; + + return *this; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator==(utf_char8 Other) const noexcept + { + return Char == Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_cp8_t& utf_char::operator[](const uint8_t Index) + { +#ifdef _DEBUG + if (Index >= 0x4) + throw std::out_of_range("Index was greater than 4!"); +#endif // _DEBUG + return Char.Codepoints[Index]; + } + + UTF_CONSTEXPR UTF_NODISCARD + const utf_cp8_t& utf_char::operator[](const uint8_t Index) const + { +#ifdef _DEBUG + if (Index >= 0x4) + throw std::out_of_range("Index was greater than 4!"); +#endif // _DEBUG + return Char.Codepoints[Index]; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator!=(utf_char8 Other) const noexcept + { + return Char != Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 utf_char::GetAsUtf8() const noexcept + { + return *this; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 utf_char::GetAsUtf16() const noexcept + { + return Utf8BytesToUtf16(*this); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char32 utf_char::GetAsUtf32() const noexcept + { + return Utf8BytesToUtf32(*this); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf8_bytes utf_char::Get() const + { + return Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + UtfEncodingType utf_char::GetEncoding() const noexcept + { + return UtfEncodingType::Utf8; + } + + UTF_CONSTEXPR UTF_NODISCARD + uint8_t utf_char::GetNumCodepoints() const noexcept + { + return GetUtf8CharLenght(Char.Codepoints[0]); + } + + UTF_CONSTEXPR UTF_NODISCARD + /* static */ uint8_t utf_char::GetCodepointSize() noexcept + { + return 0x1; + } + + + + // utf_char spezialization-implementation for Utf8 + UTF_CONSTEXPR utf_char::utf_char(utf16_pair InChar) noexcept + : Char(InChar) + { + } + + template + UTF_CONSTEXPR utf_char::utf_char(const char_type* SingleCharString) noexcept + : utf_char(ParseUtf16CharFromStr(SingleCharString)) + { + } + + UTF_CONSTEXPR utf_char& utf_char::operator=(utf16_pair inBytse) noexcept + { + Char.Upper = inBytse.Upper; + Char.Lower = inBytse.Lower; + + return *this; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator==(utf_char16 Other) const noexcept + { + return Char == Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator!=(utf_char16 Other) const noexcept + { + return Char != Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 utf_char::GetAsUtf8() const noexcept + { + return Utf16PairToUtf8Bytes(Char); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 utf_char::GetAsUtf16() const noexcept + { + return Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char32 utf_char::GetAsUtf32() const noexcept + { + return Utf16PairToUtf32(Char); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf16_pair utf_char::Get() const noexcept + { + return Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + UtfEncodingType utf_char::GetEncoding() const noexcept + { + return UtfEncodingType::Utf16; + } + + UTF_CONSTEXPR UTF_NODISCARD + uint8_t utf_char::GetNumCodepoints() const noexcept + { + return GetUtf16CharLenght(Char.Upper); + } + + UTF_CONSTEXPR UTF_NODISCARD + /* static */ uint8_t utf_char::GetCodepointSize() noexcept + { + return 0x2; + } + + + + // utf_char spezialization-implementation for Utf32 + UTF_CONSTEXPR utf_char::utf_char(utf_cp32_t InChar) noexcept + : Char(InChar) + { + } + + template + UTF_CONSTEXPR utf_char::utf_char(const char_type* SingleCharString) noexcept + : Char(*SingleCharString) + { + } + + UTF_CONSTEXPR utf_char& utf_char::operator=(utf_cp32_t inBytse) noexcept + { + Char = inBytse; + return *this; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator==(utf_char32 Other) const noexcept + { + return Char == Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + bool utf_char::operator!=(utf_char32 Other) const noexcept + { + return Char != Other.Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char8 utf_char::GetAsUtf8() const noexcept + { + return Utf32ToUtf8Bytes(Char); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char16 utf_char::GetAsUtf16() const noexcept + { + return Utf32ToUtf16Pair(Char); + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_char32 utf_char::GetAsUtf32() const noexcept + { + return Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + utf_cp32_t utf_char::Get() const noexcept + { + return Char; + } + + UTF_CONSTEXPR UTF_NODISCARD + UtfEncodingType utf_char::GetEncoding() const noexcept + { + return UtfEncodingType::Utf32; + } + + UTF_CONSTEXPR UTF_NODISCARD + uint8_t utf_char::GetNumCodepoints() const noexcept + { + return 0x1; + } + + UTF_CONSTEXPR UTF_NODISCARD + /* static */ uint8_t utf_char::GetCodepointSize() noexcept + { + return 0x4; + } +} + +#undef UTF_CONSTEXPR +#undef UTF_CONSTEXPR14 +#undef UTF_CONSTEXPR17 +#undef UTF_CONSTEXPR20 +#undef UTF_CONSTEXPR23 +#undef UTF_CONSTEXPR26 + + +// Restore all warnings suppressed for the UTF-N implementation +#if (defined(_MSC_VER)) +#pragma warning (pop) +#elif (defined(__CLANG__) || defined(__GNUC__)) +#pragma GCC diagnostic pop +#endif // Warnings \ No newline at end of file