commit ad200d2930245d3780da95fc40ab3b2220aafc5f Author: squeaksies Date: Wed Oct 3 21:11:00 2018 -0700 Initial Commit! いきますよ! diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d90b63 --- /dev/null +++ b/.gitignore @@ -0,0 +1,81 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Visual Studio 2015 database file +*.VC.db + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* + +# Packaged exe +Packaging/* + +# Releases +Releases/* + +# Cache files for the editor to use +DerivedDataCache/* diff --git a/Build/Windows/Application.ico b/Build/Windows/Application.ico new file mode 100644 index 0000000..3d89285 Binary files /dev/null and b/Build/Windows/Application.ico differ diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Config/DefaultEditor.ini @@ -0,0 +1,2 @@ + + diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000..24cb055 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,221 @@ +[URL] +GameName=MediocreMapper + +[Audio] +UnfocusedVolumeMultiplier=1.0 + +[/Script/EngineSettings.GameMapsSettings] +EditorStartupMap=/Game/Levels/Level_Startup.Level_Startup +GameDefaultMap=/Game/Levels/Level_Startup.Level_Startup +GlobalDefaultGameMode=/Game/Blueprints/BPGM_editor.BPGM_editor_C +GlobalDefaultServerGameMode=/Game/Blueprints/BPGM_editor.BPGM_editor_C +GameInstanceClass=/Game/Blueprints/BPGI_editor.BPGI_editor_C + +[/Script/Engine.RendererSettings] +r.MobileHDR=True +r.Mobile.DisableVertexFog=True +r.Shadow.CSM.MaxMobileCascades=1 +r.MobileMSAA=1 +r.DiscardUnusedQuality=False +r.AllowOcclusionQueries=True +r.MinScreenRadiusForLights=0.030000 +r.MinScreenRadiusForDepthPrepass=0.030000 +r.MinScreenRadiusForCSMDepth=0.010000 +r.PrecomputedVisibilityWarning=False +r.TextureStreaming=True +Compat.UseDXT5NormalMaps=False +r.ClearCoatNormal=False +r.ReflectionCaptureResolution=64 +r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True +r.ForwardShading=True +r.VertexFoggingForOpaque=True +r.AllowStaticLighting=False +r.NormalMapsForStaticLighting=False +r.GenerateMeshDistanceFields=False +r.DistanceFieldBuild.EightBit=False +r.GenerateLandscapeGIData=False +r.DistanceFieldBuild.Compress=False +r.TessellationAdaptivePixelsPerTriangle=48.000000 +r.SeparateTranslucency=True +r.TranslucentSortPolicy=0 +TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000) +r.CustomDepth=3 +r.CustomDepthTemporalAAJitter=False +r.PostProcessing.PropagateAlpha=False +r.UsePreExposure=False +r.DefaultFeature.Bloom=True +r.DefaultFeature.AmbientOcclusion=True +r.DefaultFeature.AmbientOcclusionStaticFraction=False +r.DefaultFeature.AutoExposure=False +r.DefaultFeature.AutoExposure.Method=2 +r.DefaultFeature.MotionBlur=False +r.DefaultFeature.LensFlare=False +r.TemporalAA.Upsampling=False +r.DefaultFeature.AntiAliasing=0 +r.DefaultFeature.PointLightUnits=1 +r.DefaultFeature.SpotLightUnits=1 +r.Shadow.UnbuiltPreviewInGame=True +r.StencilForLODDither=False +r.EarlyZPass=3 +r.EarlyZPassMovable=True +r.EarlyZPassOnlyMaterialMasking=False +r.DBuffer=False +r.ClearSceneMethod=1 +r.BasePassOutputsVelocity=False +r.SelectiveBasePassOutputs=False +bDefaultParticleCutouts=False +r.AllowGlobalClipPlane=False +r.GBufferFormat=1 +r.MorphTarget.Mode=True +bGPUParticlesLocalVFOnly=False +r.GPUCrashDebugging=True +vr.InstancedStereo=False +vr.MultiView=False +vr.MobileMultiView=False +vr.MobileMultiView.Direct=False +vr.MonoscopicFarField=False +vr.DebugCanvasInLayer=False +r.WireframeCullThreshold=5.000000 +r.SupportStationarySkylight=False +r.SupportLowQualityLightmaps=True +r.SupportPointLightWholeSceneShadows=False +r.SupportAtmosphericFog=False +r.SkinCache.CompileShaders=False +r.Mobile.EnableStaticAndCSMShadowReceivers=False +r.Mobile.EnableMovableLightCSMShaderCulling=False +r.Mobile.AllowDistanceFieldShadows=False +r.Mobile.AllowMovableDirectionalLights=False +r.MobileNumDynamicPointLights=0 +r.MobileDynamicPointLightsUseStaticBranch=False +r.SkinCache.SceneMemoryLimitInMB=128.000000 +r.GPUSkin.Limit2BoneInfluences=False +r.SupportDepthOnlyIndexBuffers=True +r.SupportReversedIndexBuffers=True +r.SupportMaterialLayers=False + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Scalable +AppliedDefaultGraphicsPerformance=Scalable + +[/Script/Engine.GarbageCollectionSettings] +gc.MaxObjectsInEditor=10000000 + +[/Script/Engine.NetworkSettings] +net.MaxRepArraySize=4096 + +[/Script/Engine.CollisionProfile] +-Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False) +-Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) +-Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) +-Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) +-Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) +-Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.",bCanModify=False) +-Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ",bCanModify=False) +-Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ",bCanModify=False) +-Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldStatic",Response=ECR_Block),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.",bCanModify=False) +-Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.",bCanModify=False) +-Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors",bCanModify=False) +-Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors",bCanModify=False) +-Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.",bCanModify=False) +-Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.",bCanModify=False) +-Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.",bCanModify=False) +-Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.",bCanModify=False) +-Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.",bCanModify=False) +-Profiles=(Name="UI",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Block),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False) ++Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.",bCanModify=False) ++Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ",bCanModify=False) ++Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ",bCanModify=False) ++Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.",bCanModify=False) ++Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.",bCanModify=False) ++Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors",bCanModify=False) ++Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors",bCanModify=False) ++Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.",bCanModify=False) ++Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.",bCanModify=False) ++Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.",bCanModify=False) ++Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.",bCanModify=False) ++Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.",bCanModify=False) ++Profiles=(Name="UI",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="Note",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,Name="Obstacle",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,Name="PlacingGhost",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel4,Name="NoteSound",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel5,Name="EventPlacingGhost",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel6,Name="Event",DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False) +-ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall") +-ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn") +-ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic") +-ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor") +-ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic") ++ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall") ++ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn") ++ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic") ++ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor") ++ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic") +-CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic") +-CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic") +-CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle") +-CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn") ++CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic") ++CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic") ++CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle") ++CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn") ++CollisionChannelRedirects=(OldName="Event",NewName="EventPlacingGhost") + +[/Script/Engine.Engine] +MaximumLoopIterationCount=10000000 +SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=22.000000),UpperBound=(Type=Exclusive,Value=144.000000)) + +ActiveGameNameRedirects=(OldGameName="/Script/BeatSaberEditor",NewGameName="/Script/MediocreMapper") + +ActiveGameNameRedirects=(OldGameName="BeatSaberEditor",NewGameName="MediocreMapper") + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +Compiler=VisualStudio2017 + +[/Script/Engine.PhysicsSettings] +DefaultGravityZ=-980.000000 +DefaultTerminalVelocity=4000.000000 +DefaultFluidFriction=0.300000 +SimulateScratchMemorySize=262144 +RagdollAggregateThreshold=4 +TriangleMeshTriangleMinAreaThreshold=5.000000 +bEnableAsyncScene=False +bEnableShapeSharing=False +bEnablePCM=True +bEnableStabilization=False +bWarnMissingLocks=True +bEnable2DPhysics=False +LockedAxis=Invalid +DefaultDegreesOfFreedom=Full3D +BounceThresholdVelocity=200.000000 +FrictionCombineMode=Average +RestitutionCombineMode=Average +MaxAngularVelocity=3600.000000 +MaxDepenetrationVelocity=0.000000 +ContactOffsetMultiplier=0.020000 +MinContactOffset=2.000000 +MaxContactOffset=8.000000 +bSimulateSkeletalMeshOnDedicatedServer=True +DefaultShapeComplexity=CTF_UseSimpleAndComplex +bDefaultHasComplexCollision=True +bSuppressFaceRemapTable=False +bSupportUVFromHitResults=False +bDisableActiveActors=False +bDisableCCD=False +bEnableEnhancedDeterminism=False +MaxPhysicsDeltaTime=0.033333 +bSubstepping=False +bSubsteppingAsync=False +MaxSubstepDeltaTime=0.016667 +MaxSubsteps=6 +SyncSceneSmoothingFactor=0.000000 +AsyncSceneSmoothingFactor=0.990000 +InitialAverageFrameRate=0.016667 +PhysXTreeRebuildRate=10 + + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000..d035331 --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,41 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=F5529D354BF9DDA5B4BC06BB62D10933 +bShouldWindowPreserveAspectRatio=False +ProjectName=MediocreMapper +ProjectDisplayedTitle=NSLOCTEXT("[/Script/EngineSettings]", "A4F171D24A09E6B0C435A39031D526F5", "EditSaber") + +[/Script/UnrealEd.ProjectPackagingSettings] +Build=IfProjectHasCode +BuildConfiguration=PPBC_Shipping +StagingDirectory=(Path="E:\\Documents\\Unreal Projects\\MediocreMapper") +FullRebuild=True +ForDistribution=True +IncludeDebugFiles=False +BlueprintNativizationMethod=Disabled +bIncludeNativizedAssetsInProjectGeneration=False +UsePakFile=True +bGenerateChunks=False +bGenerateNoChunks=False +bChunkHardReferencesOnly=False +bBuildHttpChunkInstallData=False +HttpChunkInstallDataDirectory=(Path="") +HttpChunkInstallDataVersion= +IncludePrerequisites=False +IncludeAppLocalPrerequisites=False +bShareMaterialShaderCode=False +bSharedMaterialNativeLibraries=False +ApplocalPrerequisitesDirectory=(Path="") +IncludeCrashReporter=False +InternationalizationPreset=English +-CulturesToStage=en ++CulturesToStage=en +bCookAll=False +bCookMapsOnly=False +bCompressed=False +bEncryptIniFiles=False +bEncryptPakIndex=False +bSkipEditorContent=True ++MapsToCook=(FilePath="/Game/Levels/Level_Startup") +bNativizeBlueprintAssets=False +bNativizeOnlySelectedBlueprints=False + diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..3199337 Binary files /dev/null and b/Config/DefaultInput.ini differ diff --git a/Content/Blueprints/BPC_editor.uasset b/Content/Blueprints/BPC_editor.uasset new file mode 100644 index 0000000..8ac384b Binary files /dev/null and b/Content/Blueprints/BPC_editor.uasset differ diff --git a/Content/Blueprints/BPFL_editor.uasset b/Content/Blueprints/BPFL_editor.uasset new file mode 100644 index 0000000..650607f Binary files /dev/null and b/Content/Blueprints/BPFL_editor.uasset differ diff --git a/Content/Blueprints/BPGI_editor.uasset b/Content/Blueprints/BPGI_editor.uasset new file mode 100644 index 0000000..e971a50 Binary files /dev/null and b/Content/Blueprints/BPGI_editor.uasset differ diff --git a/Content/Blueprints/BPGM_editor.uasset b/Content/Blueprints/BPGM_editor.uasset new file mode 100644 index 0000000..69c7bb4 Binary files /dev/null and b/Content/Blueprints/BPGM_editor.uasset differ diff --git a/Content/Blueprints/BPSG_config.uasset b/Content/Blueprints/BPSG_config.uasset new file mode 100644 index 0000000..ed7a033 Binary files /dev/null and b/Content/Blueprints/BPSG_config.uasset differ diff --git a/Content/Blueprints/BP_BPMChange.uasset b/Content/Blueprints/BP_BPMChange.uasset new file mode 100644 index 0000000..49fc531 Binary files /dev/null and b/Content/Blueprints/BP_BPMChange.uasset differ diff --git a/Content/Blueprints/BP_controller.uasset b/Content/Blueprints/BP_controller.uasset new file mode 100644 index 0000000..cf0dcac Binary files /dev/null and b/Content/Blueprints/BP_controller.uasset differ diff --git a/Content/Blueprints/BP_event.uasset b/Content/Blueprints/BP_event.uasset new file mode 100644 index 0000000..2e0f8b0 Binary files /dev/null and b/Content/Blueprints/BP_event.uasset differ diff --git a/Content/Blueprints/BP_event_ghost.uasset b/Content/Blueprints/BP_event_ghost.uasset new file mode 100644 index 0000000..883cdc1 Binary files /dev/null and b/Content/Blueprints/BP_event_ghost.uasset differ diff --git a/Content/Blueprints/BP_event_manager.uasset b/Content/Blueprints/BP_event_manager.uasset new file mode 100644 index 0000000..2b1a176 Binary files /dev/null and b/Content/Blueprints/BP_event_manager.uasset differ diff --git a/Content/Blueprints/BP_lasers.uasset b/Content/Blueprints/BP_lasers.uasset new file mode 100644 index 0000000..ef62765 Binary files /dev/null and b/Content/Blueprints/BP_lasers.uasset differ diff --git a/Content/Blueprints/BP_note.uasset b/Content/Blueprints/BP_note.uasset new file mode 100644 index 0000000..b8ef57c Binary files /dev/null and b/Content/Blueprints/BP_note.uasset differ diff --git a/Content/Blueprints/BP_note_ghost.uasset b/Content/Blueprints/BP_note_ghost.uasset new file mode 100644 index 0000000..34f3c6c Binary files /dev/null and b/Content/Blueprints/BP_note_ghost.uasset differ diff --git a/Content/Blueprints/BP_ring.uasset b/Content/Blueprints/BP_ring.uasset new file mode 100644 index 0000000..d84bd0f Binary files /dev/null and b/Content/Blueprints/BP_ring.uasset differ diff --git a/Content/Blueprints/BP_wall.uasset b/Content/Blueprints/BP_wall.uasset new file mode 100644 index 0000000..b4fdcce Binary files /dev/null and b/Content/Blueprints/BP_wall.uasset differ diff --git a/Content/Blueprints/CurveBlink.uasset b/Content/Blueprints/CurveBlink.uasset new file mode 100644 index 0000000..a757d46 Binary files /dev/null and b/Content/Blueprints/CurveBlink.uasset differ diff --git a/Content/Blueprints/CurveFlash.uasset b/Content/Blueprints/CurveFlash.uasset new file mode 100644 index 0000000..bab4f49 Binary files /dev/null and b/Content/Blueprints/CurveFlash.uasset differ diff --git a/Content/Blueprints/ToolTipWidget.uasset b/Content/Blueprints/ToolTipWidget.uasset new file mode 100644 index 0000000..4cad492 Binary files /dev/null and b/Content/Blueprints/ToolTipWidget.uasset differ diff --git a/Content/Blueprints/VarTypes/BPMChange.uasset b/Content/Blueprints/VarTypes/BPMChange.uasset new file mode 100644 index 0000000..dbea40e Binary files /dev/null and b/Content/Blueprints/VarTypes/BPMChange.uasset differ diff --git a/Content/Blueprints/VarTypes/EnumActionType.uasset b/Content/Blueprints/VarTypes/EnumActionType.uasset new file mode 100644 index 0000000..3d88434 Binary files /dev/null and b/Content/Blueprints/VarTypes/EnumActionType.uasset differ diff --git a/Content/Blueprints/VarTypes/EnumDifficulty.uasset b/Content/Blueprints/VarTypes/EnumDifficulty.uasset new file mode 100644 index 0000000..4e3f460 Binary files /dev/null and b/Content/Blueprints/VarTypes/EnumDifficulty.uasset differ diff --git a/Content/Blueprints/VarTypes/StructDifficulty.uasset b/Content/Blueprints/VarTypes/StructDifficulty.uasset new file mode 100644 index 0000000..3d8b237 Binary files /dev/null and b/Content/Blueprints/VarTypes/StructDifficulty.uasset differ diff --git a/Content/Blueprints/VarTypes/StructDifficultyInfos.uasset b/Content/Blueprints/VarTypes/StructDifficultyInfos.uasset new file mode 100644 index 0000000..a9ba7dd Binary files /dev/null and b/Content/Blueprints/VarTypes/StructDifficultyInfos.uasset differ diff --git a/Content/Blueprints/VarTypes/StructEvent.uasset b/Content/Blueprints/VarTypes/StructEvent.uasset new file mode 100644 index 0000000..d9ba944 Binary files /dev/null and b/Content/Blueprints/VarTypes/StructEvent.uasset differ diff --git a/Content/Blueprints/VarTypes/StructNote.uasset b/Content/Blueprints/VarTypes/StructNote.uasset new file mode 100644 index 0000000..07ac9fd Binary files /dev/null and b/Content/Blueprints/VarTypes/StructNote.uasset differ diff --git a/Content/Blueprints/VarTypes/StructObstacle.uasset b/Content/Blueprints/VarTypes/StructObstacle.uasset new file mode 100644 index 0000000..45f53d6 Binary files /dev/null and b/Content/Blueprints/VarTypes/StructObstacle.uasset differ diff --git a/Content/Blueprints/VarTypes/StructSong.uasset b/Content/Blueprints/VarTypes/StructSong.uasset new file mode 100644 index 0000000..a1048fb Binary files /dev/null and b/Content/Blueprints/VarTypes/StructSong.uasset differ diff --git a/Content/Blueprints/VarTypes/StructTimePos.uasset b/Content/Blueprints/VarTypes/StructTimePos.uasset new file mode 100644 index 0000000..2f02cca Binary files /dev/null and b/Content/Blueprints/VarTypes/StructTimePos.uasset differ diff --git a/Content/Blueprints/VarTypes/StructUndo.uasset b/Content/Blueprints/VarTypes/StructUndo.uasset new file mode 100644 index 0000000..49c7e05 Binary files /dev/null and b/Content/Blueprints/VarTypes/StructUndo.uasset differ diff --git a/Content/Blueprints/WidgetDifButton.uasset b/Content/Blueprints/WidgetDifButton.uasset new file mode 100644 index 0000000..eb0de69 Binary files /dev/null and b/Content/Blueprints/WidgetDifButton.uasset differ diff --git a/Content/Blueprints/WidgetEditorMenu.uasset b/Content/Blueprints/WidgetEditorMenu.uasset new file mode 100644 index 0000000..378c6c4 Binary files /dev/null and b/Content/Blueprints/WidgetEditorMenu.uasset differ diff --git a/Content/Blueprints/WidgetErrorPopup.uasset b/Content/Blueprints/WidgetErrorPopup.uasset new file mode 100644 index 0000000..5680b63 Binary files /dev/null and b/Content/Blueprints/WidgetErrorPopup.uasset differ diff --git a/Content/Blueprints/WidgetLoading.uasset b/Content/Blueprints/WidgetLoading.uasset new file mode 100644 index 0000000..79607c1 Binary files /dev/null and b/Content/Blueprints/WidgetLoading.uasset differ diff --git a/Content/Blueprints/WidgetMapButton.uasset b/Content/Blueprints/WidgetMapButton.uasset new file mode 100644 index 0000000..147a414 Binary files /dev/null and b/Content/Blueprints/WidgetMapButton.uasset differ diff --git a/Content/Blueprints/WidgetMapMenu.uasset b/Content/Blueprints/WidgetMapMenu.uasset new file mode 100644 index 0000000..24e42b8 Binary files /dev/null and b/Content/Blueprints/WidgetMapMenu.uasset differ diff --git a/Content/Blueprints/WidgetSetPath.uasset b/Content/Blueprints/WidgetSetPath.uasset new file mode 100644 index 0000000..988ab88 Binary files /dev/null and b/Content/Blueprints/WidgetSetPath.uasset differ diff --git a/Content/Blueprints/WidgetSongInfos.uasset b/Content/Blueprints/WidgetSongInfos.uasset new file mode 100644 index 0000000..d1a223b Binary files /dev/null and b/Content/Blueprints/WidgetSongInfos.uasset differ diff --git a/Content/Fonts/Beon.uasset b/Content/Fonts/Beon.uasset new file mode 100644 index 0000000..e9a3ab1 Binary files /dev/null and b/Content/Fonts/Beon.uasset differ diff --git a/Content/Fonts/M_ui.uasset b/Content/Fonts/M_ui.uasset new file mode 100644 index 0000000..f9ce5a7 Binary files /dev/null and b/Content/Fonts/M_ui.uasset differ diff --git a/Content/Levels/Level_Startup.umap b/Content/Levels/Level_Startup.umap new file mode 100644 index 0000000..7ad8730 Binary files /dev/null and b/Content/Levels/Level_Startup.umap differ diff --git a/Content/Materials/DefaultTextMaterialOpaque.uasset b/Content/Materials/DefaultTextMaterialOpaque.uasset new file mode 100644 index 0000000..9f17da4 Binary files /dev/null and b/Content/Materials/DefaultTextMaterialOpaque.uasset differ diff --git a/Content/Materials/Events/MI_light_off.uasset b/Content/Materials/Events/MI_light_off.uasset new file mode 100644 index 0000000..072d8e0 Binary files /dev/null and b/Content/Materials/Events/MI_light_off.uasset differ diff --git a/Content/Materials/Events/MI_light_on_blue.uasset b/Content/Materials/Events/MI_light_on_blue.uasset new file mode 100644 index 0000000..9c713e3 Binary files /dev/null and b/Content/Materials/Events/MI_light_on_blue.uasset differ diff --git a/Content/Materials/Events/MI_light_on_blue_fade.uasset b/Content/Materials/Events/MI_light_on_blue_fade.uasset new file mode 100644 index 0000000..6e42563 Binary files /dev/null and b/Content/Materials/Events/MI_light_on_blue_fade.uasset differ diff --git a/Content/Materials/Events/MI_light_on_blue_flash.uasset b/Content/Materials/Events/MI_light_on_blue_flash.uasset new file mode 100644 index 0000000..37d0ecf Binary files /dev/null and b/Content/Materials/Events/MI_light_on_blue_flash.uasset differ diff --git a/Content/Materials/Events/MI_light_on_red.uasset b/Content/Materials/Events/MI_light_on_red.uasset new file mode 100644 index 0000000..3d65fbd Binary files /dev/null and b/Content/Materials/Events/MI_light_on_red.uasset differ diff --git a/Content/Materials/Events/MI_light_on_red_fade.uasset b/Content/Materials/Events/MI_light_on_red_fade.uasset new file mode 100644 index 0000000..6dd93b2 Binary files /dev/null and b/Content/Materials/Events/MI_light_on_red_fade.uasset differ diff --git a/Content/Materials/Events/MI_light_on_red_flash.uasset b/Content/Materials/Events/MI_light_on_red_flash.uasset new file mode 100644 index 0000000..9fd60fa Binary files /dev/null and b/Content/Materials/Events/MI_light_on_red_flash.uasset differ diff --git a/Content/Materials/Events/M_event_rings.uasset b/Content/Materials/Events/M_event_rings.uasset new file mode 100644 index 0000000..1f37d8f Binary files /dev/null and b/Content/Materials/Events/M_event_rings.uasset differ diff --git a/Content/Materials/Events/M_event_speed.uasset b/Content/Materials/Events/M_event_speed.uasset new file mode 100644 index 0000000..9000720 Binary files /dev/null and b/Content/Materials/Events/M_event_speed.uasset differ diff --git a/Content/Materials/Events/M_light_event.uasset b/Content/Materials/Events/M_light_event.uasset new file mode 100644 index 0000000..4111f81 Binary files /dev/null and b/Content/Materials/Events/M_light_event.uasset differ diff --git a/Content/Materials/Events/M_light_event_2.uasset b/Content/Materials/Events/M_light_event_2.uasset new file mode 100644 index 0000000..1a126dc Binary files /dev/null and b/Content/Materials/Events/M_light_event_2.uasset differ diff --git a/Content/Materials/Events/ghostbluefade.uasset b/Content/Materials/Events/ghostbluefade.uasset new file mode 100644 index 0000000..bd7cf0a Binary files /dev/null and b/Content/Materials/Events/ghostbluefade.uasset differ diff --git a/Content/Materials/Events/ghostblueflash.uasset b/Content/Materials/Events/ghostblueflash.uasset new file mode 100644 index 0000000..9ef573f Binary files /dev/null and b/Content/Materials/Events/ghostblueflash.uasset differ diff --git a/Content/Materials/Events/ghostblueon.uasset b/Content/Materials/Events/ghostblueon.uasset new file mode 100644 index 0000000..441925a Binary files /dev/null and b/Content/Materials/Events/ghostblueon.uasset differ diff --git a/Content/Materials/Events/ghostredfade.uasset b/Content/Materials/Events/ghostredfade.uasset new file mode 100644 index 0000000..5c8f43c Binary files /dev/null and b/Content/Materials/Events/ghostredfade.uasset differ diff --git a/Content/Materials/Events/ghostredflash.uasset b/Content/Materials/Events/ghostredflash.uasset new file mode 100644 index 0000000..3e30f63 Binary files /dev/null and b/Content/Materials/Events/ghostredflash.uasset differ diff --git a/Content/Materials/Events/ghostredon.uasset b/Content/Materials/Events/ghostredon.uasset new file mode 100644 index 0000000..b1d5e18 Binary files /dev/null and b/Content/Materials/Events/ghostredon.uasset differ diff --git a/Content/Materials/MPC_time.uasset b/Content/Materials/MPC_time.uasset new file mode 100644 index 0000000..7035c97 Binary files /dev/null and b/Content/Materials/MPC_time.uasset differ diff --git a/Content/Materials/M_Arrow.uasset b/Content/Materials/M_Arrow.uasset new file mode 100644 index 0000000..f032a81 Binary files /dev/null and b/Content/Materials/M_Arrow.uasset differ diff --git a/Content/Materials/M_Arrow_blue.uasset b/Content/Materials/M_Arrow_blue.uasset new file mode 100644 index 0000000..bf2b80c Binary files /dev/null and b/Content/Materials/M_Arrow_blue.uasset differ diff --git a/Content/Materials/M_Arrow_green.uasset b/Content/Materials/M_Arrow_green.uasset new file mode 100644 index 0000000..0d277b1 Binary files /dev/null and b/Content/Materials/M_Arrow_green.uasset differ diff --git a/Content/Materials/M_Arrow_grey.uasset b/Content/Materials/M_Arrow_grey.uasset new file mode 100644 index 0000000..80d862e Binary files /dev/null and b/Content/Materials/M_Arrow_grey.uasset differ diff --git a/Content/Materials/M_Arrow_mag.uasset b/Content/Materials/M_Arrow_mag.uasset new file mode 100644 index 0000000..0dea076 Binary files /dev/null and b/Content/Materials/M_Arrow_mag.uasset differ diff --git a/Content/Materials/M_Arrow_red.uasset b/Content/Materials/M_Arrow_red.uasset new file mode 100644 index 0000000..e2cd3c7 Binary files /dev/null and b/Content/Materials/M_Arrow_red.uasset differ diff --git a/Content/Materials/M_CubeNote.uasset b/Content/Materials/M_CubeNote.uasset new file mode 100644 index 0000000..e6ea1b8 Binary files /dev/null and b/Content/Materials/M_CubeNote.uasset differ diff --git a/Content/Materials/M_CubeNote_alt.uasset b/Content/Materials/M_CubeNote_alt.uasset new file mode 100644 index 0000000..341fea8 Binary files /dev/null and b/Content/Materials/M_CubeNote_alt.uasset differ diff --git a/Content/Materials/M_CubeNote_blue.uasset b/Content/Materials/M_CubeNote_blue.uasset new file mode 100644 index 0000000..ecdf809 Binary files /dev/null and b/Content/Materials/M_CubeNote_blue.uasset differ diff --git a/Content/Materials/M_CubeNote_green.uasset b/Content/Materials/M_CubeNote_green.uasset new file mode 100644 index 0000000..de484c6 Binary files /dev/null and b/Content/Materials/M_CubeNote_green.uasset differ diff --git a/Content/Materials/M_CubeNote_grey.uasset b/Content/Materials/M_CubeNote_grey.uasset new file mode 100644 index 0000000..f22f7a5 Binary files /dev/null and b/Content/Materials/M_CubeNote_grey.uasset differ diff --git a/Content/Materials/M_CubeNote_mag.uasset b/Content/Materials/M_CubeNote_mag.uasset new file mode 100644 index 0000000..1fa7758 Binary files /dev/null and b/Content/Materials/M_CubeNote_mag.uasset differ diff --git a/Content/Materials/M_CubeNote_red.uasset b/Content/Materials/M_CubeNote_red.uasset new file mode 100644 index 0000000..eb45dbb Binary files /dev/null and b/Content/Materials/M_CubeNote_red.uasset differ diff --git a/Content/Materials/M_Obstacle.uasset b/Content/Materials/M_Obstacle.uasset new file mode 100644 index 0000000..700a982 Binary files /dev/null and b/Content/Materials/M_Obstacle.uasset differ diff --git a/Content/Materials/M_Obstacle_2.uasset b/Content/Materials/M_Obstacle_2.uasset new file mode 100644 index 0000000..e695417 Binary files /dev/null and b/Content/Materials/M_Obstacle_2.uasset differ diff --git a/Content/Materials/M_Obstacle_3.uasset b/Content/Materials/M_Obstacle_3.uasset new file mode 100644 index 0000000..e5334ac Binary files /dev/null and b/Content/Materials/M_Obstacle_3.uasset differ diff --git a/Content/Materials/M_Obstacle_4.uasset b/Content/Materials/M_Obstacle_4.uasset new file mode 100644 index 0000000..7ef5e7e Binary files /dev/null and b/Content/Materials/M_Obstacle_4.uasset differ diff --git a/Content/Materials/M_WaveForm.uasset b/Content/Materials/M_WaveForm.uasset new file mode 100644 index 0000000..0f9f4c1 Binary files /dev/null and b/Content/Materials/M_WaveForm.uasset differ diff --git a/Content/Materials/M_bomb.uasset b/Content/Materials/M_bomb.uasset new file mode 100644 index 0000000..de13522 Binary files /dev/null and b/Content/Materials/M_bomb.uasset differ diff --git a/Content/Materials/M_bomb_2.uasset b/Content/Materials/M_bomb_2.uasset new file mode 100644 index 0000000..2bfaa6b Binary files /dev/null and b/Content/Materials/M_bomb_2.uasset differ diff --git a/Content/Materials/M_bomb_ghost.uasset b/Content/Materials/M_bomb_ghost.uasset new file mode 100644 index 0000000..f30fa8c Binary files /dev/null and b/Content/Materials/M_bomb_ghost.uasset differ diff --git a/Content/Materials/M_cursor_line.uasset b/Content/Materials/M_cursor_line.uasset new file mode 100644 index 0000000..30a455e Binary files /dev/null and b/Content/Materials/M_cursor_line.uasset differ diff --git a/Content/Materials/M_edit_plane.uasset b/Content/Materials/M_edit_plane.uasset new file mode 100644 index 0000000..c7d6376 Binary files /dev/null and b/Content/Materials/M_edit_plane.uasset differ diff --git a/Content/Materials/M_events_cursor.uasset b/Content/Materials/M_events_cursor.uasset new file mode 100644 index 0000000..88177c9 Binary files /dev/null and b/Content/Materials/M_events_cursor.uasset differ diff --git a/Content/Materials/M_events_plane.uasset b/Content/Materials/M_events_plane.uasset new file mode 100644 index 0000000..51f6d1f Binary files /dev/null and b/Content/Materials/M_events_plane.uasset differ diff --git a/Content/Materials/M_events_plane_2.uasset b/Content/Materials/M_events_plane_2.uasset new file mode 100644 index 0000000..adc0709 Binary files /dev/null and b/Content/Materials/M_events_plane_2.uasset differ diff --git a/Content/Materials/M_ghost_note.uasset b/Content/Materials/M_ghost_note.uasset new file mode 100644 index 0000000..a0aab16 Binary files /dev/null and b/Content/Materials/M_ghost_note.uasset differ diff --git a/Content/Materials/M_ghost_note_alt.uasset b/Content/Materials/M_ghost_note_alt.uasset new file mode 100644 index 0000000..5347fe9 Binary files /dev/null and b/Content/Materials/M_ghost_note_alt.uasset differ diff --git a/Content/Materials/M_ghost_note_blue.uasset b/Content/Materials/M_ghost_note_blue.uasset new file mode 100644 index 0000000..ab1416b Binary files /dev/null and b/Content/Materials/M_ghost_note_blue.uasset differ diff --git a/Content/Materials/M_ghost_note_green.uasset b/Content/Materials/M_ghost_note_green.uasset new file mode 100644 index 0000000..931ee06 Binary files /dev/null and b/Content/Materials/M_ghost_note_green.uasset differ diff --git a/Content/Materials/M_ghost_note_mag.uasset b/Content/Materials/M_ghost_note_mag.uasset new file mode 100644 index 0000000..a4d42f7 Binary files /dev/null and b/Content/Materials/M_ghost_note_mag.uasset differ diff --git a/Content/Materials/M_ghost_note_red.uasset b/Content/Materials/M_ghost_note_red.uasset new file mode 100644 index 0000000..e62745d Binary files /dev/null and b/Content/Materials/M_ghost_note_red.uasset differ diff --git a/Content/Materials/M_glow.uasset b/Content/Materials/M_glow.uasset new file mode 100644 index 0000000..627e7e6 Binary files /dev/null and b/Content/Materials/M_glow.uasset differ diff --git a/Content/Materials/M_line.uasset b/Content/Materials/M_line.uasset new file mode 100644 index 0000000..fe04332 Binary files /dev/null and b/Content/Materials/M_line.uasset differ diff --git a/Content/Materials/M_loading_icon.uasset b/Content/Materials/M_loading_icon.uasset new file mode 100644 index 0000000..b552796 Binary files /dev/null and b/Content/Materials/M_loading_icon.uasset differ diff --git a/Content/Materials/M_neon.uasset b/Content/Materials/M_neon.uasset new file mode 100644 index 0000000..34c86cf Binary files /dev/null and b/Content/Materials/M_neon.uasset differ diff --git a/Content/Materials/M_neon_blue.uasset b/Content/Materials/M_neon_blue.uasset new file mode 100644 index 0000000..d214679 Binary files /dev/null and b/Content/Materials/M_neon_blue.uasset differ diff --git a/Content/Materials/M_neon_red.uasset b/Content/Materials/M_neon_red.uasset new file mode 100644 index 0000000..e789e8a Binary files /dev/null and b/Content/Materials/M_neon_red.uasset differ diff --git a/Content/Materials/M_structure_mat.uasset b/Content/Materials/M_structure_mat.uasset new file mode 100644 index 0000000..0758928 Binary files /dev/null and b/Content/Materials/M_structure_mat.uasset differ diff --git a/Content/Materials/M_timeLine.uasset b/Content/Materials/M_timeLine.uasset new file mode 100644 index 0000000..027df91 Binary files /dev/null and b/Content/Materials/M_timeLine.uasset differ diff --git a/Content/Materials/M_timeLine_2.uasset b/Content/Materials/M_timeLine_2.uasset new file mode 100644 index 0000000..9d3acbb Binary files /dev/null and b/Content/Materials/M_timeLine_2.uasset differ diff --git a/Content/Materials/PostProcess/PPI_OutlineColored.uasset b/Content/Materials/PostProcess/PPI_OutlineColored.uasset new file mode 100644 index 0000000..f344ad3 Binary files /dev/null and b/Content/Materials/PostProcess/PPI_OutlineColored.uasset differ diff --git a/Content/Materials/PostProcess/PP_OutlineColored.uasset b/Content/Materials/PostProcess/PP_OutlineColored.uasset new file mode 100644 index 0000000..9e4cc61 Binary files /dev/null and b/Content/Materials/PostProcess/PP_OutlineColored.uasset differ diff --git a/Content/Meshes/Cube.uasset b/Content/Meshes/Cube.uasset new file mode 100644 index 0000000..2bc3d32 Binary files /dev/null and b/Content/Meshes/Cube.uasset differ diff --git a/Content/Meshes/Cylinder.uasset b/Content/Meshes/Cylinder.uasset new file mode 100644 index 0000000..5312378 Binary files /dev/null and b/Content/Meshes/Cylinder.uasset differ diff --git a/Content/Meshes/Rings/SM_big_ring.uasset b/Content/Meshes/Rings/SM_big_ring.uasset new file mode 100644 index 0000000..5dd1b63 Binary files /dev/null and b/Content/Meshes/Rings/SM_big_ring.uasset differ diff --git a/Content/Meshes/Rings/SM_small_ring.uasset b/Content/Meshes/Rings/SM_small_ring.uasset new file mode 100644 index 0000000..d29d92f Binary files /dev/null and b/Content/Meshes/Rings/SM_small_ring.uasset differ diff --git a/Content/Meshes/Rings/SM_triangle_ring.uasset b/Content/Meshes/Rings/SM_triangle_ring.uasset new file mode 100644 index 0000000..9c842f6 Binary files /dev/null and b/Content/Meshes/Rings/SM_triangle_ring.uasset differ diff --git a/Content/Meshes/SM_Arrow.uasset b/Content/Meshes/SM_Arrow.uasset new file mode 100644 index 0000000..228e11d Binary files /dev/null and b/Content/Meshes/SM_Arrow.uasset differ diff --git a/Content/Meshes/SM_Bomb.uasset b/Content/Meshes/SM_Bomb.uasset new file mode 100644 index 0000000..76dfb6a Binary files /dev/null and b/Content/Meshes/SM_Bomb.uasset differ diff --git a/Content/Meshes/SM_CubeNote.uasset b/Content/Meshes/SM_CubeNote.uasset new file mode 100644 index 0000000..575a28f Binary files /dev/null and b/Content/Meshes/SM_CubeNote.uasset differ diff --git a/Content/Meshes/SM_events_plane.uasset b/Content/Meshes/SM_events_plane.uasset new file mode 100644 index 0000000..18fbe6d Binary files /dev/null and b/Content/Meshes/SM_events_plane.uasset differ diff --git a/Content/Meshes/SM_plane.uasset b/Content/Meshes/SM_plane.uasset new file mode 100644 index 0000000..035e844 Binary files /dev/null and b/Content/Meshes/SM_plane.uasset differ diff --git a/Content/Meshes/SM_plane_2.uasset b/Content/Meshes/SM_plane_2.uasset new file mode 100644 index 0000000..ffae2c6 Binary files /dev/null and b/Content/Meshes/SM_plane_2.uasset differ diff --git a/Content/Meshes/SM_point.uasset b/Content/Meshes/SM_point.uasset new file mode 100644 index 0000000..1ba0393 Binary files /dev/null and b/Content/Meshes/SM_point.uasset differ diff --git a/Content/Meshes/Scene/SM_ground_big_mirror.uasset b/Content/Meshes/Scene/SM_ground_big_mirror.uasset new file mode 100644 index 0000000..3cffc3a Binary files /dev/null and b/Content/Meshes/Scene/SM_ground_big_mirror.uasset differ diff --git a/Content/Meshes/Scene/SM_ground_default.uasset b/Content/Meshes/Scene/SM_ground_default.uasset new file mode 100644 index 0000000..aa48ad2 Binary files /dev/null and b/Content/Meshes/Scene/SM_ground_default.uasset differ diff --git a/Content/Meshes/Scene/SM_ground_nice.uasset b/Content/Meshes/Scene/SM_ground_nice.uasset new file mode 100644 index 0000000..ab91844 Binary files /dev/null and b/Content/Meshes/Scene/SM_ground_nice.uasset differ diff --git a/Content/Meshes/Scene/SM_ground_triangle.uasset b/Content/Meshes/Scene/SM_ground_triangle.uasset new file mode 100644 index 0000000..b39aed8 Binary files /dev/null and b/Content/Meshes/Scene/SM_ground_triangle.uasset differ diff --git a/Content/Meshes/Scene/SM_static_lasers.uasset b/Content/Meshes/Scene/SM_static_lasers.uasset new file mode 100644 index 0000000..a901c6f Binary files /dev/null and b/Content/Meshes/Scene/SM_static_lasers.uasset differ diff --git a/Content/Meshes/untitled.uasset b/Content/Meshes/untitled.uasset new file mode 100644 index 0000000..8abfc13 Binary files /dev/null and b/Content/Meshes/untitled.uasset differ diff --git a/Content/Sounds/SND_quack.uasset b/Content/Sounds/SND_quack.uasset new file mode 100644 index 0000000..4806cba Binary files /dev/null and b/Content/Sounds/SND_quack.uasset differ diff --git a/Content/Sounds/SND_tick.uasset b/Content/Sounds/SND_tick.uasset new file mode 100644 index 0000000..8780f7b Binary files /dev/null and b/Content/Sounds/SND_tick.uasset differ diff --git a/Content/Sounds/SliceLeftCue.uasset b/Content/Sounds/SliceLeftCue.uasset new file mode 100644 index 0000000..86fb50d Binary files /dev/null and b/Content/Sounds/SliceLeftCue.uasset differ diff --git a/Content/Sounds/SliceRightCue.uasset b/Content/Sounds/SliceRightCue.uasset new file mode 100644 index 0000000..32a70b3 Binary files /dev/null and b/Content/Sounds/SliceRightCue.uasset differ diff --git a/Content/Sounds/Slices/HitShortLeft1-sharedassets4_assets-35.uasset b/Content/Sounds/Slices/HitShortLeft1-sharedassets4_assets-35.uasset new file mode 100644 index 0000000..7f34cfb Binary files /dev/null and b/Content/Sounds/Slices/HitShortLeft1-sharedassets4_assets-35.uasset differ diff --git a/Content/Sounds/Slices/HitShortLeft2-sharedassets4_assets-53.uasset b/Content/Sounds/Slices/HitShortLeft2-sharedassets4_assets-53.uasset new file mode 100644 index 0000000..1266f87 Binary files /dev/null and b/Content/Sounds/Slices/HitShortLeft2-sharedassets4_assets-53.uasset differ diff --git a/Content/Sounds/Slices/HitShortLeft3-sharedassets4_assets-41.uasset b/Content/Sounds/Slices/HitShortLeft3-sharedassets4_assets-41.uasset new file mode 100644 index 0000000..103f95a Binary files /dev/null and b/Content/Sounds/Slices/HitShortLeft3-sharedassets4_assets-41.uasset differ diff --git a/Content/Sounds/Slices/HitShortLeft4-sharedassets4_assets-43.uasset b/Content/Sounds/Slices/HitShortLeft4-sharedassets4_assets-43.uasset new file mode 100644 index 0000000..cbd175a Binary files /dev/null and b/Content/Sounds/Slices/HitShortLeft4-sharedassets4_assets-43.uasset differ diff --git a/Content/Sounds/Slices/HitShortLeft5-sharedassets4_assets-46.uasset b/Content/Sounds/Slices/HitShortLeft5-sharedassets4_assets-46.uasset new file mode 100644 index 0000000..5cdc1e2 Binary files /dev/null and b/Content/Sounds/Slices/HitShortLeft5-sharedassets4_assets-46.uasset differ diff --git a/Content/Sounds/Slices/HitShortRight1-sharedassets4_assets-56.uasset b/Content/Sounds/Slices/HitShortRight1-sharedassets4_assets-56.uasset new file mode 100644 index 0000000..60ee861 Binary files /dev/null and b/Content/Sounds/Slices/HitShortRight1-sharedassets4_assets-56.uasset differ diff --git a/Content/Sounds/Slices/HitShortRight2-sharedassets4_assets-58.uasset b/Content/Sounds/Slices/HitShortRight2-sharedassets4_assets-58.uasset new file mode 100644 index 0000000..2d45d08 Binary files /dev/null and b/Content/Sounds/Slices/HitShortRight2-sharedassets4_assets-58.uasset differ diff --git a/Content/Sounds/Slices/HitShortRight3-sharedassets4_assets-39.uasset b/Content/Sounds/Slices/HitShortRight3-sharedassets4_assets-39.uasset new file mode 100644 index 0000000..3ccd3bb Binary files /dev/null and b/Content/Sounds/Slices/HitShortRight3-sharedassets4_assets-39.uasset differ diff --git a/Content/Sounds/Slices/HitShortRight4-sharedassets4_assets-42.uasset b/Content/Sounds/Slices/HitShortRight4-sharedassets4_assets-42.uasset new file mode 100644 index 0000000..86b4a4f Binary files /dev/null and b/Content/Sounds/Slices/HitShortRight4-sharedassets4_assets-42.uasset differ diff --git a/Content/Sounds/Slices/HitShortRight5-sharedassets4_assets-44.uasset b/Content/Sounds/Slices/HitShortRight5-sharedassets4_assets-44.uasset new file mode 100644 index 0000000..146815d Binary files /dev/null and b/Content/Sounds/Slices/HitShortRight5-sharedassets4_assets-44.uasset differ diff --git a/Content/Splash/EdSplash.png b/Content/Splash/EdSplash.png new file mode 100644 index 0000000..942a9b5 Binary files /dev/null and b/Content/Splash/EdSplash.png differ diff --git a/Content/Splash/EdSplash.uasset b/Content/Splash/EdSplash.uasset new file mode 100644 index 0000000..37c4f15 Binary files /dev/null and b/Content/Splash/EdSplash.uasset differ diff --git a/Content/Splash/Splash.png b/Content/Splash/Splash.png new file mode 100644 index 0000000..942a9b5 Binary files /dev/null and b/Content/Splash/Splash.png differ diff --git a/Content/Splash/Splash.uasset b/Content/Splash/Splash.uasset new file mode 100644 index 0000000..ce727d6 Binary files /dev/null and b/Content/Splash/Splash.uasset differ diff --git a/Content/Textures/Icons/T_empty_icon.uasset b/Content/Textures/Icons/T_empty_icon.uasset new file mode 100644 index 0000000..59d9ef0 Binary files /dev/null and b/Content/Textures/Icons/T_empty_icon.uasset differ diff --git a/Content/Textures/Icons/T_event_color_icon.uasset b/Content/Textures/Icons/T_event_color_icon.uasset new file mode 100644 index 0000000..d45d0e8 Binary files /dev/null and b/Content/Textures/Icons/T_event_color_icon.uasset differ diff --git a/Content/Textures/Icons/T_event_fade_icon.uasset b/Content/Textures/Icons/T_event_fade_icon.uasset new file mode 100644 index 0000000..051b09b Binary files /dev/null and b/Content/Textures/Icons/T_event_fade_icon.uasset differ diff --git a/Content/Textures/Icons/T_event_flash_icon.uasset b/Content/Textures/Icons/T_event_flash_icon.uasset new file mode 100644 index 0000000..467d3b9 Binary files /dev/null and b/Content/Textures/Icons/T_event_flash_icon.uasset differ diff --git a/Content/Textures/Icons/T_event_off_icon.uasset b/Content/Textures/Icons/T_event_off_icon.uasset new file mode 100644 index 0000000..8085192 Binary files /dev/null and b/Content/Textures/Icons/T_event_off_icon.uasset differ diff --git a/Content/Textures/Icons/T_event_on_icon.uasset b/Content/Textures/Icons/T_event_on_icon.uasset new file mode 100644 index 0000000..2333717 Binary files /dev/null and b/Content/Textures/Icons/T_event_on_icon.uasset differ diff --git a/Content/Textures/Icons/T_menu_icon.uasset b/Content/Textures/Icons/T_menu_icon.uasset new file mode 100644 index 0000000..7f97040 Binary files /dev/null and b/Content/Textures/Icons/T_menu_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_blue_icon.uasset b/Content/Textures/Icons/T_note_blue_icon.uasset new file mode 100644 index 0000000..916973c Binary files /dev/null and b/Content/Textures/Icons/T_note_blue_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_bluegreen_icon.uasset b/Content/Textures/Icons/T_note_bluegreen_icon.uasset new file mode 100644 index 0000000..38377ff Binary files /dev/null and b/Content/Textures/Icons/T_note_bluegreen_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_bomb_icon.uasset b/Content/Textures/Icons/T_note_bomb_icon.uasset new file mode 100644 index 0000000..c3bb35a Binary files /dev/null and b/Content/Textures/Icons/T_note_bomb_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_green_icon.uasset b/Content/Textures/Icons/T_note_green_icon.uasset new file mode 100644 index 0000000..206212a Binary files /dev/null and b/Content/Textures/Icons/T_note_green_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_grey_icon.uasset b/Content/Textures/Icons/T_note_grey_icon.uasset new file mode 100644 index 0000000..b9b4bc5 Binary files /dev/null and b/Content/Textures/Icons/T_note_grey_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_mag_icon.uasset b/Content/Textures/Icons/T_note_mag_icon.uasset new file mode 100644 index 0000000..62685e8 Binary files /dev/null and b/Content/Textures/Icons/T_note_mag_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_red_icon.uasset b/Content/Textures/Icons/T_note_red_icon.uasset new file mode 100644 index 0000000..fbb44d1 Binary files /dev/null and b/Content/Textures/Icons/T_note_red_icon.uasset differ diff --git a/Content/Textures/Icons/T_note_red_icon_1.uasset b/Content/Textures/Icons/T_note_red_icon_1.uasset new file mode 100644 index 0000000..879f4a9 Binary files /dev/null and b/Content/Textures/Icons/T_note_red_icon_1.uasset differ diff --git a/Content/Textures/Icons/T_note_redmag_icon.uasset b/Content/Textures/Icons/T_note_redmag_icon.uasset new file mode 100644 index 0000000..a9d466d Binary files /dev/null and b/Content/Textures/Icons/T_note_redmag_icon.uasset differ diff --git a/Content/Textures/Icons/T_obstacle_icon.uasset b/Content/Textures/Icons/T_obstacle_icon.uasset new file mode 100644 index 0000000..6069330 Binary files /dev/null and b/Content/Textures/Icons/T_obstacle_icon.uasset differ diff --git a/Content/Textures/Icons/T_pause_icon.uasset b/Content/Textures/Icons/T_pause_icon.uasset new file mode 100644 index 0000000..17aba4e Binary files /dev/null and b/Content/Textures/Icons/T_pause_icon.uasset differ diff --git a/Content/Textures/Icons/T_play_icon.uasset b/Content/Textures/Icons/T_play_icon.uasset new file mode 100644 index 0000000..ab99651 Binary files /dev/null and b/Content/Textures/Icons/T_play_icon.uasset differ diff --git a/Content/Textures/Icons/T_selected_icon.uasset b/Content/Textures/Icons/T_selected_icon.uasset new file mode 100644 index 0000000..2fb6e33 Binary files /dev/null and b/Content/Textures/Icons/T_selected_icon.uasset differ diff --git a/Content/Textures/Icons/T_selected_icon_2.uasset b/Content/Textures/Icons/T_selected_icon_2.uasset new file mode 100644 index 0000000..a96814c Binary files /dev/null and b/Content/Textures/Icons/T_selected_icon_2.uasset differ diff --git a/Content/Textures/Icons/T_stop_icon.uasset b/Content/Textures/Icons/T_stop_icon.uasset new file mode 100644 index 0000000..ec18d4c Binary files /dev/null and b/Content/Textures/Icons/T_stop_icon.uasset differ diff --git a/Content/Textures/Icons/T_tool_move_icon.uasset b/Content/Textures/Icons/T_tool_move_icon.uasset new file mode 100644 index 0000000..712b648 Binary files /dev/null and b/Content/Textures/Icons/T_tool_move_icon.uasset differ diff --git a/Content/Textures/Icons/T_tool_rotate_icon.uasset b/Content/Textures/Icons/T_tool_rotate_icon.uasset new file mode 100644 index 0000000..44e43f5 Binary files /dev/null and b/Content/Textures/Icons/T_tool_rotate_icon.uasset differ diff --git a/Content/Textures/Icons/T_trash_icon.uasset b/Content/Textures/Icons/T_trash_icon.uasset new file mode 100644 index 0000000..b8fbaba Binary files /dev/null and b/Content/Textures/Icons/T_trash_icon.uasset differ diff --git a/Content/Textures/Icons/VisionBlockCat.uasset b/Content/Textures/Icons/VisionBlockCat.uasset new file mode 100644 index 0000000..be90bcc Binary files /dev/null and b/Content/Textures/Icons/VisionBlockCat.uasset differ diff --git a/Content/Textures/Icons/bigcat.uasset b/Content/Textures/Icons/bigcat.uasset new file mode 100644 index 0000000..fa84f4e Binary files /dev/null and b/Content/Textures/Icons/bigcat.uasset differ diff --git a/Content/Textures/Icons/bongocat.uasset b/Content/Textures/Icons/bongocat.uasset new file mode 100644 index 0000000..82ec892 Binary files /dev/null and b/Content/Textures/Icons/bongocat.uasset differ diff --git a/Content/Textures/Icons/favorites.uasset b/Content/Textures/Icons/favorites.uasset new file mode 100644 index 0000000..ce1705d Binary files /dev/null and b/Content/Textures/Icons/favorites.uasset differ diff --git a/Content/Textures/Icons/mirror.uasset b/Content/Textures/Icons/mirror.uasset new file mode 100644 index 0000000..fb6d384 Binary files /dev/null and b/Content/Textures/Icons/mirror.uasset differ diff --git a/Content/Textures/Icons/selector_2.uasset b/Content/Textures/Icons/selector_2.uasset new file mode 100644 index 0000000..b6334ff Binary files /dev/null and b/Content/Textures/Icons/selector_2.uasset differ diff --git a/Content/Textures/Icons/visionblock1.uasset b/Content/Textures/Icons/visionblock1.uasset new file mode 100644 index 0000000..406f49d Binary files /dev/null and b/Content/Textures/Icons/visionblock1.uasset differ diff --git a/Content/Textures/Icons/visionblock2.uasset b/Content/Textures/Icons/visionblock2.uasset new file mode 100644 index 0000000..b9a4f61 Binary files /dev/null and b/Content/Textures/Icons/visionblock2.uasset differ diff --git a/Content/Textures/Icons/visionblock3.uasset b/Content/Textures/Icons/visionblock3.uasset new file mode 100644 index 0000000..eb3f67e Binary files /dev/null and b/Content/Textures/Icons/visionblock3.uasset differ diff --git a/Content/Textures/Icons/visionblockcatfull.uasset b/Content/Textures/Icons/visionblockcatfull.uasset new file mode 100644 index 0000000..10ab86e Binary files /dev/null and b/Content/Textures/Icons/visionblockcatfull.uasset differ diff --git a/Content/Textures/T_DisplacementNoise.uasset b/Content/Textures/T_DisplacementNoise.uasset new file mode 100644 index 0000000..69e05dc Binary files /dev/null and b/Content/Textures/T_DisplacementNoise.uasset differ diff --git a/Content/Textures/T_Spectrum_gradient.uasset b/Content/Textures/T_Spectrum_gradient.uasset new file mode 100644 index 0000000..a92fe9e Binary files /dev/null and b/Content/Textures/T_Spectrum_gradient.uasset differ diff --git a/Content/Textures/T_editor_grid.uasset b/Content/Textures/T_editor_grid.uasset new file mode 100644 index 0000000..cc9a200 Binary files /dev/null and b/Content/Textures/T_editor_grid.uasset differ diff --git a/Content/Textures/T_event_block.uasset b/Content/Textures/T_event_block.uasset new file mode 100644 index 0000000..fcbd787 Binary files /dev/null and b/Content/Textures/T_event_block.uasset differ diff --git a/Content/Textures/T_water_normal.uasset b/Content/Textures/T_water_normal.uasset new file mode 100644 index 0000000..6c0e2ba Binary files /dev/null and b/Content/Textures/T_water_normal.uasset differ diff --git a/Content/Textures/WaveFormTarget.uasset b/Content/Textures/WaveFormTarget.uasset new file mode 100644 index 0000000..713cbca Binary files /dev/null and b/Content/Textures/WaveFormTarget.uasset differ diff --git a/Content/Textures/image1.uasset b/Content/Textures/image1.uasset new file mode 100644 index 0000000..9281069 Binary files /dev/null and b/Content/Textures/image1.uasset differ diff --git a/MediocreMapper.png b/MediocreMapper.png new file mode 100644 index 0000000..7170ae2 Binary files /dev/null and b/MediocreMapper.png differ diff --git a/MediocreMapper.uproject b/MediocreMapper.uproject new file mode 100644 index 0000000..514ee1a --- /dev/null +++ b/MediocreMapper.uproject @@ -0,0 +1,284 @@ +{ + "FileVersion": 3, + "EngineAssociation": "4.19", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "MediocreMapper", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine", + "ProceduralMeshComponent" + ] + } + ], + "Plugins": [ + { + "Name": "VaRestPlugin", + "Enabled": true, + "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/e47be161e7a24e928560290abd5dcc4f" + }, + { + "Name": "VictoryBPLibrary", + "Enabled": true, + "MarketplaceURL": "http://www.ue4code.com" + }, + { + "Name": "Paper2D", + "Enabled": false + }, + { + "Name": "OnlineSubsystemGooglePlay", + "Enabled": false, + "SupportedTargetPlatforms": [ + "Android" + ] + }, + { + "Name": "AndroidPermission", + "Enabled": false + }, + { + "Name": "AppleARKit", + "Enabled": false + }, + { + "Name": "LocationServicesBPLibrary", + "Enabled": false + }, + { + "Name": "AndroidDeviceProfileSelector", + "Enabled": false + }, + { + "Name": "ExampleDeviceProfileSelector", + "Enabled": false + }, + { + "Name": "IOSDeviceProfileSelector", + "Enabled": false + }, + { + "Name": "LinuxDeviceProfileSelector", + "Enabled": false + }, + { + "Name": "CharacterAI", + "Enabled": false + }, + { + "Name": "ArchVisCharacter", + "Enabled": false + }, + { + "Name": "AlembicImporter", + "Enabled": false + }, + { + "Name": "AndroidMedia", + "Enabled": false + }, + { + "Name": "AvfMedia", + "Enabled": false + }, + { + "Name": "ImgMedia", + "Enabled": false + }, + { + "Name": "TcpMessaging", + "Enabled": false + }, + { + "Name": "UdpMessaging", + "Enabled": false + }, + { + "Name": "HTML5Networking", + "Enabled": false + }, + { + "Name": "MobileLauncherProfileWizard", + "Enabled": false + }, + { + "Name": "MobilePatchingUtils", + "Enabled": false + }, + { + "Name": "AppleMoviePlayer", + "Enabled": false + }, + { + "Name": "AndroidMoviePlayer", + "Enabled": false + }, + { + "Name": "GoogleCloudMessaging", + "Enabled": false + }, + { + "Name": "OnlineSubsystemIOS", + "Enabled": false, + "SupportedTargetPlatforms": [ + "IOS", + "TVOS" + ] + }, + { + "Name": "OnlineSubsystemNull", + "Enabled": false + }, + { + "Name": "OnlineSubsystemUtils", + "Enabled": false + }, + { + "Name": "OnlineSubsystem", + "Enabled": false + }, + { + "Name": "PhysXVehicles", + "Enabled": false + }, + { + "Name": "XCodeSourceCodeAccess", + "Enabled": false + }, + { + "Name": "NullSourceCodeAccess", + "Enabled": false + }, + { + "Name": "KDevelopSourceCodeAccess", + "Enabled": false + }, + { + "Name": "CodeLiteSourceCodeAccess", + "Enabled": false + }, + { + "Name": "CLionSourceCodeAccess", + "Enabled": false + }, + { + "Name": "CableComponent", + "Enabled": false + }, + { + "Name": "CustomMeshComponent", + "Enabled": false + }, + { + "Name": "LightPropagationVolume", + "Enabled": false + }, + { + "Name": "SteamVR", + "Enabled": false + }, + { + "Name": "GitSourceControl", + "Enabled": false + }, + { + "Name": "PerforceSourceControl", + "Enabled": false + }, + { + "Name": "SubversionSourceControl", + "Enabled": false + }, + { + "Name": "DatasmithContent", + "Enabled": false + }, + { + "Name": "OculusVR", + "Enabled": false + }, + { + "Name": "ActorSequence", + "Enabled": false + }, + { + "Name": "GameplayTagsEditor", + "Enabled": false + }, + { + "Name": "AudioCapture", + "Enabled": false + }, + { + "Name": "CryptoKeys", + "Enabled": false + }, + { + "Name": "DataValidation", + "Enabled": false + }, + { + "Name": "FacialAnimation", + "Enabled": false + }, + { + "Name": "ImmediatePhysics", + "Enabled": false + }, + { + "Name": "LevelSequenceEditor", + "Enabled": false + }, + { + "Name": "MatineeToLevelSequence", + "Enabled": false + }, + { + "Name": "MediaCompositing", + "Enabled": false + }, + { + "Name": "MediaPlayerEditor", + "Enabled": false + }, + { + "Name": "NUTUnrealEngine4", + "Enabled": false + }, + { + "Name": "NetcodeUnitTest", + "Enabled": false + }, + { + "Name": "RuntimePhysXCooking", + "Enabled": false + }, + { + "Name": "SpeedTreeImporter", + "Enabled": false + }, + { + "Name": "UObjectPlugin", + "Enabled": false + }, + { + "Name": "WindowsMoviePlayer", + "Enabled": false + }, + { + "Name": "WmfMedia", + "Enabled": false + }, + { + "Name": "LowEntryExtStdLib", + "Enabled": true, + "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/846c2ad08f164f45b0335ecebf85361e" + } + ], + "TargetPlatforms": [ + "WindowsNoEditor" + ] +} \ No newline at end of file diff --git a/Plugins/VictoryPlugin/.gitignore b/Plugins/VictoryPlugin/.gitignore new file mode 100644 index 0000000..15bf192 --- /dev/null +++ b/Plugins/VictoryPlugin/.gitignore @@ -0,0 +1,2 @@ +/Intermediate +/Binaries diff --git a/Plugins/VictoryPlugin/Resources/Icon128.png b/Plugins/VictoryPlugin/Resources/Icon128.png new file mode 100644 index 0000000..155480a Binary files /dev/null and b/Plugins/VictoryPlugin/Resources/Icon128.png differ diff --git a/Plugins/VictoryPlugin/Resources/Thumbs.db b/Plugins/VictoryPlugin/Resources/Thumbs.db new file mode 100644 index 0000000..c37cb4e Binary files /dev/null and b/Plugins/VictoryPlugin/Resources/Thumbs.db differ diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/TKMathFunctionLibrary.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/TKMathFunctionLibrary.cpp new file mode 100644 index 0000000..3c5bc22 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/TKMathFunctionLibrary.cpp @@ -0,0 +1,429 @@ +/* + By TK-Master +*/ +#include "VictoryBPLibraryPrivatePCH.h" + +#include "TKMathFunctionLibrary.h" + +#include "StaticMeshResources.h" + +//UTKMathFunctionLibrary + +float UTKMathFunctionLibrary::GetConsoleVariableFloat(FString VariableName) +{ + const auto CVar = IConsoleManager::Get().FindTConsoleVariableDataFloat(*VariableName); + + if (CVar) + { + return CVar->GetValueOnGameThread(); + //return CVar->GetValueOnAnyThread(); + } + + return 0.f; +} + +int32 UTKMathFunctionLibrary::GetConsoleVariableInt(FString VariableName) +{ + const auto CVar = IConsoleManager::Get().FindTConsoleVariableDataInt(*VariableName); + + if (CVar) + { + return CVar->GetValueOnGameThread(); + //return CVar->GetValueOnAnyThread(); + } + return 0; +} + +float UTKMathFunctionLibrary::NegateFloat(float A) +{ + return -A; +} + +int32 UTKMathFunctionLibrary::NegateInt(int32 A) +{ + return -A; +} + +FVector2D UTKMathFunctionLibrary::NegateVector2D(FVector2D A) +{ + return -A; +} + +FVector UTKMathFunctionLibrary::SetVectorLength(FVector A, float size) +{ + return A.GetSafeNormal() * size; +} + +FVector UTKMathFunctionLibrary::VectorRadiansToDegrees(FVector RadVector) +{ + return FVector::RadiansToDegrees(RadVector); +} + +FVector UTKMathFunctionLibrary::VectorDegreesToRadians(FVector DegVector) +{ + return FVector::DegreesToRadians(DegVector); +} + +int32 UTKMathFunctionLibrary::RoundToLowerMultiple(int32 A, int32 Multiple, bool skipSelf) +{ + int32 result = (A / Multiple) * Multiple; + if (skipSelf && result == A && result != 0) + { + return ((A-1) / Multiple) * Multiple; + } + return result; +} + +int32 UTKMathFunctionLibrary::RoundToUpperMultiple(int32 A, int32 Multiple, bool skipSelf) +{ + if (skipSelf || FMath::Fmod(A, Multiple) != 0) + { + A = ((A + Multiple) / Multiple) * Multiple; + } + return A; +} + +int32 UTKMathFunctionLibrary::RoundToNearestMultiple(int32 A, int32 Multiple) +{ + return ((A + Multiple / 2) / Multiple) * Multiple; +} + +bool UTKMathFunctionLibrary::IsPowerOfTwo(int32 x) +{ + //return x && ((x&-x) == x); + return FMath::IsPowerOfTwo(x); +} + +bool UTKMathFunctionLibrary::IsMultipleOf(int32 A, int32 Multiple) +{ + return FMath::Fmod(A, Multiple) == 0; +} + +bool UTKMathFunctionLibrary::IsEvenNumber(float A) +{ + return FMath::Fmod(A, 2) == 0; +} + +FVector UTKMathFunctionLibrary::ClosestPointOnSphereToLine(FVector SphereOrigin, float SphereRadius, FVector LineOrigin, FVector LineDir) +{ + static FVector OutClosestPoint; + FMath::SphereDistToLine(SphereOrigin, SphereRadius, LineOrigin, LineDir.GetSafeNormal(), OutClosestPoint); + return OutClosestPoint; +} + +FVector UTKMathFunctionLibrary::ClosestPointOnLineSeqment(FVector Point, FVector LineStart, FVector LineEnd) +{ + return FMath::ClosestPointOnLine(LineStart, LineEnd, Point); +} + +bool UTKMathFunctionLibrary::IsPointInsideBox(FVector Point, FVector BoxOrigin, FVector BoxExtent) +{ + FBox Box = FBox::BuildAABB(BoxOrigin, BoxExtent); + return FMath::PointBoxIntersection(Point, Box); +} + +bool UTKMathFunctionLibrary::SphereBoxIntersection(FVector SphereOrigin, float SphereRadius, FVector BoxOrigin, FVector BoxExtent) +{ + FBox Box = FBox::BuildAABB(BoxOrigin, BoxExtent); + return FMath::SphereAABBIntersection(SphereOrigin, FMath::Square(SphereRadius), Box); +} + +bool UTKMathFunctionLibrary::IsLineInsideSphere(FVector LineStart, FVector LineDir, float LineLength, FVector SphereOrigin, float SphereRadius) +{ + return FMath::LineSphereIntersection(LineStart, LineDir, LineLength, SphereOrigin, SphereRadius); +} + +bool UTKMathFunctionLibrary::LineExtentBoxIntersection(FBox inBox, FVector Start, FVector End, FVector Extent, FVector& HitLocation, FVector& HitNormal, float& HitTime) +{ + return FMath::LineExtentBoxIntersection(inBox, Start, End, Extent, HitLocation, HitNormal, HitTime); +} + +float UTKMathFunctionLibrary::SignedDistancePlanePoint(FVector planeNormal, FVector planePoint, FVector point) +{ + return FVector::DotProduct(planeNormal, (point - planePoint)); +} + +FVector UTKMathFunctionLibrary::ProjectPointOnLine(FVector LineOrigin, FVector LineDirection, FVector Point) +{ + //FVector linePointToPoint = point - linePoint; + //float t = FVector::DotProduct(linePointToPoint, lineDir); + //return linePoint + lineDir * t; + + //FVector closestPoint; + //OutDistance = FMath::PointDistToLine(point, lineDir, linePoint, closestPoint); + //return closestPoint; + + FVector SafeDir = LineDirection.GetSafeNormal(); + return LineOrigin + (SafeDir * ((Point - LineOrigin) | SafeDir)); +} + +void UTKMathFunctionLibrary::ClosestPointsOfLineSegments(FVector Line1Start, FVector Line1End, FVector Line2Start, FVector Line2End, FVector& LinePoint1, FVector& LinePoint2) +{ + FMath::SegmentDistToSegmentSafe(Line1Start, Line1End, Line2Start, Line2End, LinePoint1, LinePoint2); +} + +bool UTKMathFunctionLibrary::LineToLineIntersection(FVector& IntersectionPoint, FVector LinePoint1, FVector LineDir1, FVector LinePoint2, FVector LineDir2) +{ + //Are lines coplanar? + if (!FVector::Coplanar(LinePoint1, LineDir1, LinePoint2, LineDir2, DELTA)) + { + return false; + } + + FVector LineDir3 = LinePoint2 - LinePoint1; + FVector CrossDir1And2 = FVector::CrossProduct(LineDir1, LineDir2); + FVector CrossDir3And2 = FVector::CrossProduct(LineDir3, LineDir2); + + float s = FVector::DotProduct(CrossDir3And2, CrossDir1And2) / CrossDir1And2.SizeSquared(); + + if (s > 1.0f || s < 0.0f) + { + return false; + } + else + { + IntersectionPoint = LinePoint1 + (LineDir1 * s); + return true; + } +} + +bool UTKMathFunctionLibrary::ClosestPointsOnTwoLines(FVector& closestPointLine1, FVector& closestPointLine2, FVector linePoint1, FVector lineVec1, FVector linePoint2, FVector lineVec2) +{ + float a = FVector::DotProduct(lineVec1, lineVec1); + float b = FVector::DotProduct(lineVec1, lineVec2); + float e = FVector::DotProduct(lineVec2, lineVec2); + + float d = a*e - b*b; + + //lines are not parallel + if (d != 0.0f) + { + FVector r = linePoint1 - linePoint2; + float c = FVector::DotProduct(lineVec1, r); + float f = FVector::DotProduct(lineVec2, r); + + float s = (b*f - c*e) / d; + float t = (a*f - c*b) / d; + + closestPointLine1 = linePoint1 + lineVec1 * s; + closestPointLine2 = linePoint2 + lineVec2 * t; + + return true; + } + else + { + return false; + } +} + +int32 UTKMathFunctionLibrary::PointOnWhichSideOfLineSegment(FVector linePoint1, FVector linePoint2, FVector point) +{ + FVector lineVec = linePoint2 - linePoint1; + FVector pointVec = point - linePoint1; + + float dot = FVector::DotProduct(pointVec, lineVec); + + //point is on side of linePoint2, compared to linePoint1 + if (dot > 0) + { + //point is on the line segment + if (pointVec.Size() <= lineVec.Size()) + { + return 0; + } + + //point is not on the line segment and it is on the side of linePoint2 + else + { + return 2; + } + } + + //Point is not on side of linePoint2, compared to linePoint1. + //Point is not on the line segment and it is on the side of linePoint1. + else + { + return 1; + } +} + +bool UTKMathFunctionLibrary::AreLineSegmentsCrossing(FVector pointA1, FVector pointA2, FVector pointB1, FVector pointB2) +{ + FVector closestPointA; + FVector closestPointB; + int32 sideA; + int32 sideB; + + FVector lineVecA = pointA2 - pointA1; + FVector lineVecB = pointB2 - pointB1; + + bool valid = ClosestPointsOnTwoLines(closestPointA, closestPointB, pointA1, lineVecA.GetSafeNormal(), pointB1, lineVecB.GetSafeNormal()); + + //lines are not parallel + if (valid) + { + sideA = PointOnWhichSideOfLineSegment(pointA1, pointA2, closestPointA); + sideB = PointOnWhichSideOfLineSegment(pointB1, pointB2, closestPointB); + + if ((sideA == 0) && (sideB == 0)) + { + return true; + } + else + { + return false; + } + } + + //lines are parallel + else + { + return false; + } +} + +FVector UTKMathFunctionLibrary::GridSnap(FVector A, float Grid) +{ + return A.GridSnap(Grid); +} + +void UTKMathFunctionLibrary::ConvertAnchorToAnchor(UObject* WorldContextObject, FAnchors CurrentAnchor, FMargin Offsets, FAnchors TargetAnchor, FMargin& ConvertedOffsets) +{ + if (CurrentAnchor.Minimum == TargetAnchor.Minimum && CurrentAnchor.Maximum == TargetAnchor.Maximum) + { + ConvertedOffsets = Offsets; + return; + } + + FVector2D View = FVector2D(1, 1); + UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); + if (World && World->IsGameWorld()) + { + if (UGameViewportClient* ViewportClient = World->GetGameViewport()) + { + ViewportClient->GetViewportSize(View); + } + } + + FMargin ZeroAnchorOffsets = Offsets; + //Convert to 0,0 anchor first. + if (CurrentAnchor.Minimum != FVector2D(0, 0) || CurrentAnchor.Maximum != FVector2D(0, 0)) + { + ZeroAnchorOffsets.Left = View.X * CurrentAnchor.Minimum.X + Offsets.Left; + ZeroAnchorOffsets.Top = View.Y * CurrentAnchor.Minimum.Y + Offsets.Top; + + if (CurrentAnchor.Minimum.X != CurrentAnchor.Maximum.X) + { + ZeroAnchorOffsets.Right = View.X * CurrentAnchor.Maximum.X - (Offsets.Right + Offsets.Left); + } + if (CurrentAnchor.Minimum.Y != CurrentAnchor.Maximum.Y) + { + ZeroAnchorOffsets.Bottom = View.Y * CurrentAnchor.Maximum.Y - (Offsets.Bottom + Offsets.Top); + } + + if (TargetAnchor.Minimum == FVector2D(0, 0) && TargetAnchor.Maximum == FVector2D(0, 0)) + { + ConvertedOffsets = ZeroAnchorOffsets; + return; + } + } + + //Convert 0,0 anchor offsets to target anchor offsets. + ConvertedOffsets.Left = (-View.X) * TargetAnchor.Minimum.X + ZeroAnchorOffsets.Left; + ConvertedOffsets.Top = (-View.Y) * TargetAnchor.Minimum.Y + ZeroAnchorOffsets.Top; + + ConvertedOffsets.Right = TargetAnchor.Minimum.X != TargetAnchor.Maximum.X ? View.X * TargetAnchor.Maximum.X - (ZeroAnchorOffsets.Left + ZeroAnchorOffsets.Right) : ZeroAnchorOffsets.Right; + ConvertedOffsets.Bottom = TargetAnchor.Minimum.Y != TargetAnchor.Maximum.Y ? View.Y * TargetAnchor.Maximum.Y - (ZeroAnchorOffsets.Top + ZeroAnchorOffsets.Bottom) : ZeroAnchorOffsets.Bottom; +} + + +float UTKMathFunctionLibrary::ConvertPhysicsLinearVelocity(FVector Velocity, TEnumAsByte SpeedUnit) +{ + if (Velocity.IsZero()) return 0.f; + + float unit = 0; + switch (SpeedUnit) + { + case CentimeterPerSecond: + unit = 1; + break; + case FootPerSecond: + unit = 0.03280839895013; + break; + case MeterPerSecond: + unit = 0.01; + break; + case MeterPerMinute: + unit = 0.6; + break; + case KilometerPerSecond: + unit = 0.00001; + case KilometerPerMinute: + unit = 0.0006; + break; + case KilometerPerHour: + unit = 0.036; + break; + case MilePerHour: + unit = 0.02236936292054; + break; + case Knot: + unit = 0.01943844492441; + break; + case Mach: + unit = 0.00002915451895044; + break; + case SpeedOfLight: + unit = 3.335640951982E-11; + break; + case YardPerSecond: + unit = 0.01093613298338; + break; + default: + break; + }; + + return Velocity.Size() * unit; +} + +FVector UTKMathFunctionLibrary::GetVelocityAtPoint(UPrimitiveComponent* Target, FVector Point, FName BoneName, bool DrawDebugInfo) +{ + + //FTransform Transform = Target->GetComponentTransform(); + //FVector LocalLinearVelocity = Transform.InverseTransformVectorNoScale(Target->GetPhysicsLinearVelocity()); + //FVector LocalAngularVelocity = Transform.InverseTransformVectorNoScale(Target->GetPhysicsAngularVelocity()); + //FVector ResultPointVelocity = LocalLinearVelocity + FVector::CrossProduct(FVector::DegreesToRadians(LocalAngularVelocity), Transform.InverseTransformVectorNoScale(Point - Target->GetCenterOfMass())); + + + if (!Target) return FVector::ZeroVector; + + //You can actually get it from the physx body instance instead. + FBodyInstance* BI = Target->GetBodyInstance(BoneName); + if (BI && BI->IsValidBodyInstance()) + { + FVector PointVelocity = BI->GetUnrealWorldVelocityAtPoint(Point); + + UWorld* TheWorld = Target->GetWorld(); + if (DrawDebugInfo && TheWorld) + { + FColor DefaultColor(255,200,0); + DrawDebugPoint(TheWorld, Point, 10, DefaultColor); + DrawDebugString(TheWorld, Point, FString::SanitizeFloat(PointVelocity.Size()), NULL, FColor::White, 0.0f); + } + + return PointVelocity; + } + return FVector::ZeroVector; +} + +void UTKMathFunctionLibrary::SetCenterOfMassOffset(UPrimitiveComponent* Target, FVector Offset, FName BoneName) +{ + if (!Target) return; + + FBodyInstance* BI = Target->GetBodyInstance(BoneName); + if (BI && BI->IsValidBodyInstance()) + { + BI->COMNudge = Offset; + BI->UpdateMassProperties(); + } +} diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp new file mode 100644 index 0000000..30d4f91 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp @@ -0,0 +1,5540 @@ +/* + By Rama +*/ + +#include "VictoryBPLibraryPrivatePCH.h" + +#include "VictoryBPFunctionLibrary.h" + +//Foreground Window check, clipboard copy/paste +#include "Runtime/ApplicationCore/Public/HAL/PlatformApplicationMisc.h" + +//FGPUDriverInfo GPU +#include "Runtime/Core/Public/GenericPlatform/GenericPlatformDriver.h" + +//MD5 Hash +#include "Runtime/Core/Public/Misc/SecureHash.h" + +#include "StaticMeshResources.h" + +#include "HeadMountedDisplay.h" + +#include "GenericTeamAgentInterface.h" + +//For PIE error messages +#include "MessageLog.h" +#define LOCTEXT_NAMESPACE "Fun BP Lib" + +//Use MessasgeLog like this: (see GameplayStatics.cpp +/* +#if WITH_EDITOR + FMessageLog("PIE").Error(FText::Format(LOCTEXT("SpawnObjectWrongClass", "SpawnObject wrong class: {0}'"), FText::FromString(GetNameSafe(*ObjectClass)))); +#endif // WITH_EDITOR +*/ + +// To be able to perform regex operatins on level stream info package name +#if WITH_EDITOR + #include "Runtime/Core/Public/Internationalization/Regex.h" +#endif + +//~~~ Image Wrapper ~~~ +#include "ImageUtils.h" +#include "IImageWrapper.h" +#include "IImageWrapperModule.h" +//~~~ Image Wrapper ~~~ + +//Body Setup +#include "PhysicsEngine/BodySetup.h" + +#include "DestructibleComponent.h" + + +//Apex issues, can add iOS here <3 Rama +#if PLATFORM_ANDROID || PLATFORM_HTML5 || PLATFORM_IOS +#ifdef WITH_APEX +#undef WITH_APEX +#endif +#define WITH_APEX 0 +#endif //APEX EXCLUSIONS + +//~~~ PhysX ~~~ +#include "PhysXIncludes.h" +#include "PhysXPublic.h" //For the ptou conversions + +//For Scene Locking using Epic's awesome helper macros like SCOPED_SCENE_READ_LOCK +#include "Runtime/Engine/Private/PhysicsEngine/PhysXSupport.h" +//~~~~~~~~~~~ + +#include "IXRTrackingSystem.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Saxon Rah Random Nodes +// Chrono and Random + +//Order Matters, +// has to be after PhysX includes to avoid isfinite name definition issues +#include +#include + +#include + +/* + ~~~ Rama File Operations CopyRight ~~~ + + If you use any of my file operation code below, + please credit me somewhere appropriate as "Rama" +*/ +template +class PlatformFileFunctor : public IPlatformFile::FDirectoryVisitor //GenericPlatformFile.h +{ +public: + + virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory) override + { + return Functor(FilenameOrDirectory, bIsDirectory); + } + + PlatformFileFunctor(FunctorType&& FunctorInstance) + : Functor(MoveTemp(FunctorInstance)) + { + } + +private: + FunctorType Functor; +}; + +template +PlatformFileFunctor MakeDirectoryVisitor(Functor&& FunctorInstance) +{ + return PlatformFileFunctor(MoveTemp(FunctorInstance)); +} + +static FDateTime GetFileTimeStamp(const FString& File) +{ + return FPlatformFileManager::Get().GetPlatformFile().GetTimeStamp(*File); +} +static void SetTimeStamp(const FString& File, const FDateTime& TimeStamp) +{ + FPlatformFileManager::Get().GetPlatformFile().SetTimeStamp(*File,TimeStamp); +} + +//Radial Result Struct +struct FFileStampSort +{ + FString* FileName; + FDateTime FileStamp; + + FFileStampSort(FString* IN_Name, FDateTime Stamp) + : FileName(IN_Name) + , FileStamp(Stamp) + {} +}; + +//For Array::Sort() +FORCEINLINE bool operator< (const FFileStampSort& Left, const FFileStampSort& Right) +{ + return Left.FileStamp < Right.FileStamp; +} + +//Written by Rama, please credit me if you use this code elsewhere +static bool GetFiles(const FString& FullPathOfBaseDir, TArray& FilenamesOut, bool Recursive=false, const FString& FilterByExtension = "") +{ + //Format File Extension, remove the "." if present + const FString FileExt = FilterByExtension.Replace(TEXT("."),TEXT("")).ToLower(); + + FString Str; + auto FilenamesVisitor = MakeDirectoryVisitor( + [&](const TCHAR* FilenameOrDirectory, bool bIsDirectory) + { + //Files + if ( ! bIsDirectory) + { + //Filter by Extension + if(FileExt != "") + { + Str = FPaths::GetCleanFilename(FilenameOrDirectory); + + //Filter by Extension + if(FPaths::GetExtension(Str).ToLower() == FileExt) + { + if(Recursive) + { + FilenamesOut.Push(FilenameOrDirectory); //need whole path for recursive + } + else + { + FilenamesOut.Push(Str); + } + } + } + + //Include All Filenames! + else + { + //Just the Directory + Str = FPaths::GetCleanFilename(FilenameOrDirectory); + + if(Recursive) + { + FilenamesOut.Push(FilenameOrDirectory); //need whole path for recursive + } + else + { + FilenamesOut.Push(Str); + } + } + } + return true; + } + ); + if(Recursive) + { + return FPlatformFileManager::Get().GetPlatformFile().IterateDirectoryRecursively(*FullPathOfBaseDir, FilenamesVisitor); + } + else + { + return FPlatformFileManager::Get().GetPlatformFile().IterateDirectory(*FullPathOfBaseDir, FilenamesVisitor); + } +} + +static bool FileExists(const FString& File) +{ + return FPlatformFileManager::Get().GetPlatformFile().FileExists(*File); +} +static bool FolderExists(const FString& Dir) +{ + return FPlatformFileManager::Get().GetPlatformFile().DirectoryExists(*Dir); +} +static bool RenameFile(const FString& Dest, const FString& Source) +{ + //Make sure file modification time gets updated! + SetTimeStamp(Source,FDateTime::Now()); + + return FPlatformFileManager::Get().GetPlatformFile().MoveFile(*Dest,*Source); +} + +//Create Directory, Creating Entire Structure as Necessary +// so if JoyLevels and Folder1 do not exist in JoyLevels/Folder1/Folder2 +// they will be created so that Folder2 can be created! + +//This is my solution for fact that trying to create a directory fails +// if its super directories do not exist +static bool VCreateDirectory(FString FolderToMake) //not const so split can be used, and does not damage input +{ + if(FolderExists(FolderToMake)) + { + return true; + } + + // Normalize all / and \ to TEXT("/") and remove any trailing TEXT("/") if the character before that is not a TEXT("/") or a colon + FPaths::NormalizeDirectoryName(FolderToMake); + + //Normalize removes the last "/", but is needed by algorithm + // Guarantees While loop will end in a timely fashion. + FolderToMake += "/"; + + FString Base; + FString Left; + FString Remaining; + + //Split off the Root + FolderToMake.Split(TEXT("/"),&Base,&Remaining); + Base += "/"; //add root text and Split Text to Base + + while(Remaining != "") + { + Remaining.Split(TEXT("/"),&Left,&Remaining); + + //Add to the Base + Base += Left + FString("/"); //add left and split text to Base + + //Create Incremental Directory Structure! + if ( ! FPlatformFileManager::Get().GetPlatformFile().CreateDirectory(*Base) && + ! FPlatformFileManager::Get().GetPlatformFile().DirectoryExists(*Base) ) + { + return false; + //~~~~~ + } + } + + return true; +} +/* + ~~~ Rama File Operations CopyRight ~~~ + + If you use any of my file operation code above, + please credit me somewhere appropriate as "Rama" +*/ + + + +////////////////////////////////////////////////////////////////////////// +// UVictoryBPFunctionLibrary + +UVictoryBPFunctionLibrary::UVictoryBPFunctionLibrary(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + +} + +//~~~~~~~~~~~~~~~~~~ +// Level Generation +//~~~~~~~~~~~~~~~~~~ + +/* + CHANGE RETURN TYPE TO KISMET (or remove the kismet part) + AND THEN GIVE OPTION TO ADD OR SET ROTATION OF A KISMET + + LoadedLevel->LevelTransform.SetRotation(FRotator(0, 120, 0).Quaternion()); + + //Trigger update! + GetWorld()->UpdateLevelStreaming(); + +*/ +ULevelStreaming* UVictoryBPFunctionLibrary::VictoryLoadLevelInstance( + UObject* WorldContextObject, + FString MapFolderOffOfContent, + FString LevelName, + int32 InstanceNumber, + FVector Location, FRotator Rotation,bool& Success +){ + Success = false; + if(!WorldContextObject) return nullptr; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return nullptr; + //~~~~~~~~~~~ + + //Full Name + FString FullName = "/Game/" + MapFolderOffOfContent + "/" + LevelName; + + FName LevelFName = FName(*FullName); + FString PackageFileName = FullName; + + ULevelStreamingKismet* StreamingLevel = NewObject(World, ULevelStreamingKismet::StaticClass(), NAME_None, RF_Transient, NULL); + + if(!StreamingLevel) + { + return nullptr; + } + + //Long Package Name + FString LongLevelPackageName = FPackageName::FilenameToLongPackageName(PackageFileName); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Here is where a unique name is chosen for the new level asset + // Ensure unique names to gain ability to have multiple instances of same level! + // <3 Rama + + //Create Unique Name based on BP-supplied instance value + FString UniqueLevelPackageName = LongLevelPackageName; + UniqueLevelPackageName += "_VictoryInstance_" + FString::FromInt(InstanceNumber); + + //Set! + StreamingLevel->SetWorldAssetByPackageName(FName(*UniqueLevelPackageName)); + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + if (World->IsPlayInEditor()) + { + FWorldContext WorldContext = GEngine->GetWorldContextFromWorldChecked(World); + StreamingLevel->RenameForPIE(WorldContext.PIEInstance); + } + + StreamingLevel->LevelColor = FColor::MakeRandomColor(); + StreamingLevel->bShouldBeLoaded = true; + StreamingLevel->bShouldBeVisible = true; + StreamingLevel->bShouldBlockOnLoad = false; + StreamingLevel->bInitiallyLoaded = true; + StreamingLevel->bInitiallyVisible = true; + + //Transform + StreamingLevel->LevelTransform = FTransform(Rotation,Location); + + StreamingLevel->PackageNameToLoad = LevelFName; + + if (!FPackageName::DoesPackageExist(StreamingLevel->PackageNameToLoad.ToString(), NULL, &PackageFileName)) + { + return nullptr; + } + + //~~~ + + //Actual map package to load + StreamingLevel->PackageNameToLoad = FName(*LongLevelPackageName); + + //~~~ + + // Add the new level to world. + World->StreamingLevels.Add(StreamingLevel); + + Success = true; + return StreamingLevel; + } + +//~~~~~~~ +// AI +//~~~~~~~ +EPathFollowingRequestResult::Type UVictoryBPFunctionLibrary::Victory_AI_MoveToWithFilter( + APawn* Pawn, + const FVector& Dest, + TSubclassOf FilterClass , + float AcceptanceRadius , + bool bProjectDestinationToNavigation , + bool bStopOnOverlap , + bool bCanStrafe +){ + if(!Pawn) + { + return EPathFollowingRequestResult::Failed; + } + + AAIController* AIControl = Cast(Pawn->GetController()); + if(!AIControl) + { + return EPathFollowingRequestResult::Failed; + } + + return AIControl->MoveToLocation( + Dest, + AcceptanceRadius, + bStopOnOverlap, //bStopOnOverlap + true, //bUsePathfinding + bProjectDestinationToNavigation, + bCanStrafe, //bCanStrafe + FilterClass //<~~~ + ); +} + +//~~~~~~ +//GPU +//~~~~~~ +void UVictoryBPFunctionLibrary::Victory_GetGPUInfo(FString& DeviceDescription, FString& Provider, FString& DriverVersion, FString& DriverDate ) +{ + FGPUDriverInfo GPUDriverInfo = FPlatformMisc::GetGPUDriverInfo(GRHIAdapterName); + + DeviceDescription = GPUDriverInfo.DeviceDescription; + Provider = GPUDriverInfo.ProviderName; + DriverVersion = GPUDriverInfo.UserDriverVersion; + DriverDate = GPUDriverInfo.DriverDate; +} + +//~~~~~~ +//Core +//~~~~~~ + +//~~~~~~ +//Physics +//~~~~~~ +float UVictoryBPFunctionLibrary::GetDistanceToCollision(UPrimitiveComponent* CollisionComponent, const FVector& Point, FVector& ClosestPointOnCollision) +{ + if(!CollisionComponent) return -1; + + return CollisionComponent->GetDistanceToCollision(Point,ClosestPointOnCollision); +} + +float UVictoryBPFunctionLibrary::GetDistanceBetweenComponentSurfaces(UPrimitiveComponent* CollisionComponent1, UPrimitiveComponent* CollisionComponent2, FVector& PointOnSurface1, FVector& PointOnSurface2) +{ + if(!CollisionComponent1 || !CollisionComponent2) return -1; + + //Closest Point on 2 to 1 + CollisionComponent2->GetDistanceToCollision(CollisionComponent1->GetComponentLocation(), PointOnSurface2); + + //Closest Point on 1 to closest point on surface of 2 + return CollisionComponent1->GetDistanceToCollision(PointOnSurface2, PointOnSurface1); +} + + + +void UVictoryBPFunctionLibrary::VictoryCreateProc(int32& ProcessId, FString FullPathOfProgramToRun,TArray CommandlineArgs,bool Detach,bool Hidden, int32 Priority, FString OptionalWorkingDirectory) +{ + //Please note ProcessId should really be uint32 but that is not supported by BP yet + + FString Args = ""; + if(CommandlineArgs.Num() > 1) + { + Args = CommandlineArgs[0]; + for(int32 v = 1; v < CommandlineArgs.Num(); v++) + { + Args += " " + CommandlineArgs[v]; + } + } + else if(CommandlineArgs.Num() > 0) + { + Args = CommandlineArgs[0]; + } + + uint32 NeedBPUINT32 = 0; + FProcHandle ProcHandle = FPlatformProcess::CreateProc( + *FullPathOfProgramToRun, + *Args, + Detach,//* @param bLaunchDetached if true, the new process will have its own window + false,//* @param bLaunchHidded if true, the new process will be minimized in the task bar + Hidden,//* @param bLaunchReallyHidden if true, the new process will not have a window or be in the task bar + &NeedBPUINT32, + Priority, + (OptionalWorkingDirectory != "") ? *OptionalWorkingDirectory : nullptr,//const TCHAR* OptionalWorkingDirectory, + nullptr + ); + + //Not sure what to do to expose UINT32 to BP + ProcessId = NeedBPUINT32; +} + +bool UVictoryBPFunctionLibrary::CompareMD5Hash(FString MD5HashFile1, FString MD5HashFile2 ) +{ + //Load Hash Files + TArray TheBinaryArray; + if (!FFileHelper::LoadFileToArray(TheBinaryArray, *MD5HashFile1)) + { + UE_LOG(LogTemp,Error,TEXT("First hash file invalid %s"), *MD5HashFile1); + return false; + //~~ + } + FMemoryReader FromBinary = FMemoryReader(TheBinaryArray, true); //true, free data after done + FMD5Hash FirstHash; + FromBinary << FirstHash; + + TheBinaryArray.Empty(); + if (!FFileHelper::LoadFileToArray(TheBinaryArray, *MD5HashFile2)) + { + UE_LOG(LogTemp,Error,TEXT("second hash file invalid %s"), *MD5HashFile2); + return false; + //~~ + } + + FMemoryReader FromBinarySecond = FMemoryReader(TheBinaryArray, true); //true, free data after done + FMD5Hash SecondHash; + FromBinarySecond << SecondHash; + + return FirstHash == SecondHash; +} +bool UVictoryBPFunctionLibrary::CreateMD5Hash(FString FileToHash, FString FileToStoreHashTo ) +{ + if(!FPlatformFileManager::Get().GetPlatformFile().FileExists(*FileToHash)) + { + UE_LOG(LogTemp,Error,TEXT("File to hash not found %d"), *FileToHash); + return false; + } + + int64 SizeOfFileToHash = FPlatformFileManager::Get().GetPlatformFile().FileSize(*FileToHash); + if(SizeOfFileToHash > 2 * 1000000000) + { + UE_LOG(LogTemp,Warning,TEXT("File is >2gb, hashing will be very slow %d"), SizeOfFileToHash); + } + + FMD5Hash FileHash = FMD5Hash::HashFile(*FileToHash); + + //write to file + FBufferArchive ToBinary; + ToBinary << FileHash; + + if (FFileHelper::SaveArrayToFile(ToBinary, * FileToStoreHashTo)) + { + // Free Binary Array + ToBinary.FlushCache(); + ToBinary.Empty(); + } + else + { + UE_LOG(LogTemp,Warning,TEXT("File hashed successfully but could not be saved to disk, file IO error %s"), *FileToHash); + return false; + } + + return true; +} + +bool UVictoryBPFunctionLibrary::VictoryPhysics_UpdateAngularDamping(UPrimitiveComponent* CompToUpdate, float NewAngularDamping) +{ + if(!CompToUpdate) return false; + + FBodyInstance* Body = CompToUpdate->GetBodyInstance(); + if(!Body) return false; + + //Deep safety check + if(!Body->IsValidBodyInstance()) return false; + + //Set! + Body->AngularDamping = NewAngularDamping; + + //~~~~~~~~~~~~~~~~~ + Body->UpdateDampingProperties(); + //~~~~~~~~~~~~~~~~~ + + return true; +} + +bool UVictoryBPFunctionLibrary::VictoryDestructible_DestroyChunk(UDestructibleComponent* DestructibleComp, int32 HitItem) +{ + #if WITH_APEX + if(!DestructibleComp) + { + return false; + } + + //Visibility + DestructibleComp->SetChunkVisible( HitItem, false ); + + //Collision + physx::PxShape** PShapes; + const physx::PxU32 PShapeCount = DestructibleComp->ApexDestructibleActor->getChunkPhysXShapes(PShapes, HitItem); + if (PShapeCount > 0) + { + PxFilterData PQueryFilterData,PSimFilterData; //null data + + for(uint32 ShapeIndex = 0; ShapeIndex < PShapeCount; ++ShapeIndex) + { + PxShape* Shape = PShapes[ShapeIndex]; + if(!Shape) continue; + + { + SCOPED_SCENE_WRITE_LOCK(Shape->getActor()->getScene()); + + Shape->setQueryFilterData(PQueryFilterData); //null data + Shape->setSimulationFilterData(PSimFilterData); //null data + Shape->setFlag(PxShapeFlag::eSCENE_QUERY_SHAPE, false); + Shape->setFlag(PxShapeFlag::eSIMULATION_SHAPE, false); + Shape->setFlag(PxShapeFlag::eVISUALIZATION, false); + } + } + } + return true; + #endif //WITH_APEX + + UE_LOG(LogTemp,Error,TEXT("UVictoryBPFunctionLibrary::VictoryDestructible_DestroyChunk ~ Current Platform does not support APEX")); + return false; +} + +static int32 GetChildBones(const FReferenceSkeleton& ReferenceSkeleton, int32 ParentBoneIndex, TArray & Children) +{ + Children.Empty(); + + const int32 NumBones = ReferenceSkeleton.GetNum(); + for(int32 ChildIndex=ParentBoneIndex+1; ChildIndex& ChildBoneNames) +{ + TArray BoneIndicies; + GetChildBones(SkeletalMeshComp->SkeletalMesh->RefSkeleton, ParentBoneIndex, BoneIndicies); + + if(BoneIndicies.Num() < 1) + { + //Stops the recursive skeleton search + return; + } + + for(const int32& BoneIndex : BoneIndicies) + { + FName ChildBoneName = SkeletalMeshComp->GetBoneName(BoneIndex); + ChildBoneNames.Add(ChildBoneName); + + //Recursion + GetChildBoneNames_Recursive(SkeletalMeshComp, BoneIndex,ChildBoneNames); + } +} + +int32 UVictoryBPFunctionLibrary::GetAllBoneNamesBelowBone( USkeletalMeshComponent* SkeletalMeshComp, FName StartingBoneName, TArray& BoneNames ) +{ + BoneNames.Empty(); + + if(!SkeletalMeshComp || !SkeletalMeshComp->SkeletalMesh) + { + return -1; + //~~~~ + } + + int32 StartingBoneIndex = SkeletalMeshComp->GetBoneIndex(StartingBoneName); + + //Recursive + GetChildBoneNames_Recursive(SkeletalMeshComp, StartingBoneIndex, BoneNames); + + return BoneNames.Num(); +} + + +//~~~~~~ +// File IO +//~~~~~~ +bool UVictoryBPFunctionLibrary::JoyFileIO_GetFiles(TArray& Files, FString RootFolderFullPath, FString Ext) +{ + if(RootFolderFullPath.Len() < 1) return false; + + FPaths::NormalizeDirectoryName(RootFolderFullPath); + + IFileManager& FileManager = IFileManager::Get(); + + if(!Ext.Contains(TEXT("*"))) + { + if(Ext == "") + { + Ext = "*.*"; + } + else + { + Ext = (Ext.Left(1) == ".") ? "*" + Ext : "*." + Ext; + } + } + + FString FinalPath = RootFolderFullPath + "/" + Ext; + + FileManager.FindFiles(Files, *FinalPath, true, false); + return true; +} +bool UVictoryBPFunctionLibrary::JoyFileIO_GetFilesInRootAndAllSubFolders(TArray& Files, FString RootFolderFullPath, FString Ext) +{ + if(RootFolderFullPath.Len() < 1) return false; + + FPaths::NormalizeDirectoryName(RootFolderFullPath); + + IFileManager& FileManager = IFileManager::Get(); + + if(!Ext.Contains(TEXT("*"))) + { + if(Ext == "") + { + Ext = "*.*"; + } + else + { + Ext = (Ext.Left(1) == ".") ? "*" + Ext : "*." + Ext; + } + } + + FileManager.FindFilesRecursive(Files, *RootFolderFullPath, *Ext, true, false); + return true; +} + +bool UVictoryBPFunctionLibrary::ScreenShots_Rename_Move_Most_Recent( + FString& OriginalFileName, + FString NewName, + FString NewAbsoluteFolderPath, + bool HighResolution +){ + OriginalFileName = "None"; + + //File Name given? + if(NewName.Len() <= 0) return false; + + //Normalize + FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath); + + //Ensure target directory exists, + // _or can be created!_ <3 Rama + if(!VCreateDirectory(NewAbsoluteFolderPath)) return false; + + FString ScreenShotsDir = VictoryPaths__ScreenShotsDir(); + + //Find all screenshots + TArray Files; //false = not recursive, not expecting subdirectories + bool Success = GetFiles(ScreenShotsDir, Files, false); + + if(!Success) + { + return false; + } + + //Filter + TArray ToRemove; //16 bytes each, more stable than ptrs though since RemoveSwap is involved + for(FString& Each : Files) + { + if(HighResolution) + { + //remove those that dont have it + if(Each.Left(4) != "High") + { + ToRemove.Add(Each); + } + } + else + { + //Remove those that have it! + if(Each.Left(4) == "High") + { + ToRemove.Add(Each); + } + } + } + + //Remove! + for(FString& Each : ToRemove) + { + Files.RemoveSwap(Each); //Fast remove! Does not preserve order + } + + //No files? + if(Files.Num() < 1) + { + return false; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Rama's Sort Files by Time Stamp Feature + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Sort the file names by time stamp + // This is my custom c++ struct to do this, + // combined with my operator< and UE4's + // TArray::Sort() function! + TArray FileSort; + for(FString& Each : Files) + { + FileSort.Add(FFileStampSort(&Each,GetFileTimeStamp(Each))); + + } + + //Sort all the file names by their Time Stamp! + FileSort.Sort(); + + //Biggest value = last entry + OriginalFileName = *FileSort.Last().FileName; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + //Generate new Full File Path! + FString NewFullFilePath = NewAbsoluteFolderPath + "/" + NewName + ".png"; + + //Move File! + return RenameFile(NewFullFilePath, ScreenShotsDir + "/" + OriginalFileName); +} + +void UVictoryBPFunctionLibrary::VictoryISM_GetAllVictoryISMActors(UObject* WorldContextObject, TArray& Out) +{ + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + Out.Empty(); + for(TActorIterator Itr(World); Itr; ++Itr) + { + Out.Add(*Itr); + } +} + +void UVictoryBPFunctionLibrary::VictoryISM_ConvertToVictoryISMActors( + UObject* WorldContextObject, + TSubclassOf ActorClass, + TArray& CreatedISMActors, + bool DestroyOriginalActors, + int32 MinCountToCreateISM +){ + //User Input Safety + if(MinCountToCreateISM < 1) MinCountToCreateISM = 1; //require for array access safety + + CreatedISMActors.Empty(); + + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + //I want one array of actors for each unique static mesh asset! -Rama + TMap< UStaticMesh*,TArray > VictoryISMMap; + + //Note the ActorClass filter on the Actor Iterator! -Rama + for (TActorIterator Itr(World, ActorClass); Itr; ++Itr) + { + //Get Static Mesh Component! + UStaticMeshComponent* Comp = Itr->FindComponentByClass(); + if(!Comp) continue; + if(!Comp->IsValidLowLevel()) continue; + //~~~~~~~~~ + + //Add Key if not present! + if(!VictoryISMMap.Contains(Comp->GetStaticMesh())) + { + VictoryISMMap.Add(Comp->GetStaticMesh()); + VictoryISMMap[Comp->GetStaticMesh()].Empty(); //ensure array is properly initialized + } + + //Add the actor! + VictoryISMMap[Comp->GetStaticMesh()].Add(*Itr); + } + + //For each Static Mesh Asset in the Victory ISM Map + for (TMap< UStaticMesh*,TArray >::TIterator It(VictoryISMMap); It; ++It) + { + //Get the Actor Array for this particular Static Mesh Asset! + TArray& ActorArray = It.Value(); + + //No entries? + if(ActorArray.Num() < MinCountToCreateISM) continue; + //~~~~~~~~~~~~~~~~~~ + + //Get the Root + UStaticMeshComponent* RootSMC = ActorArray[0]->FindComponentByClass(); + if(!RootSMC) continue; + //~~~~~~~~~~ + + //Gather transforms! + TArray WorldTransforms; + for(AActor* Each : ActorArray) + { + WorldTransforms.Add(Each->GetTransform()); + + //Destroy original? + if(DestroyOriginalActors) + { + Each->Destroy(); + } + } + + //Create Victory ISM + FActorSpawnParameters SpawnInfo; + //SpawnInfo.bNoCollisionFail = true; //always create! + SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + SpawnInfo.bDeferConstruction = false; + + AVictoryISM* NewISM = World->SpawnActor( + AVictoryISM::StaticClass(), + RootSMC->GetComponentLocation() , + RootSMC->GetComponentRotation(), + SpawnInfo + ); + + if(!NewISM) continue; + //~~~~~~~~~~ + + //Mesh + NewISM->Mesh->SetStaticMesh(RootSMC->GetStaticMesh()); + + //Materials + const int32 MatTotal = RootSMC->GetNumMaterials(); + for(int32 v = 0; v < MatTotal; v++) + { + NewISM->Mesh->SetMaterial(v,RootSMC->GetMaterial(v)); + } + + //Set Transforms! + for(const FTransform& Each : WorldTransforms) + { + NewISM->Mesh->AddInstanceWorldSpace(Each); + } + + //Add new ISM! + CreatedISMActors.Add(NewISM); + } + + //Clear memory + VictoryISMMap.Empty(); +} + + + +void UVictoryBPFunctionLibrary::SaveGameObject_GetAllSaveSlotFileNames(TArray& FileNames) +{ + FileNames.Empty(); + FString Path = VictoryPaths__SavedDir() + "SaveGames"; + GetFiles(Path,FileNames); //see top of this file, my own file IO code - Rama +} + +//~~~ Victory Paths ~~~ + +FString UVictoryBPFunctionLibrary::VictoryPaths__Win64Dir_BinaryLocation() +{ + return FString(FPlatformProcess::BaseDir()); +} + +FString UVictoryBPFunctionLibrary::VictoryPaths__WindowsNoEditorDir() +{ + return FPaths::ConvertRelativePathToFull(FPaths::RootDir()); +} + +FString UVictoryBPFunctionLibrary::VictoryPaths__GameRootDirectory() +{ + return FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); +} + +FString UVictoryBPFunctionLibrary::VictoryPaths__SavedDir() +{ + return FPaths::ConvertRelativePathToFull(FPaths::ProjectSavedDir()); +} +FString UVictoryBPFunctionLibrary::VictoryPaths__ConfigDir() +{ + return FPaths::ConvertRelativePathToFull(FPaths::ProjectConfigDir()); +} + +FString UVictoryBPFunctionLibrary::VictoryPaths__ScreenShotsDir() +{ + return FPaths::ConvertRelativePathToFull(FPaths::ScreenShotDir()); +} + +FString UVictoryBPFunctionLibrary::VictoryPaths__LogsDir() +{ + return FPaths::ConvertRelativePathToFull(FPaths::ProjectLogDir()); +} + + +//~~~~~~~~~~~~~~~~~ + + +FVector2D UVictoryBPFunctionLibrary::Vector2DInterpTo(FVector2D Current, FVector2D Target, float DeltaTime, float InterpSpeed) +{ + return FMath::Vector2DInterpTo( Current, Target, DeltaTime, InterpSpeed ); +} +FVector2D UVictoryBPFunctionLibrary::Vector2DInterpTo_Constant(FVector2D Current, FVector2D Target, float DeltaTime, float InterpSpeed) +{ + return FMath::Vector2DInterpConstantTo( Current, Target, DeltaTime, InterpSpeed ); +} + +float UVictoryBPFunctionLibrary::MapRangeClamped(float Value, float InRangeA, float InRangeB, float OutRangeA, float OutRangeB) +{ + return FMath::GetMappedRangeValueClamped(FVector2D(InRangeA,InRangeB),FVector2D(OutRangeA,OutRangeB),Value); +} + +FVictoryInput UVictoryBPFunctionLibrary::VictoryGetVictoryInput(const FKeyEvent& KeyEvent) +{ + FVictoryInput VInput; + + VInput.Key = KeyEvent.GetKey(); + VInput.KeyAsString = VInput.Key.GetDisplayName().ToString(); + + VInput.bAlt = KeyEvent.IsAltDown(); + VInput.bCtrl = KeyEvent.IsControlDown(); + VInput.bShift = KeyEvent.IsShiftDown(); + VInput.bCmd = KeyEvent.IsCommandDown(); + + return VInput; +} +FVictoryInputAxis UVictoryBPFunctionLibrary::VictoryGetVictoryInputAxis(const FKeyEvent& KeyEvent) +{ + FVictoryInputAxis VInput; + + VInput.Key = KeyEvent.GetKey(); + VInput.KeyAsString = VInput.Key.GetDisplayName().ToString(); + + VInput.Scale = 1; + + return VInput; +} + +void UVictoryBPFunctionLibrary::VictoryGetAllAxisKeyBindings(TArray& Bindings) +{ + Bindings.Empty(); + + const UInputSettings* Settings = GetDefault(); + if(!Settings) return; + + const TArray& Axi = Settings->AxisMappings; + + for(const FInputAxisKeyMapping& Each : Axi) + { + Bindings.Add(FVictoryInputAxis(Each)); + } +} +void UVictoryBPFunctionLibrary::VictoryRemoveAxisKeyBind(FVictoryInputAxis ToRemove) +{ + //GetMutableDefault + UInputSettings* Settings = GetMutableDefault(); + if(!Settings) return; + + TArray& Axi = Settings->AxisMappings; + + bool Found = false; + for(int32 v = 0; v < Axi.Num(); v++) + { + if(Axi[v].Key == ToRemove.Key) + { + Found = true; + Axi.RemoveAt(v); + v = 0; + continue; + } + } + + if(Found) + { + //SAVES TO DISK + Settings->SaveKeyMappings(); + + //REBUILDS INPUT, creates modified config in Saved/Config/Windows/Input.ini + for (TObjectIterator It; It; ++It) + { + It->ForceRebuildingKeyMaps(true); + } + } +} + +void UVictoryBPFunctionLibrary::VictoryGetAllActionKeyBindings(TArray& Bindings) +{ + Bindings.Empty(); + + const UInputSettings* Settings = GetDefault(); + if(!Settings) return; + + const TArray& Actions = Settings->ActionMappings; + + for(const FInputActionKeyMapping& Each : Actions) + { + Bindings.Add(FVictoryInput(Each)); + } +} + +void UVictoryBPFunctionLibrary::VictoryRemoveActionKeyBind(FVictoryInput ToRemove) +{ + //GetMutableDefault + UInputSettings* Settings = GetMutableDefault(); + if(!Settings) return; + + TArray& Actions = Settings->ActionMappings; + + bool Found = false; + for(int32 v = 0; v < Actions.Num(); v++) + { + if(Actions[v].Key == ToRemove.Key) + { + Found = true; + Actions.RemoveAt(v); + v = 0; + continue; + } + } + + if(Found) + { + //SAVES TO DISK + Settings->SaveKeyMappings(); + + //REBUILDS INPUT, creates modified config in Saved/Config/Windows/Input.ini + for (TObjectIterator It; It; ++It) + { + It->ForceRebuildingKeyMaps(true); + } + } +} + +void UVictoryBPFunctionLibrary::VictoryGetAllAxisAndActionMappingsForKey(FKey Key, TArray& ActionBindings, TArray& AxisBindings) +{ + ActionBindings.Empty(); + AxisBindings.Empty(); + + const UInputSettings* Settings = GetDefault(); + if(!Settings) return; + + const TArray& Actions = Settings->ActionMappings; + + for(const FInputActionKeyMapping& Each : Actions) + { + if(Each.Key == Key) + { + ActionBindings.Add(FVictoryInput(Each)); + } + } + + const TArray& Axi = Settings->AxisMappings; + + for(const FInputAxisKeyMapping& Each : Axi) + { + if(Each.Key == Key) + { + AxisBindings.Add(FVictoryInputAxis(Each)); + } + } +} +bool UVictoryBPFunctionLibrary::VictoryReBindAxisKey(FVictoryInputAxis Original, FVictoryInputAxis NewBinding) +{ + UInputSettings* Settings = const_cast(GetDefault()); + if(!Settings) return false; + + TArray& Axi = Settings->AxisMappings; + + //~~~ + + bool Found = false; + for(FInputAxisKeyMapping& Each : Axi) + { + //Search by original + if(Each.AxisName.ToString() == Original.AxisName && + Each.Key == Original.Key + ){ + //Update to new! + UVictoryBPFunctionLibrary::UpdateAxisMapping(Each,NewBinding); + Found = true; + break; + } + } + + if(Found) + { + //SAVES TO DISK + const_cast(Settings)->SaveKeyMappings(); + + //REBUILDS INPUT, creates modified config in Saved/Config/Windows/Input.ini + for (TObjectIterator It; It; ++It) + { + It->ForceRebuildingKeyMaps(true); + } + } + return Found; +} + +bool UVictoryBPFunctionLibrary::VictoryReBindActionKey(FVictoryInput Original, FVictoryInput NewBinding) +{ + UInputSettings* Settings = const_cast(GetDefault()); + if(!Settings) return false; + + TArray& Actions = Settings->ActionMappings; + + //~~~ + + bool Found = false; + for(FInputActionKeyMapping& Each : Actions) + { + //Search by original + if(Each.ActionName.ToString() == Original.ActionName && + Each.Key == Original.Key + ){ + //Update to new! + UVictoryBPFunctionLibrary::UpdateActionMapping(Each,NewBinding); + Found = true; + break; + } + } + + if(Found) + { + //SAVES TO DISK + const_cast(Settings)->SaveKeyMappings(); + + //REBUILDS INPUT, creates modified config in Saved/Config/Windows/Input.ini + for (TObjectIterator It; It; ++It) + { + It->ForceRebuildingKeyMaps(true); + } + } + return Found; +} + +void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass, TArray& FoundWidgets,bool TopLevelOnly) +{ + //Prevent possibility of an ever-growing array if user uses this in a loop + FoundWidgets.Empty(); + //~~~~~~~~~~~~ + + if(!WidgetClass) return; + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + for(TObjectIterator Itr; Itr; ++Itr) + { + if(Itr->GetWorld() != World) continue; + //~~~~~~~~~~~~~~~~~~~~~ + + if( ! Itr->IsA(WidgetClass)) continue; + //~~~~~~~~~~~~~~~~~~~ + + //Top Level? + if(TopLevelOnly) + { + //only add top level widgets + if(Itr->IsInViewport()) + { + FoundWidgets.Add(*Itr); + } + } + else + { + //add all internal widgets + FoundWidgets.Add(*Itr); + } + } +} +void UVictoryBPFunctionLibrary::RemoveAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass) +{ + if(!WidgetClass) return; + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + for(TObjectIterator Itr; Itr; ++Itr) + { + if(Itr->GetWorld() != World) continue; + //~~~~~~~~~~~~~~~~~~~~~ + + if( ! Itr->IsA(WidgetClass)) continue; + //~~~~~~~~~~~~~~~~~~~ + + //only add top level widgets + if(Itr->IsInViewport()) //IsInViewport in 4.6 + { + Itr->RemoveFromViewport(); + } + } +} + +bool UVictoryBPFunctionLibrary::IsWidgetOfClassInViewport(UObject* WorldContextObject, TSubclassOf WidgetClass) +{ + if(!WidgetClass) return false; + if(!WorldContextObject) return false; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return false; + //~~~~~~~~~~~ + + for(TObjectIterator Itr; Itr; ++Itr) + { + if(Itr->GetWorld() != World) continue; + //~~~~~~~~~~~~~~~~~~~~~ + + if( ! Itr->IsA(WidgetClass)) continue; + //~~~~~~~~~~~~~~~~~~~ + + if(Itr->GetIsVisible()) //IsInViewport in 4.6 + { + return true; + } + } + + return false; +} + +void UVictoryBPFunctionLibrary::ServerTravel(UObject* WorldContextObject, FString MapName,bool bNotifyPlayers) +{ + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + World->ServerTravel(MapName,false,bNotifyPlayers); //abs //notify players +} +APlayerStart* UVictoryBPFunctionLibrary::GetPlayerStart(UObject* WorldContextObject,FString PlayerStartName) +{ + if(!WorldContextObject) return nullptr; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return nullptr; + //~~~~~~~~~~~ + + for(TActorIterator Itr(World); Itr; ++Itr) + { + if(Itr->GetName() == PlayerStartName) + { + return *Itr; + } + } + return nullptr; +} + +bool UVictoryBPFunctionLibrary::VictorySoundVolumeChange(USoundClass* SoundClassObject, float NewVolume) + { + if(!SoundClassObject) + { + return false; + } + + SoundClassObject->Properties.Volume = NewVolume; + return true; + + /* + FAudioDevice* Device = GEngine->GetAudioDevice(); + if (!Device || !SoundClassObject) + { + return false; + } + + bool bFound = Device->SoundClasses.Contains(SoundClassObject); + if(bFound) + { + Device->SetClassVolume(SoundClassObject, NewVolume); + return true; + } + return false; + */ + + /* + bool SetBaseSoundMix( class USoundMix* SoundMix ); + + */ + } +float UVictoryBPFunctionLibrary::VictoryGetSoundVolume(USoundClass* SoundClassObject) +{ + if (!SoundClassObject) + { + return -1; + } + return SoundClassObject->Properties.Volume; + /* + FAudioDevice* Device = GEngine->GetMainAudioDevice(); + if (!Device || !SoundClassObject) + { + return -1; + } + + FSoundClassProperties* Props = Device->GetSoundClassCurrentProperties(SoundClassObject); + if(!Props) return -1; + return Props->Volume; + */ +} + +void UVictoryBPFunctionLibrary::VictoryIntPlusEquals(UPARAM(ref) int32& Int, int32 Add, int32& IntOut) +{ + Int += Add; + IntOut = Int; +} +void UVictoryBPFunctionLibrary::VictoryIntMinusEquals(UPARAM(ref) int32& Int, int32 Sub, int32& IntOut) +{ + Int -= Sub; + IntOut = Int; +} + +void UVictoryBPFunctionLibrary::VictoryFloatPlusEquals(UPARAM(ref) float& Float, float Add, float& FloatOut) +{ + Float += Add; + FloatOut = Float; +} +void UVictoryBPFunctionLibrary::VictoryFloatMinusEquals(UPARAM(ref) float& Float, float Sub, float& FloatOut) +{ + Float -= Sub; + FloatOut = Float; +} + +void UVictoryBPFunctionLibrary::VictorySortIntArray(UPARAM(ref) TArray& IntArray, TArray& IntArrayRef) +{ + IntArray.Sort(); + IntArrayRef = IntArray; +} +void UVictoryBPFunctionLibrary::VictorySortFloatArray(UPARAM(ref) TArray& FloatArray, TArray& FloatArrayRef) +{ + FloatArray.Sort(); + FloatArrayRef = FloatArray; +} + +//String Back To Type +void UVictoryBPFunctionLibrary::Conversions__StringToVector(const FString& String, FVector& ConvertedVector, bool& IsValid) +{ + IsValid = ConvertedVector.InitFromString( String ); +} +void UVictoryBPFunctionLibrary::Conversions__StringToRotator(const FString& String, FRotator& ConvertedRotator, bool& IsValid) +{ + IsValid = ConvertedRotator.InitFromString( String ); +} +void UVictoryBPFunctionLibrary::Conversions__StringToColor(const FString& String, FLinearColor& ConvertedColor, bool& IsValid) +{ + IsValid = ConvertedColor.InitFromString( String ); +} +void UVictoryBPFunctionLibrary::Conversions__ColorToString(const FLinearColor& Color, FString& ColorAsString) +{ + ColorAsString = Color.ToString(); +} + +//String Back To Type + + +//! not working yet, always getting 255 +/* +uint8 UVictoryBPFunctionLibrary::Victory_ConvertStringToByte(UEnum* Enum, FString String) +{ + if( !Enum ) return 255; + + return Enum->GetIndexByName(*String); +} +*/ + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +bool UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Bool(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return false; + //~~~~~~~~~~~ + + bool Value; + IsValid = GConfig->GetBool( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} +int32 UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Int(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return 0; + //~~~~~~~~~~~ + + int32 Value; + IsValid = GConfig->GetInt( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} +float UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Float(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return 0; + //~~~~~~~~~~~ + + float Value; + IsValid = GConfig->GetFloat( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} +FVector UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Vector(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return FVector::ZeroVector; + //~~~~~~~~~~~ + + FVector Value; + IsValid = GConfig->GetVector( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} +FRotator UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Rotator(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return FRotator::ZeroRotator; + //~~~~~~~~~~~ + + FRotator Value; + IsValid = GConfig->GetRotator( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} +FLinearColor UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Color(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return FColor::Black; + //~~~~~~~~~~~ + + FColor Value; + IsValid = GConfig->GetColor( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return FLinearColor(Value); +} +FString UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_String(FString SectionName,FString VariableName, bool& IsValid) +{ + if(!GConfig) return ""; + //~~~~~~~~~~~ + + FString Value; + IsValid = GConfig->GetString( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return Value; +} + +FVector2D UVictoryBPFunctionLibrary::VictoryGetCustomConfigVar_Vector2D(FString SectionName, FString VariableName, bool& IsValid) +{ + if(!GConfig) return FVector2D::ZeroVector; + //~~~~~~~~~~~ + + FVector Value; + IsValid = GConfig->GetVector( + *SectionName, + *VariableName, + Value, + GGameIni + ); + return FVector2D(Value.X,Value.Y); +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Vector2D(FString SectionName, FString VariableName, FVector2D Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetVector( + *SectionName, + *VariableName, + FVector(Value.X,Value.Y,0), + GGameIni + ); +} + +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Bool(FString SectionName,FString VariableName, bool Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetBool( + *SectionName, + *VariableName, + Value, + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Int(FString SectionName,FString VariableName, int32 Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetInt( + *SectionName, + *VariableName, + Value, + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Float(FString SectionName,FString VariableName, float Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetFloat( + *SectionName, + *VariableName, + Value, + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Vector(FString SectionName,FString VariableName, FVector Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetVector( + *SectionName, + *VariableName, + Value, + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Rotator(FString SectionName,FString VariableName, FRotator Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetRotator( + *SectionName, + *VariableName, + Value, + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_Color(FString SectionName,FString VariableName, FLinearColor Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetColor( + *SectionName, + *VariableName, + Value.ToFColor(true), + GGameIni + ); +} +void UVictoryBPFunctionLibrary::VictorySetCustomConfigVar_String(FString SectionName,FString VariableName, FString Value) +{ + if(!GConfig) return; + //~~~~~~~~~~~ + + GConfig->SetString( + *SectionName, + *VariableName, + *Value, + GGameIni + ); +} + + + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +FName UVictoryBPFunctionLibrary::GetHeadMountedDisplayDeviceType() +{ + /* + 4.19 + The IHeadMountedDisplay::GetHMDDeviceType() method has been removed as it was not extensible + enough. Code that needs know which XR plugin is currently active should use + IXRTrackingSystem::GetSystemName() instead. + */ + if(!GEngine) return "None"; + + if (GEngine->XRSystem.IsValid() && GEngine->XRSystem->GetHMDDevice()) + { + //Actively connected? + if(!GEngine->XRSystem->GetHMDDevice()->IsHMDConnected()) + { + return "None"; + } + + //!See IIdentifiableXRDevice.h + return GEngine->XRSystem->GetSystemName(); + } + + return "None"; +} + + + + + + + + + + + + + + + + + +UObject* UVictoryBPFunctionLibrary::LoadObjectFromAssetPath(TSubclassOf ObjectClass,FName Path,bool& IsValid) +{ + IsValid = false; + + if(Path == NAME_None) return NULL; + //~~~~~~~~~~~~~~~~~~~~~ + + UObject* LoadedObj = StaticLoadObject( ObjectClass, NULL,*Path.ToString()); + + IsValid = LoadedObj != nullptr; + + return LoadedObj; +} +FName UVictoryBPFunctionLibrary::GetObjectPath(UObject* Obj) +{ + if(!Obj) return NAME_None; + if(!Obj->IsValidLowLevel()) return NAME_None; + //~~~~~~~~~~~~~~~~~~~~~~~~~ + + FStringAssetReference ThePath = FStringAssetReference(Obj); + + if(!ThePath.IsValid()) return ""; + + //The Class FString Name For This Object + FString str=Obj->GetClass()->GetDescription(); + + //Remove spaces in Material Instance Constant class description! + str = str.Replace(TEXT(" "),TEXT("")); + + str += "'"; + str += ThePath.ToString(); + str += "'"; + + return FName(*str); +} +int32 UVictoryBPFunctionLibrary::GetPlayerUniqueNetID() +{ + TObjectIterator ThePC; + if(!ThePC) return -1; + if(!ThePC->PlayerState) return -1; + //~~~~~~~~~~~~~~~~~~~ + + return ThePC->PlayerState->PlayerId; +} +UObject* UVictoryBPFunctionLibrary::CreateObject(UObject* WorldContextObject,UClass* TheObjectClass) +{ + //See deprecation warning + // Deprecation warning makes it no longer appear in context menu as a new node to add + return nullptr; + /* + if(!TheObjectClass) return NULL; + //~~~~~~~~~~~~~~~~~ + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + //Need to submit pull request for custom name and custom class both + return NewObject(World,TheObjectClass); + */ +} +UPrimitiveComponent* UVictoryBPFunctionLibrary::CreatePrimitiveComponent( + UObject* WorldContextObject, + TSubclassOf CompClass, + FName Name, + FVector Location, + FRotator Rotation +){ + if(!CompClass) return NULL; + //~~~~~~~~~~~~~~~~~ + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + UPrimitiveComponent* NewComp = NewObject(World, Name); + if(!NewComp) return NULL; + //~~~~~~~~~~~~~ + + NewComp->SetWorldLocation(Location); + NewComp->SetWorldRotation(Rotation); + NewComp->RegisterComponentWithWorld(World); + + return NewComp; +} + +AActor* UVictoryBPFunctionLibrary::SpawnActorIntoLevel(UObject* WorldContextObject, TSubclassOf ActorClass, FName Level, FVector Location, FRotator Rotation,bool SpawnEvenIfColliding) +{ + if(!ActorClass) return NULL; + //~~~~~~~~~~~~~~~~~ + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + FActorSpawnParameters SpawnParameters; + if (SpawnEvenIfColliding) + { + SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + } + + SpawnParameters.bDeferConstruction = false; + + + //Get Level from Name! + ULevel* FoundLevel = NULL; + + for(const ULevelStreaming* EachLevel : World->StreamingLevels) + { + if( ! EachLevel) continue; + //~~~~~~~~~~~~~~~~ + + ULevel* LevelPtr = EachLevel->GetLoadedLevel(); + + //Valid? + if(!LevelPtr) continue; + + if(EachLevel->GetWorldAssetPackageFName() == Level) + { + FoundLevel = LevelPtr; + break; + } + } + //~~~~~~~~~~~~~~~~~~~~~ + if(FoundLevel) + { + SpawnParameters.OverrideLevel = FoundLevel; + } + //~~~~~~~~~~~~~~~~~~~~~ + + return World->SpawnActor( ActorClass, &Location, &Rotation, SpawnParameters); + +} +void UVictoryBPFunctionLibrary::GetNamesOfLoadedLevels(UObject* WorldContextObject, TArray& NamesOfLoadedLevels) +{ + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + NamesOfLoadedLevels.Empty(); + + //Get Level from Name! + ULevel* FoundLevel = NULL; + + for(const ULevelStreaming* EachLevel : World->StreamingLevels) + { + if( ! EachLevel) continue; + //~~~~~~~~~~~~~~~~ + + ULevel* LevelPtr = EachLevel->GetLoadedLevel(); + + //Valid? + if(!LevelPtr) continue; + + //Is This Level Visible? + if(!LevelPtr->bIsVisible) continue; + //~~~~~~~~~~~~~~~~~~~ + + NamesOfLoadedLevels.Add(EachLevel->GetWorldAssetPackageFName().ToString()); + } +} + + +void UVictoryBPFunctionLibrary::Loops_ResetBPRunawayCounter() +{ + //Reset Runaway loop counter (use carefully) + GInitRunaway(); +} + +void UVictoryBPFunctionLibrary::GraphicsSettings__SetFrameRateToBeUnbound() +{ + if(!GEngine) return; + //~~~~~~~~~ + + GEngine->bSmoothFrameRate = 0; +} +void UVictoryBPFunctionLibrary::GraphicsSettings__SetFrameRateCap(float NewValue) +{ + if(!GEngine) return; + //~~~~~~~~~ + + GEngine->bSmoothFrameRate = 1; + GEngine->SmoothedFrameRateRange = FFloatRange(10,NewValue); +} + +FVector2D UVictoryBPFunctionLibrary::ProjectWorldToScreenPosition(const FVector& WorldLocation) +{ + TObjectIterator ThePC; + if(!ThePC) return FVector2D::ZeroVector; + + ULocalPlayer* LocalPlayer = Cast(ThePC->Player); + if (LocalPlayer != NULL && LocalPlayer->ViewportClient != NULL && LocalPlayer->ViewportClient->Viewport != NULL) + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Create a view family for the game viewport + FSceneViewFamilyContext ViewFamily( FSceneViewFamily::ConstructionValues( + LocalPlayer->ViewportClient->Viewport, + ThePC->GetWorld()->Scene, + LocalPlayer->ViewportClient->EngineShowFlags ) + .SetRealtimeUpdate(true) ); + + // Calculate a view where the player is to update the streaming from the players start location + FVector ViewLocation; + FRotator ViewRotation; + FSceneView* SceneView = LocalPlayer->CalcSceneView( &ViewFamily, /*out*/ ViewLocation, /*out*/ ViewRotation, LocalPlayer->ViewportClient->Viewport ); + + //Valid Scene View? + if (SceneView) + { + //Return + FVector2D ScreenLocation; + SceneView->WorldToPixel(WorldLocation,ScreenLocation ); + return ScreenLocation; + } + } + + return FVector2D::ZeroVector; +} + + + +bool UVictoryBPFunctionLibrary::GetStaticMeshVertexLocations(UStaticMeshComponent* Comp, TArray& VertexPositions) +{ + VertexPositions.Empty(); + + if(!Comp) + { + return false; + } + + if(!Comp->IsValidLowLevel()) + { + return false; + } + //~~~~~~~~~~~~~~~~~~~~~~~ + + //Component Transform + FTransform RV_Transform = Comp->GetComponentTransform(); + + //Body Setup valid? + UBodySetup* BodySetup = Comp->GetBodySetup(); + + if(!BodySetup || !BodySetup->IsValidLowLevel()) + { + return false; + } + + for(PxTriangleMesh* EachTriMesh : BodySetup->TriMeshes) + { + if (!EachTriMesh) + { + return false; + } + //~~~~~~~~~~~~~~~~ + + //Number of vertices + PxU32 VertexCount = EachTriMesh->getNbVertices(); + + //Vertex array + const PxVec3* Vertices = EachTriMesh->getVertices(); + + //For each vertex, transform the position to match the component Transform + for (PxU32 v = 0; v < VertexCount; v++) + { + VertexPositions.Add(RV_Transform.TransformPosition(P2UVector(Vertices[v]))); + } + } + return true; + + /* + //See this wiki for more info on getting triangles + // https://wiki.unrealengine.com/Accessing_mesh_triangles_and_vertex_positions_in_build + */ +} + + +void UVictoryBPFunctionLibrary::AddToActorRotation(AActor* TheActor, FRotator AddRot) +{ + if (!TheActor) return; + //~~~~~~~~~~~ + + FTransform TheTransform = TheActor->GetTransform(); + TheTransform.ConcatenateRotation(AddRot.Quaternion()); + TheTransform.NormalizeRotation(); + TheActor->SetActorTransform(TheTransform); +} + + + + +void UVictoryBPFunctionLibrary::DrawCircle( + UObject* WorldContextObject, + FVector Center, + float Radius, + int32 NumPoints, + float Thickness, + FLinearColor LineColor, + FVector YAxis, + FVector ZAxis, + float Duration, + bool PersistentLines +){ + + + if(!WorldContextObject) return ; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + /* //FOR PULL REQUEST TO EPIC + FMatrix TM; + TM.SetOrigin(Center); + TM.SetAxis(0, FVector(1,0,0)); + TM.SetAxis(1, YAxis); + TM.SetAxis(2, ZAxis); + + DrawDebugCircle( + World, + TM, + Radius, NumPoints, + FColor::Red, + false, + -1.f, + 0 + ); +*/ + + // Need at least 4 segments + NumPoints = FMath::Max(NumPoints, 4); + const float AngleStep = 2.f * PI / float(NumPoints); + + float Angle = 0.f; + for(int32 v = 0; v < NumPoints; v++) + { + const FVector Vertex1 = Center + Radius * (YAxis * FMath::Cos(Angle) + ZAxis * FMath::Sin(Angle)); + Angle += AngleStep; + const FVector Vertex2 = Center + Radius * (YAxis * FMath::Cos(Angle) + ZAxis * FMath::Sin(Angle)); + + DrawDebugLine( + World, + Vertex1, + Vertex2, + LineColor.ToFColor(true), + PersistentLines, + Duration, + 0, //depth + Thickness + ); + } +} + + +bool UVictoryBPFunctionLibrary::LoadStringArrayFromFile(TArray& StringArray, int32& ArraySize, FString FullFilePath, bool ExcludeEmptyLines) +{ + ArraySize = 0; + + if(FullFilePath == "" || FullFilePath == " ") return false; + + //Empty any previous contents! + StringArray.Empty(); + + TArray FileArray; + + if( ! FFileHelper::LoadANSITextFileToStrings(*FullFilePath, NULL, FileArray)) + { + return false; + } + + if(ExcludeEmptyLines) + { + for(const FString& Each : FileArray ) + { + if(Each == "") continue; + //~~~~~~~~~~~~~ + + //check for any non whitespace + bool FoundNonWhiteSpace = false; + for(int32 v = 0; v < Each.Len(); v++) + { + if(Each[v] != ' ' && Each[v] != '\n') + { + FoundNonWhiteSpace = true; + break; + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + } + + if(FoundNonWhiteSpace) + { + StringArray.Add(Each); + } + } + } + else + { + StringArray.Append(FileArray); + } + + ArraySize = StringArray.Num(); + return true; +} + + +AActor* UVictoryBPFunctionLibrary::GetClosestActorOfClassInRadiusOfLocation( + UObject* WorldContextObject, + TSubclassOf ActorClass, + FVector Center, + float Radius, + bool& IsValid +){ + IsValid = false; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + AActor* ClosestActor = NULL; + float MinDistanceSq = Radius*Radius; //Max Radius + + for (TActorIterator Itr(World, ActorClass); Itr; ++Itr) + { + const float DistanceSquared = FVector::DistSquared(Center, Itr->GetActorLocation()); + + //Is this the closest possible actor within the max radius? + if (DistanceSquared < MinDistanceSq) + { + ClosestActor = *Itr; //New Output! + MinDistanceSq = DistanceSquared; //New Min! + } + } + + if (ClosestActor) + { + IsValid = true; + } + + return ClosestActor; +} + +AActor* UVictoryBPFunctionLibrary::GetClosestActorOfClassInRadiusOfActor( + UObject* WorldContextObject, + TSubclassOf ActorClass, + AActor* ActorCenter, + float Radius, + bool& IsValid +){ + IsValid = false; + + if(!ActorCenter) + { + return nullptr; + } + + const FVector Center = ActorCenter->GetActorLocation(); + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + AActor* ClosestActor = NULL; + float MinDistanceSq = Radius*Radius; //Max Radius + + for (TActorIterator Itr(World, ActorClass); Itr; ++Itr) + { + //Skip ActorCenter! + if(*Itr == ActorCenter) continue; + //~~~~~~~~~~~~~~~~~ + + const float DistanceSquared = FVector::DistSquared(Center, Itr->GetActorLocation()); + + //Is this the closest possible actor within the max radius? + if (DistanceSquared < MinDistanceSq) + { + ClosestActor = *Itr; //New Output! + MinDistanceSq = DistanceSquared; //New Min! + } + } + + if (ClosestActor) + { + IsValid = true; + } + + return ClosestActor; +} + +void UVictoryBPFunctionLibrary::Selection_SelectionBox(UObject* WorldContextObject,TArray& SelectedActors, FVector2D AnchorPoint,FVector2D DraggedPoint,TSubclassOf ClassFilter) +{ + if(!WorldContextObject) return ; + + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + SelectedActors.Empty(); + + FBox2D Box; + Box+=DraggedPoint; + Box+=AnchorPoint; + + for(TActorIterator Itr(World); Itr; ++Itr) + { + if(!Itr->IsA(ClassFilter)) continue; + //~~~~~~~~~~~~~~~~~~ + + if(Box.IsInside(UVictoryBPFunctionLibrary::ProjectWorldToScreenPosition(Itr->GetActorLocation()))) + { + SelectedActors.Add(*Itr); + } + } +} + +bool UVictoryBPFunctionLibrary::PlayerController_GetControllerID(APlayerController* ThePC, int32& ControllerID) +{ + if(!ThePC) return false; + + ULocalPlayer * LP = Cast(ThePC->Player); + if(!LP) return false; + + ControllerID = LP->GetControllerId(); + + return true; +} + +bool UVictoryBPFunctionLibrary::PlayerState_GetPlayerID(APlayerController* ThePC, int32& PlayerID) +{ + if(!ThePC) return false; + + if(!ThePC->PlayerState) return false; + + PlayerID = ThePC->PlayerState->PlayerId; + + return true; +} + +void UVictoryBPFunctionLibrary::Open_URL_In_Web_Browser(FString TheURL) +{ + FPlatformProcess::LaunchURL( *TheURL, nullptr, nullptr ); +} + +void UVictoryBPFunctionLibrary::OperatingSystem__GetCurrentPlatform( + bool& Windows_, //some weird bug of making it all caps engine-side + bool& Mac, + bool& Linux, + bool& iOS, + bool& Android, + bool& Android_ARM, + bool& Android_Vulkan, + bool& PS4, + bool& XBoxOne, + bool& HTML5, + bool& Apple +){ + //#define's in UE4 source code + Windows_ = PLATFORM_WINDOWS; + Mac = PLATFORM_MAC; + Linux = PLATFORM_LINUX; + + PS4 = PLATFORM_PS4; + XBoxOne = PLATFORM_XBOXONE; + + iOS = PLATFORM_IOS; + Android = PLATFORM_ANDROID; + Android_ARM = PLATFORM_ANDROID_ARM; + Android_Vulkan = PLATFORM_ANDROID_VULKAN; + HTML5 = PLATFORM_HTML5; + + Apple = PLATFORM_APPLE; +} + +FString UVictoryBPFunctionLibrary::RealWorldTime__GetCurrentOSTime( + int32& MilliSeconds, + int32& Seconds, + int32& Minutes, + int32& Hours12, + int32& Hours24, + int32& Day, + int32& Month, + int32& Year +){ + const FDateTime Now = FDateTime::Now(); + + MilliSeconds = Now.GetMillisecond( ); + Seconds = Now.GetSecond( ); + Minutes = Now.GetMinute( ); + Hours12 = Now.GetHour12( ); + Hours24 = Now.GetHour( ); //24 + Day = Now.GetDay( ); + Month = Now.GetMonth( ); + Year = Now.GetYear( ); + + //MS are not included in FDateTime::ToString(), so adding it + //The Parse function accepts if MS are present. + FString NowWithMS = Now.ToString(); + NowWithMS += "." + FString::FromInt(MilliSeconds); + return NowWithMS; +} + +void UVictoryBPFunctionLibrary::RealWorldTime__GetTimePassedSincePreviousTime( + const FString& PreviousTime, + float& Milliseconds, + float& Seconds, + float& Minutes, + float& Hours +){ + FDateTime ParsedDateTime; + FDateTime::Parse(PreviousTime,ParsedDateTime); + const FTimespan TimeDiff = FDateTime::Now() - ParsedDateTime; + + Milliseconds = TimeDiff.GetTotalMilliseconds( ); + Seconds = TimeDiff.GetTotalSeconds( ); + Minutes = TimeDiff.GetTotalMinutes( ); + Hours = TimeDiff.GetTotalHours( ); +} + +void UVictoryBPFunctionLibrary::RealWorldTime__GetDifferenceBetweenTimes( + const FString& PreviousTime1, + const FString& PreviousTime2, + float& Milliseconds, + float& Seconds, + float& Minutes, + float& Hours +){ + FDateTime ParsedDateTime1; + FDateTime::Parse(PreviousTime1,ParsedDateTime1); + + FDateTime ParsedDateTime2; + FDateTime::Parse(PreviousTime2,ParsedDateTime2); + + FTimespan TimeDiff; + + if(PreviousTime1 < PreviousTime2) + { + TimeDiff = ParsedDateTime2 - ParsedDateTime1; + } + else + { + TimeDiff = ParsedDateTime1 - ParsedDateTime2; + } + + Milliseconds = TimeDiff.GetTotalMilliseconds( ); + Seconds = TimeDiff.GetTotalSeconds( ); + Minutes = TimeDiff.GetTotalMinutes( ); + Hours = TimeDiff.GetTotalHours( ); +} + + + +void UVictoryBPFunctionLibrary::MaxOfFloatArray(const TArray& FloatArray, int32& IndexOfMaxValue, float& MaxValue) +{ + MaxValue = UVictoryBPFunctionLibrary::Max(FloatArray,&IndexOfMaxValue); +} + +void UVictoryBPFunctionLibrary::MaxOfIntArray(const TArray& IntArray, int32& IndexOfMaxValue, int32& MaxValue) +{ + MaxValue = UVictoryBPFunctionLibrary::Max(IntArray,&IndexOfMaxValue); +} + +void UVictoryBPFunctionLibrary::MinOfFloatArray(const TArray& FloatArray, int32& IndexOfMinValue, float& MinValue) +{ + MinValue = UVictoryBPFunctionLibrary::Min(FloatArray,&IndexOfMinValue); +} + +void UVictoryBPFunctionLibrary::MinOfIntArray(const TArray& IntArray, int32& IndexOfMinValue, int32& MinValue) +{ + MinValue = UVictoryBPFunctionLibrary::Min(IntArray,&IndexOfMinValue); +} + + + +bool UVictoryBPFunctionLibrary::CharacterMovement__SetMaxMoveSpeed(ACharacter* TheCharacter, float NewMaxMoveSpeed) +{ + if(!TheCharacter) + { + return false; + } + if(!TheCharacter->GetCharacterMovement()) + { + return false; + } + + TheCharacter->GetCharacterMovement()->MaxWalkSpeed = NewMaxMoveSpeed; + + return true; +} + + + +int32 UVictoryBPFunctionLibrary::Conversion__FloatToRoundedInteger(float IN_Float) +{ + return FGenericPlatformMath::RoundToInt(IN_Float); +} + +FString UVictoryBPFunctionLibrary::Victory_SecondsToHoursMinutesSeconds(float Seconds, bool TrimZeroes) +{ + FString Str = FTimespan(0, 0, Seconds).ToString(); + + if(TrimZeroes) + { + FString Left,Right; + Str.Split(TEXT("."),&Left,&Right); + Str = Left; + Str.ReplaceInline(TEXT("00:00"), TEXT("00")); + + //Str Count! + int32 Count = CountOccurrancesOfSubString(Str,":"); + + //Remove Empty Hours + if(Count >= 2) + { + Str.ReplaceInline(TEXT("00:"), TEXT("")); + } + } + + return Str; +} + +bool UVictoryBPFunctionLibrary::IsAlphaNumeric(const FString& String) +{ + std::string str = (TCHAR_TO_UTF8(*String)); + + for ( std::string::iterator it=str.begin(); it!=str.end(); ++it) + { + if(!isalnum(*it)) + { + return false; + } + } + + return true; +} + +void UVictoryBPFunctionLibrary::Victory_GetStringFromOSClipboard(FString& FromClipboard) +{ + FPlatformApplicationMisc::ClipboardPaste(FromClipboard); +} +void UVictoryBPFunctionLibrary::Victory_SaveStringToOSClipboard(const FString& ToClipboard) +{ + FPlatformApplicationMisc::ClipboardCopy(*ToClipboard); +} + + +bool UVictoryBPFunctionLibrary::HasSubstring(const FString& SearchIn, const FString& Substring, ESearchCase::Type SearchCase, ESearchDir::Type SearchDir) +{ + return SearchIn.Contains(Substring, SearchCase, SearchDir); +} + +FString UVictoryBPFunctionLibrary::String__CombineStrings(FString StringFirst, FString StringSecond, FString Separator, FString StringFirstLabel, FString StringSecondLabel) +{ + return StringFirstLabel + StringFirst + Separator + StringSecondLabel + StringSecond; +} +FString UVictoryBPFunctionLibrary::String__CombineStrings_Multi(FString A, FString B) +{ + return A + " " + B; +} + +bool UVictoryBPFunctionLibrary::OptionsMenu__GetDisplayAdapterScreenResolutions(TArray& Widths, TArray& Heights, TArray& RefreshRates,bool IncludeRefreshRates) +{ + //Clear any Previous + Widths.Empty(); + Heights.Empty(); + RefreshRates.Empty(); + + TArray Unique; + + FScreenResolutionArray Resolutions; + if(RHIGetAvailableResolutions(Resolutions, false)) + { + for (const FScreenResolutionRHI& EachResolution : Resolutions) + { + FString Str = ""; + Str += FString::FromInt(EachResolution.Width); + Str += FString::FromInt(EachResolution.Height); + + //Include Refresh Rates? + if(IncludeRefreshRates) + { + Str += FString::FromInt(EachResolution.RefreshRate); + } + + if(Unique.Contains(Str)) + { + //Skip! This is duplicate! + continue; + } + else + { + //Add to Unique List! + Unique.AddUnique(Str); + } + + //Add to Actual Data Output! + Widths.Add( EachResolution.Width); + Heights.Add( EachResolution.Height); + RefreshRates.Add( EachResolution.RefreshRate); + } + + return true; + } + return false; +} + +void UVictoryBPFunctionLibrary::GetUserDisplayAdapterBrand(bool& IsAMD, bool& IsNvidia, bool& IsIntel, bool& IsUnknown, int32& UnknownId) +{ + IsAMD = IsRHIDeviceAMD(); + IsNvidia = IsRHIDeviceNVIDIA(); + IsIntel = IsRHIDeviceIntel(); + + IsUnknown = !IsAMD && !IsNvidia && !IsIntel; + + if(IsUnknown) + { + UnknownId = GRHIVendorId; + } +} + +//Make .h's for these two! +FRotator UVictoryBPFunctionLibrary::TransformVectorToActorSpaceAngle(AActor* Actor, const FVector& InVector) +{ + if(!Actor) return FRotator::ZeroRotator; + return Actor->ActorToWorld().InverseTransformVector(InVector).Rotation(); +} +FVector UVictoryBPFunctionLibrary::TransformVectorToActorSpace(AActor* Actor, const FVector& InVector) +{ + if(!Actor) return FVector::ZeroVector; + return Actor->ActorToWorld().InverseTransformVector(InVector); +} + +AStaticMeshActor* UVictoryBPFunctionLibrary::Clone__StaticMeshActor(UObject* WorldContextObject, bool&IsValid, AStaticMeshActor* ToClone, FVector LocationOffset,FRotator RotationOffset) +{ + IsValid = false; + if(!ToClone) return NULL; + if(!ToClone->IsValidLowLevel()) return NULL; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + if(!WorldContextObject) return NULL; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return NULL; + //~~~~~~~~~~~ + + //For BPS + UClass* SpawnClass = ToClone->GetClass(); + + FActorSpawnParameters SpawnInfo; + SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + SpawnInfo.Owner = ToClone; + SpawnInfo.Instigator = NULL; + SpawnInfo.bDeferConstruction = false; + + AStaticMeshActor* NewSMA = World->SpawnActor(SpawnClass, ToClone->GetActorLocation() + FVector(0,0,512) ,ToClone->GetActorRotation(), SpawnInfo ); + + if(!NewSMA) return NULL; + + //Copy Transform + NewSMA->SetActorTransform(ToClone->GetTransform()); + + //Mobility + NewSMA->GetStaticMeshComponent()->SetMobility(EComponentMobility::Movable ); + + //copy static mesh + NewSMA->GetStaticMeshComponent()->SetStaticMesh(ToClone->GetStaticMeshComponent()->GetStaticMesh()); + + //~~~ + + //copy materials + TArray Mats; + ToClone->GetStaticMeshComponent()->GetUsedMaterials(Mats); + + const int32 Total = Mats.Num(); + for(int32 v = 0; v < Total; v++ ) + { + NewSMA->GetStaticMeshComponent()->SetMaterial(v,Mats[v]); + } + + //~~~ + + //copy physics state + if(ToClone->GetStaticMeshComponent()->IsSimulatingPhysics()) + { + NewSMA->GetStaticMeshComponent()->SetSimulatePhysics(true); + } + + //~~~ + + //Add Location Offset + const FVector SpawnLoc = ToClone->GetActorLocation() + LocationOffset; + NewSMA->SetActorLocation(SpawnLoc); + + //Add Rotation offset + FTransform TheTransform = NewSMA->GetTransform(); + TheTransform.ConcatenateRotation(RotationOffset.Quaternion()); + TheTransform.NormalizeRotation(); + + //Set Transform + NewSMA->SetActorTransform(TheTransform); + + IsValid = true; + return NewSMA; +} + +bool UVictoryBPFunctionLibrary::Actor__TeleportToActor(AActor* ActorToTeleport, AActor* DestinationActor) +{ + if(!ActorToTeleport) return false; + if(!ActorToTeleport->IsValidLowLevel()) return false; + if(!DestinationActor) return false; + if(!DestinationActor->IsValidLowLevel()) return false; + + //Set Loc + ActorToTeleport->SetActorLocation(DestinationActor->GetActorLocation()); + + //Set Rot + ActorToTeleport->SetActorRotation(DestinationActor->GetActorRotation()); + + return true; +} + +bool UVictoryBPFunctionLibrary::WorldType__InEditorWorld(UObject* WorldContextObject) +{ + if(!WorldContextObject) return false; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return false; + //~~~~~~~~~~~ + + return (World->WorldType == EWorldType::Editor ); +} + +bool UVictoryBPFunctionLibrary::WorldType__InPIEWorld(UObject* WorldContextObject) +{ + if(!WorldContextObject) return false; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return false; + //~~~~~~~~~~~ + + return (World->WorldType == EWorldType::PIE ); +} +bool UVictoryBPFunctionLibrary::WorldType__InGameInstanceWorld(UObject* WorldContextObject) +{ + if(!WorldContextObject) return false; + + //using a context object to get the world! + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return false; + //~~~~~~~~~~~ + + return (World->WorldType == EWorldType::Game ); +} + + + +bool UVictoryBPFunctionLibrary::DoesMaterialHaveParameter(UMaterialInterface* Mat, FName Parameter) +{ + if(!Mat || Parameter == NAME_None) + { + return false; + } + + //Lesson, always use the parent of a Material Instance Dynamic, + // for some reason the dynamic version finds parameters that aren't actually valid. + // -Rama + UMaterialInterface* Parent = Mat; + UMaterialInstance* MatInst = Cast(Mat); + if(MatInst) + { + Parent = MatInst->Parent; + } + + if(!Parent) + { + return false; + } + + float ScalarValue; + if(Parent->GetScalarParameterValue(Parameter,ScalarValue)) + { + return true; + } + + FLinearColor VectValue; + if(Parent->GetVectorParameterValue(Parameter,VectValue)) + { + return true; + } + + UTexture* T2DValue; + return Parent->GetTextureParameterValue(Parameter,T2DValue); +} + +FString UVictoryBPFunctionLibrary::Accessor__GetNameAsString(const UObject* TheObject) +{ + if (!TheObject) return ""; + return TheObject->GetName(); +} + +FRotator UVictoryBPFunctionLibrary::Conversions__VectorToRotator(const FVector& TheVector) +{ + return TheVector.Rotation(); +} +FVector UVictoryBPFunctionLibrary::Conversions__RotatorToVector(const FRotator& TheRotator) +{ + return TheRotator.Vector(); +} +FRotator UVictoryBPFunctionLibrary::Character__GetControllerRotation(AActor * TheCharacter) +{ + ACharacter * AsCharacter = Cast(TheCharacter); + + if (!AsCharacter) return FRotator::ZeroRotator; + + return AsCharacter->GetControlRotation(); +} + +//Draw From Socket on Character's Mesh +void UVictoryBPFunctionLibrary::Draw__Thick3DLineFromCharacterSocket(AActor* TheCharacter, const FVector& EndPoint, FName Socket, FLinearColor LineColor, float Thickness, float Duration) +{ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return; + if (!AsCharacter->GetMesh()) return; + //~~~~~~~~~~~~~~~~~~~~ + + //Get World + UWorld* TheWorld = AsCharacter->GetWorld(); + if (!TheWorld) return; + //~~~~~~~~~~~~~~~~~ + + const FVector SocketLocation = AsCharacter->GetMesh()->GetSocketLocation(Socket); + DrawDebugLine( + TheWorld, + SocketLocation, + EndPoint, + LineColor.ToFColor(true), + false, + Duration, + 0, + Thickness + ); + +} +/** Draw 3D Line of Chosen Thickness From Mesh Socket to Destination */ +void UVictoryBPFunctionLibrary::Draw__Thick3DLineFromSocket(USkeletalMeshComponent* Mesh, const FVector& EndPoint, FName Socket, FLinearColor LineColor, float Thickness, float Duration) +{ + if (!Mesh) return; + //~~~~~~~~~~~~~~ + + //Get an actor to GetWorld() from + TObjectIterator Itr; + if (!Itr) return; + //~~~~~~~~~~~~ + + //Get World + UWorld* TheWorld = Itr->GetWorld(); + if (!TheWorld) return; + //~~~~~~~~~~~~~~~~~ + + const FVector SocketLocation = Mesh->GetSocketLocation(Socket); + + DrawDebugLine( + TheWorld, + SocketLocation, + EndPoint, + LineColor.ToFColor(true), + false, + Duration, + 0, + Thickness + ); +} +/** Draw 3D Line of Chosen Thickness Between Two Actors */ +void UVictoryBPFunctionLibrary::Draw__Thick3DLineBetweenActors(AActor * StartActor, AActor * EndActor, FLinearColor LineColor, float Thickness, float Duration) +{ + if (!StartActor) return; + if (!EndActor) return; + //~~~~~~~~~~~~~~~~ + + DrawDebugLine( + StartActor->GetWorld(), + StartActor->GetActorLocation(), + EndActor->GetActorLocation(), + LineColor.ToFColor(true), + false, + Duration, + 0, + Thickness + ); +} + +bool UVictoryBPFunctionLibrary::Animation__GetAimOffsets(AActor* AnimBPOwner, float& Pitch, float& Yaw) +{ + //Get Owning Character + ACharacter * TheCharacter = Cast(AnimBPOwner); + + if (!TheCharacter) return false; + //~~~~~~~~~~~~~~~ + + //Get Owning Controller Rotation + const FRotator TheCtrlRotation = TheCharacter->GetControlRotation(); + + const FVector RotationDir = TheCtrlRotation.Vector(); + + //Inverse of ActorToWorld matrix is Actor to Local Space + //so this takes the direction vector, the PC or AI rotation + //and outputs what this dir is + //in local actor space & + + //local actor space is what we want for aiming offsets + + const FVector LocalDir = TheCharacter->ActorToWorld().InverseTransformVectorNoScale(RotationDir); + const FRotator LocalRotation = LocalDir.Rotation(); + + //Pass out Yaw and Pitch + Yaw = LocalRotation.Yaw; + Pitch = LocalRotation.Pitch; + + return true; +} +bool UVictoryBPFunctionLibrary::Animation__GetAimOffsetsFromRotation(AActor * AnimBPOwner, const FRotator & TheRotation, float & Pitch, float & Yaw) +{ + //Get Owning Character + ACharacter * TheCharacter = Cast(AnimBPOwner); + + if (!TheCharacter) return false; + //~~~~~~~~~~~~~~~ + + //using supplied rotation + const FVector RotationDir = TheRotation.Vector(); + + //Inverse of ActorToWorld matrix is Actor to Local Space + //so this takes the direction vector, the PC or AI rotation + //and outputs what this dir is + //in local actor space & + + //local actor space is what we want for aiming offsets + + const FVector LocalDir = TheCharacter->ActorToWorld().InverseTransformVectorNoScale(RotationDir); + const FRotator LocalRotation = LocalDir.Rotation(); + + //Pass out Yaw and Pitch + Yaw = LocalRotation.Yaw; + Pitch = LocalRotation.Pitch; + + return true; +} + +void UVictoryBPFunctionLibrary::Visibility__GetRenderedActors(UObject* WorldContextObject, TArray& CurrentlyRenderedActors, float MinRecentTime) +{ + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + //Empty any previous entries + CurrentlyRenderedActors.Empty(); + + //Iterate Over Actors + for ( TActorIterator Itr(World); Itr; ++Itr ) + { + if (World->GetTimeSeconds() - Itr->GetLastRenderTime() <= MinRecentTime) + { + CurrentlyRenderedActors.Add( * Itr); + } + } +} +void UVictoryBPFunctionLibrary::Visibility__GetNotRenderedActors(UObject* WorldContextObject, TArray& CurrentlyNotRenderedActors, float MinRecentTime) +{ + if(!WorldContextObject) return; + + UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!World) return; + //~~~~~~~~~~~ + + //Empty any previous entries + CurrentlyNotRenderedActors.Empty(); + + //Iterate Over Actors + for ( TActorIterator Itr(World); Itr; ++Itr ) + { + if (World->GetTimeSeconds() - Itr->GetLastRenderTime() > MinRecentTime) + { + CurrentlyNotRenderedActors.Add( * Itr); + } + } +} + +void UVictoryBPFunctionLibrary::Rendering__FreezeGameRendering() +{ + FViewport::SetGameRenderingEnabled(false); +} +void UVictoryBPFunctionLibrary::Rendering__UnFreezeGameRendering() +{ + FViewport::SetGameRenderingEnabled(true); +} + +bool UVictoryBPFunctionLibrary::ClientWindow__GameWindowIsForeGroundInOS() +{ + return FPlatformApplicationMisc::IsThisApplicationForeground(); + /* + //Iterate Over Actors + UWorld* TheWorld = NULL; + for ( TObjectIterator Itr; Itr; ++Itr ) + { + TheWorld = Itr->GetWorld(); + if (TheWorld) break; + //~~~~~~~~~~~~~~~~~~~~~~~ + } + //Get Player + ULocalPlayer* VictoryPlayer = + TheWorld->GetFirstLocalPlayerFromController(); + + if (!VictoryPlayer) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //get view port ptr + UGameViewportClient * VictoryViewportClient = + Cast < UGameViewportClient > (VictoryPlayer->ViewportClient); + + if (!VictoryViewportClient) return false; + //~~~~~~~~~~~~~~~~~~~~ + + FViewport * VictoryViewport = VictoryViewportClient->Viewport; + + if (!VictoryViewport) return false; + //~~~~~~~~~~~~~~~~~~~~ + + return VictoryViewport->IsForegroundWindow(); + */ +} +bool UVictoryBPFunctionLibrary::FileIO__SaveStringTextToFile( + FString SaveDirectory, + FString JoyfulFileName, + FString SaveText, + bool AllowOverWriting +){ + if(!FPlatformFileManager::Get().GetPlatformFile().CreateDirectoryTree(*SaveDirectory)) + { + //Could not make the specified directory + return false; + //~~~~~~~~~~~~~~~~~~~~~~ + } + + //get complete file path + SaveDirectory += "\\"; + SaveDirectory += JoyfulFileName; + + //No over-writing? + if (!AllowOverWriting) + { + //Check if file exists already + if (FPlatformFileManager::Get().GetPlatformFile().FileExists( * SaveDirectory)) + { + //no overwriting + return false; + } + } + + return FFileHelper::SaveStringToFile(SaveText, * SaveDirectory); +} +bool UVictoryBPFunctionLibrary::FileIO__SaveStringArrayToFile(FString SaveDirectory, FString JoyfulFileName, TArray SaveText, bool AllowOverWriting) +{ + //Dir Exists? + if ( !VCreateDirectory(SaveDirectory)) + { + //Could not make the specified directory + return false; + //~~~~~~~~~~~~~~~~~~~~~~ + } + + //get complete file path + SaveDirectory += "\\"; + SaveDirectory += JoyfulFileName; + + //No over-writing? + if (!AllowOverWriting) + { + //Check if file exists already + if (FPlatformFileManager::Get().GetPlatformFile().FileExists( * SaveDirectory)) + { + //no overwriting + return false; + } + } + + FString FinalStr = ""; + for(FString& Each : SaveText) + { + FinalStr += Each; + FinalStr += LINE_TERMINATOR; + } + + + + return FFileHelper::SaveStringToFile(FinalStr, * SaveDirectory); + +} +float UVictoryBPFunctionLibrary::Calcs__ClosestPointToSourcePoint(const FVector & Source, const TArray& OtherPoints, FVector& ClosestPoint) +{ + float CurDist = 0; + float ClosestDistance = -1; + int32 ClosestVibe = 0; + ClosestPoint = FVector::ZeroVector; + + if (OtherPoints.Num() <= 0) return ClosestDistance; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + for (int32 Itr = 0; Itr < OtherPoints.Num(); Itr++) + { + if (Source == OtherPoints[Itr]) continue; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //Dist + CurDist = FVector::Dist(Source, OtherPoints[Itr]); + + //Min + if (ClosestDistance < 0 || ClosestDistance >= CurDist) + { + ClosestVibe = Itr; + ClosestDistance = CurDist; + } + } + + //Out + ClosestPoint = OtherPoints[ClosestVibe]; + return ClosestDistance; +} + +bool UVictoryBPFunctionLibrary::Data__GetCharacterBoneLocations(AActor * TheCharacter, TArray& BoneLocations) +{ + ACharacter * Source = Cast(TheCharacter); + if (!Source) return false; + + if (!Source->GetMesh()) return false; + //~~~~~~~~~~~~~~~~~~~~~~~~~ + TArray BoneNames; + + BoneLocations.Empty(); + + + //Get Bone Names + Source->GetMesh()->GetBoneNames(BoneNames); + + //Get Bone Locations + for (int32 Itr = 0; Itr < BoneNames.Num(); Itr++ ) + { + BoneLocations.Add(Source->GetMesh()->GetBoneLocation(BoneNames[Itr])); + } + + return true; +} + +USkeletalMeshComponent* UVictoryBPFunctionLibrary::Accessor__GetCharacterSkeletalMesh(AActor * TheCharacter, bool& IsValid) +{ + IsValid = false; + + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return NULL; + //~~~~~~~~~~~~~~~~~ + + //Is Valid? + if (AsCharacter->GetMesh()) + if (AsCharacter->GetMesh()->IsValidLowLevel() ) + IsValid = true; + + return AsCharacter->GetMesh(); +} + +bool UVictoryBPFunctionLibrary::TraceData__GetTraceDataFromCharacterSocket( + FVector & TraceStart, //out + FVector & TraceEnd, //out + AActor * TheCharacter, + const FRotator& TraceRotation, + float TraceLength, + FName Socket, + bool DrawTraceData, + FLinearColor TraceDataColor, + float TraceDataThickness +) { + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh Exists? + if (!AsCharacter->GetMesh()) return false; + + //Socket Exists? + if (!AsCharacter->GetMesh()->DoesSocketExist(Socket)) return false; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + TraceStart = AsCharacter->GetMesh()->GetSocketLocation(Socket); + TraceEnd = TraceStart + TraceRotation.Vector() * TraceLength; + + if (DrawTraceData) + { + //Get World + UWorld* TheWorld = AsCharacter->GetWorld(); + if (!TheWorld) return false; + //~~~~~~~~~~~~~~~~~ + + DrawDebugLine( + TheWorld, + TraceStart, + TraceEnd, + TraceDataColor.ToFColor(true), + false, + 0.0333, + 0, + TraceDataThickness + ); + } + + return true; +} +bool UVictoryBPFunctionLibrary::TraceData__GetTraceDataFromSkeletalMeshSocket( + FVector & TraceStart, //out + FVector & TraceEnd, //out + USkeletalMeshComponent * Mesh, + const FRotator & TraceRotation, + float TraceLength, + FName Socket, + bool DrawTraceData, + FLinearColor TraceDataColor, + float TraceDataThickness +) { + //Mesh Exists? + if (!Mesh) return false; + + //Socket Exists? + if (!Mesh->DoesSocketExist(Socket)) return false; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + TraceStart = Mesh->GetSocketLocation(Socket); + TraceEnd = TraceStart + TraceRotation.Vector() * TraceLength; + + if (DrawTraceData) + { + //Get a PC to GetWorld() from + TObjectIterator Itr; + if (!Itr) return false; + + //~~~~~~~~~~~~ + + //Get World + UWorld* TheWorld = Itr->GetWorld(); + if (!TheWorld) return false; + //~~~~~~~~~~~~~~~~~ + + DrawDebugLine( + TheWorld, + TraceStart, + TraceEnd, + TraceDataColor.ToFColor(true), + false, + 0.0333, + 0, + TraceDataThickness + ); + } + + return true; +} +AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestBone( + AActor* TraceOwner, + const FVector & TraceStart, + const FVector & TraceEnd, + FVector & OutImpactPoint, + FVector & OutImpactNormal, + FName & ClosestBoneName, + FVector & ClosestBoneLocation, + bool& IsValid +) +{ + IsValid = false; + AActor * HitActor = NULL; + //~~~~~~~~~~~~~~~~~~~~~~ + + //Get a PC to GetWorld() from + TObjectIterator Itr; + if (!Itr) return NULL; + + //~~~~~~~~~~~~ + + //Get World + UWorld* TheWorld = Itr->GetWorld(); + if (TheWorld == nullptr) return NULL; + //~~~~~~~~~~~~~~~~~ + + + //Simple Trace First + FCollisionQueryParams TraceParams(FName(TEXT("VictoryBPTrace::CharacterMeshTrace")), true, HitActor); + TraceParams.bTraceComplex = true; + TraceParams.bTraceAsyncScene = true; + TraceParams.bReturnPhysicalMaterial = false; + TraceParams.AddIgnoredActor(TraceOwner); + + //initialize hit info + FHitResult RV_Hit(ForceInit); + + TheWorld->LineTraceSingleByChannel( + RV_Hit, //result + TraceStart, + TraceEnd, + ECC_Pawn, //collision channel + TraceParams + ); + + //Hit Something! + if (!RV_Hit.bBlockingHit) return HitActor; + + + //Character? + HitActor = RV_Hit.GetActor(); + ACharacter * AsCharacter = Cast(HitActor); + if (!AsCharacter) return HitActor; + + //Mesh + if (!AsCharacter->GetMesh()) return HitActor; + + //Component Trace + FHitResult Hit; + IsValid = AsCharacter->GetMesh()->K2_LineTraceComponent( + TraceStart, + TraceEnd, + true, + false, + OutImpactPoint, + OutImpactNormal, + ClosestBoneName, + Hit + ); + + //Location + ClosestBoneLocation = AsCharacter->GetMesh()->GetBoneLocation(ClosestBoneName); + + return HitActor; +} + +AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestSocket( + UObject* WorldContextObject, + const AActor * TraceOwner, + const FVector & TraceStart, + const FVector & TraceEnd, + FVector & OutImpactPoint, + FVector & OutImpactNormal, + FName & ClosestSocketName, + FVector & SocketLocation, + bool & IsValid +) +{ + IsValid = false; + AActor * HitActor = NULL; + //~~~~~~~~~~~~~~~~~~~~~~ + + if(!WorldContextObject) return nullptr; + + UWorld* const TheWorld = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if(!TheWorld) return nullptr; + //~~~~~~~~~~~ + + //Simple Trace First + FCollisionQueryParams TraceParams(FName(TEXT("VictoryBPTrace::CharacterMeshSocketTrace")), true, HitActor); + TraceParams.bTraceComplex = true; + TraceParams.bTraceAsyncScene = true; + TraceParams.bReturnPhysicalMaterial = false; + TraceParams.AddIgnoredActor(TraceOwner); + + //initialize hit info + FHitResult RV_Hit(ForceInit); + + TheWorld->LineTraceSingleByChannel( + RV_Hit, //result + TraceStart, + TraceEnd, + ECC_Pawn, //collision channel + TraceParams + ); + + //Hit Something! + if (!RV_Hit.bBlockingHit) return HitActor; + + + //Character? + HitActor = RV_Hit.GetActor(); + ACharacter * AsCharacter = Cast(HitActor); + if (!AsCharacter) return HitActor; + + //Mesh + if (!AsCharacter->GetMesh()) return HitActor; + + //Component Trace + FHitResult Hit; + FName BoneName; + if (! AsCharacter->GetMesh()->K2_LineTraceComponent( + TraceStart, + TraceEnd, + true, + false, + OutImpactPoint, + OutImpactNormal, + BoneName, + Hit + )) return HitActor; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Socket Names + TArray SocketNames; + + //Get Bone Names + AsCharacter->GetMesh()->QuerySupportedSockets(SocketNames); + + // Min + FVector CurLoc; + float CurDist = 0; + float ClosestDistance = -1; + int32 ClosestVibe = 0; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //Check All Bones Locations + for (int32 Itr = 0; Itr < SocketNames.Num(); Itr++ ) + { + //Is this a Bone not a socket? + if(SocketNames[Itr].Type == EComponentSocketType::Bone) continue; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CurLoc = AsCharacter->GetMesh()->GetSocketLocation(SocketNames[Itr].Name); + + //Dist + CurDist = FVector::Dist(OutImpactPoint, CurLoc); + + //Min + if (ClosestDistance < 0 || ClosestDistance >= CurDist) + { + ClosestVibe = Itr; + ClosestDistance = CurDist; + } + } + + //Name + ClosestSocketName = SocketNames[ClosestVibe].Name; + + //Location + SocketLocation = AsCharacter->GetMesh()->GetSocketLocation(ClosestSocketName); + + //Valid + IsValid = true; + + //Actor + return HitActor; +} + +void UVictoryBPFunctionLibrary::VictorySimulateMouseWheel(const float& Delta) +{ + FSlateApplication::Get().OnMouseWheel(int32(Delta)); +} +void UVictoryBPFunctionLibrary::VictorySimulateKeyPress(APlayerController* ThePC, FKey Key, EInputEvent EventType) +{ + if (!ThePC) return; + ThePC->InputKey(Key, EventType, 1, false); //amount depressed, bGamepad + //! This will fire twice if the event is not handled, for umg widgets place an invisible button in background. + + if (Key == EKeys::LeftMouseButton || Key == EKeys::MiddleMouseButton || Key == EKeys::RightMouseButton || Key == EKeys::ThumbMouseButton || Key == EKeys::ThumbMouseButton2) + { + EMouseButtons::Type Button = EMouseButtons::Invalid; + if (Key == EKeys::LeftMouseButton) + { + Button = EMouseButtons::Left; + } + else if (Key == EKeys::MiddleMouseButton) + { + Button = EMouseButtons::Middle; + } + else if (Key == EKeys::RightMouseButton) + { + Button = EMouseButtons::Right; + } + else if (Key == EKeys::ThumbMouseButton) + { + Button = EMouseButtons::Thumb01; + } + else if (Key == EKeys::ThumbMouseButton2) + { + Button = EMouseButtons::Thumb02; + } + + + if (EventType == IE_Pressed) + { + FSlateApplication::Get().OnMouseDown(nullptr, Button); + } + else if (EventType == IE_Released) + { + FSlateApplication::Get().OnMouseUp(Button); + } + else if (EventType == IE_DoubleClick) + { + FSlateApplication::Get().OnMouseDoubleClick(nullptr, Button); + } + } + else + { + const uint32 *KeyCode = 0; + const uint32 *CharacterCode = 0; + FInputKeyManager::Get().GetCodesFromKey(Key, KeyCode, CharacterCode); + uint32 KeyCodeVal = (KeyCode != NULL) ? *KeyCode : -1; + uint32 CharacterCodeVal = (CharacterCode != NULL) ? *CharacterCode : -1; + + if (EventType == IE_Pressed) + { + FSlateApplication::Get().OnKeyDown(KeyCodeVal, CharacterCodeVal, false); + } + else if (EventType == IE_Released) + { + FSlateApplication::Get().OnKeyUp(KeyCodeVal, CharacterCodeVal, false); + } + } +} + +bool UVictoryBPFunctionLibrary::Viewport__EnableWorldRendering(const APlayerController* ThePC, bool RenderTheWorld) +{ + if (!ThePC) return false; + //~~~~~~~~~~~~~ + + //Get Player + ULocalPlayer * VictoryPlayer = Cast(ThePC->Player); + //PlayerController::Player is UPlayer + + if (!VictoryPlayer) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //get view port ptr + UGameViewportClient * VictoryViewportClient = + Cast < UGameViewportClient > (VictoryPlayer->ViewportClient); + + if (!VictoryViewportClient) return false; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + VictoryViewportClient->bDisableWorldRendering = !RenderTheWorld; + return true; +} + +//Most HUD stuff is in floats so I do the conversion internally +bool UVictoryBPFunctionLibrary::Viewport__SetMousePosition(const APlayerController* ThePC, const float& PosX, const float& PosY) +{ + if (!ThePC) return false; + //~~~~~~~~~~~~~ + + //Get Player + const ULocalPlayer * VictoryPlayer = Cast(ThePC->Player); + //PlayerController::Player is UPlayer + + if (!VictoryPlayer) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //get view port ptr + const UGameViewportClient * VictoryViewportClient = + Cast < UGameViewportClient > (VictoryPlayer->ViewportClient); + + if (!VictoryViewportClient) return false; + //~~~~~~~~~~~~~~~~~~~~ + + FViewport * VictoryViewport = VictoryViewportClient->Viewport; + + if (!VictoryViewport) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //Set Mouse + VictoryViewport->SetMouse(int32(PosX), int32(PosY)); + + return true; +} + +APlayerController * UVictoryBPFunctionLibrary::Accessor__GetPlayerController( + AActor * TheCharacter, + bool & IsValid +) +{ + IsValid = false; + + //Cast to Character + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return NULL; + + //cast to PC + APlayerController * ThePC = Cast < APlayerController > (AsCharacter->GetController()); + + if (!ThePC ) return NULL; + + IsValid = true; + return ThePC; +} + +bool UVictoryBPFunctionLibrary::Viewport__GetCenterOfViewport(const APlayerController * ThePC, float & PosX, float & PosY) +{ + if (!ThePC) return false; + //~~~~~~~~~~~~~ + + //Get Player + const ULocalPlayer * VictoryPlayer = Cast(ThePC->Player); + //PlayerController::Player is UPlayer + + if (!VictoryPlayer) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //get view port ptr + const UGameViewportClient * VictoryViewportClient = + Cast < UGameViewportClient > (VictoryPlayer->ViewportClient); + + if (!VictoryViewportClient) return false; + //~~~~~~~~~~~~~~~~~~~~ + + FViewport * VictoryViewport = VictoryViewportClient->Viewport; + + if (!VictoryViewport) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //Get Size + FIntPoint Size = VictoryViewport->GetSizeXY(); + + //Center + PosX = Size.X / 2; + PosY = Size.Y / 2; + + return true; +} + +bool UVictoryBPFunctionLibrary::Viewport__GetMousePosition(const APlayerController * ThePC, float & PosX, float & PosY) +{ + if (!ThePC) return false; + //~~~~~~~~~~~~~ + + //Get Player + const ULocalPlayer * VictoryPlayer = Cast(ThePC->Player); + //PlayerController::Player is UPlayer + + if (!VictoryPlayer) return false; + //~~~~~~~~~~~~~~~~~~~~ + + //get view port ptr + const UGameViewportClient * VictoryViewportClient = + Cast < UGameViewportClient > (VictoryPlayer->ViewportClient); + + if (!VictoryViewportClient) return false; + //~~~~~~~~~~~~~~~~~~~~ + + FViewport * VictoryViewport = VictoryViewportClient->Viewport; + + if (!VictoryViewport) return false; + //~~~~~~~~~~~~~~~~~~~~ + + PosX = float(VictoryViewport->GetMouseX()); + PosY = float(VictoryViewport->GetMouseY()); + + return true; +} + + + + + +bool UVictoryBPFunctionLibrary::Physics__EnterRagDoll(AActor * TheCharacter) +{ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + //Physics Asset? + if(!AsCharacter->GetMesh()->GetPhysicsAsset()) return false; + + //Victory Ragdoll + AsCharacter->GetMesh()->SetSimulatePhysics(true); + + return true; +} + + +bool UVictoryBPFunctionLibrary::Physics__LeaveRagDoll( + AActor* TheCharacter, + bool SetToFallingMovementMode, + float HeightAboveRBMesh, + const FVector& InitLocation, + const FRotator& InitRotation +){ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + //Set Actor Location to Be Near Ragdolled Mesh + //Calc Ref Bone Relative Pos for use with IsRagdoll + TArray BoneNames; + AsCharacter->GetMesh()->GetBoneNames(BoneNames); + if(BoneNames.Num() > 0) + { + AsCharacter->SetActorLocation(FVector(0,0,HeightAboveRBMesh) + AsCharacter->GetMesh()->GetBoneLocation(BoneNames[0])); + } + + //Exit Ragdoll + AsCharacter->GetMesh()->SetSimulatePhysics(false); + AsCharacter->GetMesh()->AttachToComponent(AsCharacter->GetCapsuleComponent(), FAttachmentTransformRules::KeepRelativeTransform); + + //Restore Defaults + AsCharacter->GetMesh()->SetRelativeRotation(InitRotation); + AsCharacter->GetMesh()->SetRelativeLocation(InitLocation); + + //Set Falling After Final Capsule Relocation + if(SetToFallingMovementMode) + { + if(AsCharacter->GetCharacterMovement()) AsCharacter->GetCharacterMovement()->SetMovementMode(MOVE_Falling); + } + + return true; +} + +bool UVictoryBPFunctionLibrary::Physics__IsRagDoll(AActor* TheCharacter) +{ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + return AsCharacter->GetMesh()->IsAnySimulatingPhysics(); +} + +bool UVictoryBPFunctionLibrary::Physics__GetLocationofRagDoll(AActor* TheCharacter, FVector& RagdollLocation) +{ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + TArray BoneNames; + AsCharacter->GetMesh()->GetBoneNames(BoneNames); + if(BoneNames.Num() > 0) + { + RagdollLocation = AsCharacter->GetMesh()->GetBoneLocation(BoneNames[0]); + } + else return false; + + return true; +} + +bool UVictoryBPFunctionLibrary::Physics__InitializeVictoryRagDoll( + AActor* TheCharacter, + FVector& InitLocation, + FRotator& InitRotation +){ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + InitLocation = AsCharacter->GetMesh()->GetRelativeTransform().GetLocation(); + InitRotation = AsCharacter->GetMesh()->GetRelativeTransform().Rotator(); + + return true; +} + +bool UVictoryBPFunctionLibrary::Physics__UpdateCharacterCameraToRagdollLocation( + AActor* TheCharacter, + float HeightOffset, + float InterpSpeed +){ + ACharacter * AsCharacter = Cast(TheCharacter); + if (!AsCharacter) return false; + + //Mesh? + if (!AsCharacter->GetMesh()) return false; + + //Ragdoll? + if(!AsCharacter->GetMesh()->IsAnySimulatingPhysics()) return false; + + FVector RagdollLocation = FVector(0,0,0); + TArray BoneNames; + AsCharacter->GetMesh()->GetBoneNames(BoneNames); + if(BoneNames.Num() > 0) + { + RagdollLocation = AsCharacter->GetMesh()->GetBoneLocation(BoneNames[0]); + } + + //Interp + RagdollLocation = FMath::VInterpTo(AsCharacter->GetActorLocation(), RagdollLocation + FVector(0,0,HeightOffset), AsCharacter->GetWorld()->DeltaTimeSeconds, InterpSpeed); + + //Set Loc + AsCharacter->SetActorLocation(RagdollLocation); + + return true; +} +/* +bool UVictoryBPFunctionLibrary::Accessor__GetSocketLocalTransform(const USkeletalMeshComponent* Mesh, FTransform& LocalTransform, FName SocketName) +{ + if(!Mesh) return false; + + LocalTransform = Mesh->GetSocketLocalTransform(SocketName); + + return true; +} +*/ + +void UVictoryBPFunctionLibrary::StringConversion__GetFloatAsStringWithPrecision(float TheFloat, FString & FloatString, int32 Precision, bool IncludeLeadingZero) +{ + FNumberFormattingOptions NumberFormat; //Text.h + NumberFormat.MinimumIntegralDigits = (IncludeLeadingZero) ? 1 : 0; + NumberFormat.MaximumIntegralDigits = 10000; + NumberFormat.MinimumFractionalDigits = Precision; + NumberFormat.MaximumFractionalDigits = Precision; + FloatString = FText::AsNumber(TheFloat, &NumberFormat).ToString(); +} + +bool UVictoryBPFunctionLibrary::LensFlare__GetLensFlareOffsets( + APlayerController* PlayerController, + AActor* LightSource, + float& PitchOffset, + float& YawOffset, + float& RollOffset +){ + if(!PlayerController) return false; + if(!LightSource) return false; + //~~~~~~~~~~~~~~~~~~~ + + //angle from player to light source + const FRotator AngleToLightSource = (LightSource->GetActorLocation() - PlayerController->GetFocalLocation()).Rotation(); + + const FRotator Offsets = AngleToLightSource - PlayerController->GetControlRotation(); + + PitchOffset = Offsets.Pitch; + YawOffset = Offsets.Yaw; + RollOffset = Offsets.Roll; + return true; +} + +//SMA Version +float UVictoryBPFunctionLibrary::DistanceToSurface__DistaceOfPointToMeshSurface(AStaticMeshActor* TheSMA, const FVector& TestPoint, FVector& ClosestSurfacePoint) +{ + if(!TheSMA) return -1; + if(!TheSMA->GetStaticMeshComponent()) return -1; + //~~~~~~~~~~ + + //Dist of pt to Surface, retrieve closest Surface Point to Actor + return TheSMA->GetStaticMeshComponent()->GetDistanceToCollision(TestPoint, ClosestSurfacePoint); +} + +bool UVictoryBPFunctionLibrary::Mobility__SetSceneCompMobility( + USceneComponent* SceneComp, + EComponentMobility::Type NewMobility +) +{ + if(!SceneComp) return false; + //~~~~~~~~~~~ + + SceneComp->SetMobility(NewMobility); + + return true; +} + + + + + + + + + + + + + + + + + + + +//~~~~~~~~~~~~~~~~~~ +// FullScreen +//~~~~~~~~~~~~~~~~~~ +TEnumAsByte UVictoryBPFunctionLibrary::JoyGraphicsSettings__FullScreen_Get() +{ + return TEnumAsByte(JoyGraphics_FullScreen_GetFullScreenType()); +} + +void UVictoryBPFunctionLibrary::JoyGraphicsSettings__FullScreen_Set(TEnumAsByte NewSetting) +{ + JoyGraphics_FullScreen_SetFullScreenType(NewSetting.GetValue()); +} + + + + + + + + + + + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Contributed by Others + + /** + * Contributed by: SaxonRah + * Better random numbers. Seeded with a random device. if the random device's entropy is 0; defaults to current time for seed. + * can override with seed functions; + */ +//----------------------------------------------------------------------------------------------BeginRANDOM + std::random_device rd; + unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); + + std::mt19937 rand_MT; + std::default_random_engine rand_DRE; + + /** Construct a random device and set seed for engines dependent on entropy */ + void UVictoryBPFunctionLibrary::constructRand() + { + seed = std::chrono::system_clock::now().time_since_epoch().count(); + + if (rd.entropy() == 0) + { + seedRand(seed); + }else{ + seedRand(rd()); + } + } + /** Set seed for Rand */ + void UVictoryBPFunctionLibrary::seedRand(int32 _seed) + { + seed = _seed; + } + + /** Set seed with time for Rand */ + void UVictoryBPFunctionLibrary::seedRandWithTime() + { + seed = std::chrono::system_clock::now().time_since_epoch().count(); + } + + /** Set seed with entropy for Rand */ + void UVictoryBPFunctionLibrary::seedRandWithEntropy() + { + seedRand(rd()); + } + + /** Random Bool - Bernoulli distribution */ + bool UVictoryBPFunctionLibrary::RandBool_Bernoulli(float fBias) + { + std::bernoulli_distribution dis(fBias); + return dis(rand_DRE); + } + + /** Random Integer - Uniform distribution */ + int32 UVictoryBPFunctionLibrary::RandInt_uniDis() + { + std::uniform_int_distribution dis(0, 1); + return dis(rand_DRE); + } + /** Random Integer - Uniform distribution */ + int32 UVictoryBPFunctionLibrary::RandInt_MINMAX_uniDis(int32 iMin, int32 iMax) + { + std::uniform_int_distribution dis(iMin, iMax); + return dis(rand_DRE); + } + + /** Random Float - Zero to One Uniform distribution */ + float UVictoryBPFunctionLibrary::RandFloat_uniDis() + { + std::uniform_real_distribution dis(0, 1); + return dis(rand_DRE); + } + /** Random Float - MIN to MAX Uniform distribution */ + float UVictoryBPFunctionLibrary::RandFloat_MINMAX_uniDis(float iMin, float iMax) + { + std::uniform_real_distribution dis(iMin, iMax); + return dis(rand_DRE); + } + + /** Random Bool - Bernoulli distribution - Mersenne Twister */ + bool UVictoryBPFunctionLibrary::RandBool_Bernoulli_MT(float fBias) + { + std::bernoulli_distribution dis(fBias); + return dis(rand_MT); + } + + /** Random Integer - Uniform distribution - Mersenne Twister */ + int32 UVictoryBPFunctionLibrary::RandInt_uniDis_MT() + { + std::uniform_int_distribution dis(0, 1); + return dis(rand_MT); + } + /** Random Integer - Uniform distribution - Mersenne Twister */ + int32 UVictoryBPFunctionLibrary::RandInt_MINMAX_uniDis_MT(int32 iMin, int32 iMax) + { + std::uniform_int_distribution dis(iMin, iMax); + return dis(rand_MT); + } + + /** Random Float - Zero to One Uniform distribution - Mersenne Twister */ + float UVictoryBPFunctionLibrary::RandFloat_uniDis_MT() + { + std::uniform_real_distribution dis(0, 1); + return dis(rand_MT); + } + /** Random Float - MIN to MAX Uniform distribution - Mersenne Twister */ + float UVictoryBPFunctionLibrary::RandFloat_MINMAX_uniDis_MT(float iMin, float iMax) + { + std::uniform_real_distribution dis(iMin, iMax); + return dis(rand_MT); + } +//----------------------------------------------------------------------------------------------ENDRANDOM + + + +void UVictoryBPFunctionLibrary::String__ExplodeString(TArray& OutputStrings, FString InputString, FString Separator, int32 limit, bool bTrimElements) +{ + OutputStrings.Empty(); + //~~~~~~~~~~~ + + if (InputString.Len() > 0 && Separator.Len() > 0) { + int32 StringIndex = 0; + int32 SeparatorIndex = 0; + + FString Section = ""; + FString Extra = ""; + + int32 PartialMatchStart = -1; + + while (StringIndex < InputString.Len()) { + + if (InputString[StringIndex] == Separator[SeparatorIndex]) { + if (SeparatorIndex == 0) { + //A new partial match has started. + PartialMatchStart = StringIndex; + } + Extra.AppendChar(InputString[StringIndex]); + if (SeparatorIndex == (Separator.Len() - 1)) { + //We have matched the entire separator. + SeparatorIndex = 0; + PartialMatchStart = -1; + if (bTrimElements == true) { + OutputStrings.Add(FString(Section).TrimStart().TrimEnd()); + } + else { + OutputStrings.Add(FString(Section)); + } + + //if we have reached the limit, stop. + if (limit > 0 && OutputStrings.Num() >= limit) + { + return; + //~~~~ + } + + Extra.Empty(); + Section.Empty(); + } + else { + ++SeparatorIndex; + } + } + else { + //Not matched. + //We should revert back to PartialMatchStart+1 (if there was a partial match) and clear away extra. + if (PartialMatchStart >= 0) { + StringIndex = PartialMatchStart; + PartialMatchStart = -1; + Extra.Empty(); + SeparatorIndex = 0; + } + Section.AppendChar(InputString[StringIndex]); + } + + ++StringIndex; + } + + //If there is anything left in Section or Extra. They should be added as a new entry. + if (bTrimElements == true) { + OutputStrings.Add(FString(Section + Extra).TrimStart().TrimEnd()); + } + else { + OutputStrings.Add(FString(Section + Extra)); + } + + Section.Empty(); + Extra.Empty(); + } +} + +UTexture2D* UVictoryBPFunctionLibrary::LoadTexture2D_FromDDSFile(const FString& FullFilePath) +{ + UTexture2D* Texture = NULL; + + FString TexturePath = FullFilePath;//FPaths::GameContentDir( ) + TEXT( "../Data/" ) + TextureFilename; + TArray FileData; + + /* Load DDS texture */ + if( FFileHelper::LoadFileToArray( FileData, *TexturePath, 0 ) ) + { + FDDSLoadHelper DDSLoadHelper( &FileData[ 0 ], FileData.Num( ) ); + if( DDSLoadHelper.IsValid2DTexture( ) ) + { + int32 NumMips = DDSLoadHelper.ComputeMipMapCount( ); + EPixelFormat Format = DDSLoadHelper.ComputePixelFormat( ); + int32 BlockSize = 16; + + if( NumMips == 0 ) + { + NumMips = 1; + } + + if( Format == PF_DXT1 ) + { + BlockSize = 8; + } + + /* Create transient texture */ + Texture = UTexture2D::CreateTransient( DDSLoadHelper.DDSHeader->dwWidth, DDSLoadHelper.DDSHeader->dwHeight, Format ); + if(!Texture) return NULL; + Texture->PlatformData->NumSlices = 1; + Texture->NeverStream = true; + + /* Get pointer to actual data */ + uint8* DataPtr = (uint8*) DDSLoadHelper.GetDDSDataPointer( ); + + uint32 CurrentWidth = DDSLoadHelper.DDSHeader->dwWidth; + uint32 CurrentHeight = DDSLoadHelper.DDSHeader->dwHeight; + + /* Iterate through mips */ + for( int32 i = 0; i < NumMips; i++ ) + { + /* Lock to 1x1 as smallest size */ + CurrentWidth = ( CurrentWidth < 1 ) ? 1 : CurrentWidth; + CurrentHeight = ( CurrentHeight < 1 ) ? 1 : CurrentHeight; + + /* Get number of bytes to read */ + int32 NumBytes = CurrentWidth * CurrentHeight * 4; + if( Format == PF_DXT1 || Format == PF_DXT3 || Format == PF_DXT5 ) + { + /* Compressed formats */ + NumBytes = ( ( CurrentWidth + 3 ) / 4 ) * ( ( CurrentHeight + 3 ) / 4 ) * BlockSize; + } + + /* Write to existing mip */ + if( i < Texture->PlatformData->Mips.Num( ) ) + { + FTexture2DMipMap& Mip = Texture->PlatformData->Mips[ i ]; + + void* Data = Mip.BulkData.Lock( LOCK_READ_WRITE ); + FMemory::Memcpy( Data, DataPtr, NumBytes ); + Mip.BulkData.Unlock( ); + } + + /* Add new mip */ + else + { + FTexture2DMipMap* Mip = new( Texture->PlatformData->Mips ) FTexture2DMipMap( ); + Mip->SizeX = CurrentWidth; + Mip->SizeY = CurrentHeight; + + Mip->BulkData.Lock( LOCK_READ_WRITE ); + Mip->BulkData.Realloc( NumBytes ); + Mip->BulkData.Unlock( ); + + void* Data = Mip->BulkData.Lock( LOCK_READ_WRITE ); + FMemory::Memcpy( Data, DataPtr, NumBytes ); + Mip->BulkData.Unlock( ); + } + + /* Set next mip level */ + CurrentWidth /= 2; + CurrentHeight /= 2; + + DataPtr += NumBytes; + } + + Texture->UpdateResource( ); + } + } + + return Texture; +} + + +//this is how you can make cpp only internal functions! +static EImageFormat GetJoyImageFormat(EJoyImageFormats JoyFormat) +{ + /* + ImageWrapper.h + namespace EImageFormat + { + + Enumerates the types of image formats this class can handle + + enum Type + { + //Portable Network Graphics + PNG, + + //Joint Photographic Experts Group + JPEG, + + //Single channel jpeg + GrayscaleJPEG, + + //Windows Bitmap + BMP, + + //Windows Icon resource + ICO, + + //OpenEXR (HDR) image file format + EXR, + + //Mac icon + ICNS + }; +}; + */ + switch(JoyFormat) + { + case EJoyImageFormats::JPG : return EImageFormat::JPEG; + case EJoyImageFormats::PNG : return EImageFormat::PNG; + case EJoyImageFormats::BMP : return EImageFormat::BMP; + case EJoyImageFormats::ICO : return EImageFormat::ICO; + case EJoyImageFormats::EXR : return EImageFormat::EXR; + case EJoyImageFormats::ICNS : return EImageFormat::ICNS; + } + return EImageFormat::JPEG; +} + +static FString GetJoyImageExtension(EJoyImageFormats JoyFormat) +{ + switch(JoyFormat) + { + case EJoyImageFormats::JPG : return ".jpg"; + case EJoyImageFormats::PNG : return ".png"; + case EJoyImageFormats::BMP : return ".bmp"; + case EJoyImageFormats::ICO : return ".ico"; + case EJoyImageFormats::EXR : return ".exr"; + case EJoyImageFormats::ICNS : return ".icns"; + } + return ".png"; +} +UTexture2D* UVictoryBPFunctionLibrary::Victory_LoadTexture2D_FromFile(const FString& FullFilePath,EJoyImageFormats ImageFormat, bool& IsValid,int32& Width, int32& Height) +{ + + + IsValid = false; + UTexture2D* LoadedT2D = NULL; + + IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked(FName("ImageWrapper")); + TSharedPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat)); + + //Load From File + TArray RawFileData; + if (!FFileHelper::LoadFileToArray(RawFileData, *FullFilePath)) return NULL; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //Create T2D! + if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num())) + { + const TArray* UncompressedBGRA = NULL; + if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA)) + { + LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8); + + //Valid? + if(!LoadedT2D) return NULL; + //~~~~~~~~~~~~~~ + + //Out! + Width = ImageWrapper->GetWidth(); + Height = ImageWrapper->GetHeight(); + + //Copy! + void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE); + FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num()); + LoadedT2D->PlatformData->Mips[0].BulkData.Unlock(); + + //Update! + LoadedT2D->UpdateResource(); + } + } + + // Success! + IsValid = true; + return LoadedT2D; +} +UTexture2D* UVictoryBPFunctionLibrary::Victory_LoadTexture2D_FromFile_Pixels(const FString& FullFilePath,EJoyImageFormats ImageFormat,bool& IsValid, int32& Width, int32& Height, TArray& OutPixels) +{ + //Clear any previous data + OutPixels.Empty(); + + IsValid = false; + UTexture2D* LoadedT2D = NULL; + + IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked(FName("ImageWrapper")); + TSharedPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat)); + + //Load From File + TArray RawFileData; + if (!FFileHelper::LoadFileToArray(RawFileData, *FullFilePath)) return NULL; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //Create T2D! + if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num())) + { + const TArray* UncompressedRGBA = NULL; + if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA)) + { + LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8); + + //Valid? + if(!LoadedT2D) return NULL; + //~~~~~~~~~~~~~~ + + //Out! + Width = ImageWrapper->GetWidth(); + Height = ImageWrapper->GetHeight(); + + const TArray& ByteArray = *UncompressedRGBA; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + for(int32 v = 0; v < ByteArray.Num(); v+=4) + { + if(!ByteArray.IsValidIndex(v+3)) + { + break; + } + + OutPixels.Add( + FLinearColor( + ByteArray[v], //R + ByteArray[v+1], //G + ByteArray[v+2], //B + ByteArray[v+3] //A + ) + ); + } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //Copy! + void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE); + FMemory::Memcpy(TextureData, UncompressedRGBA->GetData(), UncompressedRGBA->Num()); + LoadedT2D->PlatformData->Mips[0].BulkData.Unlock(); + + //Update! + LoadedT2D->UpdateResource(); + } + } + + // Success! + IsValid = true; + return LoadedT2D; + +} +bool UVictoryBPFunctionLibrary::Victory_Get_Pixel(const TArray& Pixels,int32 ImageHeight, int32 x, int32 y, FLinearColor& FoundColor) +{ + int32 Index = y * ImageHeight + x; + if(!Pixels.IsValidIndex(Index)) + { + return false; + } + + FoundColor = Pixels[Index]; + return true; +} + + +bool UVictoryBPFunctionLibrary::Victory_SavePixels( + const FString& FullFilePath + , int32 Width, int32 Height + , const TArray& ImagePixels + , bool SaveAsBMP + , bool sRGB + , FString& ErrorString +){ + if(FullFilePath.Len() < 1) + { + ErrorString = "No file path"; + return false; + } + //~~~~~~~~~~~~~~~~~ + + //Ensure target directory exists, + // _or can be created!_ <3 Rama + FString NewAbsoluteFolderPath = FPaths::GetPath(FullFilePath); + FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath); + if(!VCreateDirectory(NewAbsoluteFolderPath)) + { + ErrorString = "Folder could not be created, check read/write permissions~ " + NewAbsoluteFolderPath; + return false; + } + + //Create FColor version + TArray ColorArray; + for(const FLinearColor& Each : ImagePixels) + { + ColorArray.Add(Each.ToFColor(sRGB)); + } + + if(ColorArray.Num() != Width * Height) + { + ErrorString = "Error ~ height x width is not equal to the total pixel array length!"; + return false; + } + + //Remove any supplied file extension and/or add accurate one + FString FinalFilename = FPaths::GetBaseFilename(FullFilePath, false); //false = dont remove path + FinalFilename += (SaveAsBMP) ? ".bmp" : ".png"; + + //~~~ + + if(SaveAsBMP) + { + ErrorString = "Success! or if returning false, the saving of file to disk did not succeed for File IO reasons"; + return FFileHelper::CreateBitmap( + *FinalFilename, + Width, + Height, + ColorArray.GetData(), //const struct FColor* Data, + nullptr,//struct FIntRect* SubRectangle = NULL, + &IFileManager::Get(), + nullptr, //out filename info only + true //bool bInWriteAlpha + ); + } + else + { + TArray CompressedPNG; + FImageUtils::CompressImageArray( + Width, + Height, + ColorArray, + CompressedPNG + ); + + ErrorString = "Success! or if returning false, the saving of file to disk did not succeed for File IO reasons"; + return FFileHelper::SaveArrayToFile(CompressedPNG, *FinalFilename); + } + + /* + //Crashed for JPG, worked great for PNG + //Maybe also works for BMP so could offer those two as save options? + + const int32 x = Width; + const int32 y = Height; + if(ColorArray.Num() != x * y) + { + ErrorString = "Error ~ height x width is not equal to the total pixel array length!"; + return false; + } + + //Image Wrapper Module + IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked(FName("ImageWrapper")); + + //Create Compressor + IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat)); + + if(!ImageWrapper.IsValid()) + { + ErrorString = "Error ~ Image wrapper could not be created!"; + return false; + } + //~~~~~~~~~~~~~~~~~~~~~~ + + if ( ! ImageWrapper->SetRaw( + (void*)&ColorArray[0], //mem address of array start + sizeof(FColor) * x * y, //total size + x, y, //dimensions + ERGBFormat::BGRA, //LinearColor == RGBA + (sizeof(FColor) / 4) * 8 //Bits per pixel + )) { + ErrorString = "ImageWrapper::SetRaw() did not succeed"; + return false; + } + + ErrorString = "Success! or if returning false, the saving of file to disk did not succeed for File IO reasons"; + return FFileHelper::SaveArrayToFile(ImageWrapper->GetCompressed(), *FinalFilename); + */ +} + +bool UVictoryBPFunctionLibrary::Victory_GetPixelFromT2D(UTexture2D* T2D, int32 X, int32 Y, FLinearColor& PixelColor) +{ + if(!T2D) + { + return false; + } + + if(X <= -1 || Y <= -1) + { + return false; + } + + T2D->SRGB = false; + T2D->CompressionSettings = TC_VectorDisplacementmap; + + //Update settings + T2D->UpdateResource(); + + FTexture2DMipMap& MipsMap = T2D->PlatformData->Mips[0]; + int32 TextureWidth = MipsMap.SizeX; + int32 TextureHeight = MipsMap.SizeY; + + FByteBulkData* RawImageData = &MipsMap.BulkData; + + if(!RawImageData) + { + return false; + } + + FColor* RawColorArray = static_cast(RawImageData->Lock(LOCK_READ_ONLY)); + + //Safety check! + if (X >= TextureWidth || Y >= TextureHeight) + { + return false; + } + + //Get!, converting FColor to FLinearColor + PixelColor = RawColorArray[Y * TextureWidth + X]; + + RawImageData->Unlock(); + return true; +} +bool UVictoryBPFunctionLibrary::Victory_GetPixelsArrayFromT2DDynamic(UTexture2DDynamic* T2D, int32& TextureWidth, int32& TextureHeight,TArray& PixelArray) +{ + if(!T2D) + { + return false; + } + + //To prevent overflow in BP if used in a loop + PixelArray.Empty(); + + //~~~~~~~~~~~~~~~~~~~~~~ + // Modifying original here + T2D->SRGB = false; + T2D->CompressionSettings = TC_VectorDisplacementmap; + + //Update settings + T2D->UpdateResource(); + //~~~~~~~~~~~~~~~~~~~~~~ + + //Confused, DDC / platform data is invalid for dynamic, how to get its byte data? + //FTextureResource from UTexture base class? + return false; + + /* + FTexturePlatformData** PtrPtr = T2D->GetRunningPlatformData(); + if(!PtrPtr) return false; + FTexturePlatformData* Ptr = *PtrPtr; + if(!Ptr) return false; + + FTexture2DMipMap& MyMipMap = Ptr->Mips[0]; + TextureWidth = MyMipMap.SizeX; + TextureHeight = MyMipMap.SizeY; + + FByteBulkData* RawImageData = &MyMipMap.BulkData; + + if(!RawImageData) + { + return false; + } + + FColor* RawColorArray = static_cast(RawImageData->Lock(LOCK_READ_ONLY)); + + UE_LOG(LogTemp,Warning,TEXT("Victory Plugin, Get Pixels, tex width for mip %d"), TextureWidth); + UE_LOG(LogTemp,Warning,TEXT("Victory Plugin, Get Pixels, tex width from T2D ptr %d"), T2D->GetSurfaceWidth()); + + for(int32 x = 0; x < TextureWidth; x++) + { + for(int32 y = 0; y < TextureHeight; y++) + { + PixelArray.Add(RawColorArray[x * TextureWidth + y]); + } + } + + RawImageData->Unlock(); + */ + + return true; +} + +bool UVictoryBPFunctionLibrary::Victory_GetPixelsArrayFromT2D(UTexture2D* T2D, int32& TextureWidth, int32& TextureHeight,TArray& PixelArray) +{ + if(!T2D) + { + return false; + } + + //To prevent overflow in BP if used in a loop + PixelArray.Empty(); + + T2D->SRGB = false; + T2D->CompressionSettings = TC_VectorDisplacementmap; + + //Update settings + T2D->UpdateResource(); + + FTexture2DMipMap& MyMipMap = T2D->PlatformData->Mips[0]; + TextureWidth = MyMipMap.SizeX; + TextureHeight = MyMipMap.SizeY; + + FByteBulkData* RawImageData = &MyMipMap.BulkData; + + if(!RawImageData) + { + return false; + } + + FColor* RawColorArray = static_cast(RawImageData->Lock(LOCK_READ_ONLY)); + + for(int32 x = 0; x < TextureWidth; x++) + { + for(int32 y = 0; y < TextureHeight; y++) + { + PixelArray.Add(RawColorArray[x * TextureWidth + y]); + } + } + + RawImageData->Unlock(); + return true; +} + +class UAudioComponent* UVictoryBPFunctionLibrary::PlaySoundAttachedFromFile(const FString& FilePath, class USceneComponent* AttachToComponent, FName AttachPointName, FVector Location, EAttachLocation::Type LocationType, bool bStopWhenAttachedToDestroyed, float VolumeMultiplier, float PitchMultiplier, float StartTime, class USoundAttenuation* AttenuationSettings) +{ + USoundWave* sw = GetSoundWaveFromFile(FilePath); + + if (!sw) + return NULL; + + return UGameplayStatics::SpawnSoundAttached(sw, AttachToComponent, AttachPointName, Location, LocationType, bStopWhenAttachedToDestroyed, VolumeMultiplier, PitchMultiplier, StartTime, AttenuationSettings); +} + +void UVictoryBPFunctionLibrary::PlaySoundAtLocationFromFile(UObject* WorldContextObject, const FString& FilePath, FVector Location, float VolumeMultiplier, float PitchMultiplier, float StartTime, class USoundAttenuation* AttenuationSettings) +{ + USoundWave* sw = GetSoundWaveFromFile(FilePath); + + if (!sw) + return; + + UGameplayStatics::PlaySoundAtLocation(WorldContextObject, sw, Location, VolumeMultiplier, PitchMultiplier, StartTime, AttenuationSettings); +} + +class USoundWave* UVictoryBPFunctionLibrary::GetSoundWaveFromFile(const FString& FilePath) +{ + #if PLATFORM_PS4 + UE_LOG(LogTemp, Error, TEXT("UVictoryBPFunctionLibrary::GetSoundWaveFromFile ~ vorbis-method not supported on PS4. See UVictoryBPFunctionLibrary::fillSoundWaveInfo")); + return nullptr; + #else + USoundWave* sw = NewObject(USoundWave::StaticClass()); + + if (!sw) + return NULL; + + //* If true the song was successfully loaded + bool loaded = false; + + //* loaded song file (binary, encoded) + TArray < uint8 > rawFile; + + loaded = FFileHelper::LoadFileToArray(rawFile, FilePath.GetCharArray().GetData()); + + if (loaded) + { + FByteBulkData* bulkData = &sw->CompressedFormatData.GetFormat(TEXT("OGG")); + + bulkData->Lock(LOCK_READ_WRITE); + FMemory::Memcpy(bulkData->Realloc(rawFile.Num()), rawFile.GetData(), rawFile.Num()); + bulkData->Unlock(); + + loaded = fillSoundWaveInfo(sw, &rawFile) == 0 ? true : false; + } + + if (!loaded) + return NULL; + + return sw; + #endif +} + +#if !PLATFORM_PS4 +int32 UVictoryBPFunctionLibrary::fillSoundWaveInfo(class USoundWave* sw, TArray* rawFile) +{ + FSoundQualityInfo info; + FVorbisAudioInfo vorbis_obj; + if (!vorbis_obj.ReadCompressedInfo(rawFile->GetData(), rawFile->Num(), &info)) + { + //Debug("Can't load header"); + return 1; + } + + if(!sw) return 1; + sw->SoundGroup = ESoundGroup::SOUNDGROUP_Default; + sw->NumChannels = info.NumChannels; + sw->Duration = info.Duration; + sw->RawPCMDataSize = info.SampleDataSize; + sw->SampleRate = info.SampleRate; + + return 0; +} + + +int32 UVictoryBPFunctionLibrary::findSource(class USoundWave* sw, class FSoundSource* out_audioSource) +{ + FAudioDevice* device = GEngine ? GEngine->GetMainAudioDevice() : NULL; //gently ask for the audio device + + FActiveSound* activeSound; + FSoundSource* audioSource; + FWaveInstance* sw_instance; + if (!device) + { + activeSound = NULL; + audioSource = NULL; + out_audioSource = audioSource; + return -1; + } + + TArray tmpActualSounds = device->GetActiveSounds(); + if (tmpActualSounds.Num()) + { + for (auto activeSoundIt(tmpActualSounds.CreateIterator()); activeSoundIt; ++activeSoundIt) + { + activeSound = *activeSoundIt; + for (auto WaveInstanceIt(activeSound->WaveInstances.CreateIterator()); WaveInstanceIt; ++WaveInstanceIt) + { + sw_instance = WaveInstanceIt.Value(); + if (sw_instance->WaveData->CompressedDataGuid == sw->CompressedDataGuid) + { + audioSource = device->GetSoundSource(sw_instance); //4.13 onwards, <3 Rama + out_audioSource = audioSource; + return 0; + } + } + } + } + + audioSource = NULL; + activeSound = NULL; + out_audioSource = audioSource; + return -2; +} +#endif //PLATFORM_PS4 + +//~~~ Kris ~~~ + +bool UVictoryBPFunctionLibrary::Array_IsValidIndex(const TArray& TargetArray, int32 Index) +{ + // We should never hit these! They're stubs to avoid NoExport on the class. Call the Generic* equivalent instead + check(0); + return false; +} + +bool UVictoryBPFunctionLibrary::GenericArray_IsValidIndex(void* TargetArray, const UArrayProperty* ArrayProp, int32 Index) +{ + bool bResult = false; + + if (TargetArray) + { + FScriptArrayHelper ArrayHelper(ArrayProp, TargetArray); + bResult = ArrayHelper.IsValidIndex(Index); + } + + return bResult; +} + +float UVictoryBPFunctionLibrary::GetCreationTime(const AActor* Target) +{ + return (Target) ? Target->CreationTime : 0.0f; +} + +float UVictoryBPFunctionLibrary::GetTimeAlive(const AActor* Target) +{ + return (Target) ? (Target->GetWorld()->GetTimeSeconds() - Target->CreationTime) : 0.0f; +} + +bool UVictoryBPFunctionLibrary::CaptureComponent2D_Project(class USceneCaptureComponent2D* Target, FVector Location, FVector2D& OutPixelLocation) +{ + if ((Target == nullptr) || (Target->TextureTarget == nullptr)) + { + return false; + } + + const FTransform& Transform = Target->GetComponentToWorld(); + FMatrix ViewMatrix = Transform.ToInverseMatrixWithScale(); + FVector ViewLocation = Transform.GetTranslation(); + + // swap axis st. x=z,y=x,z=y (unreal coord space) so that z is up + ViewMatrix = ViewMatrix * FMatrix( + FPlane(0, 0, 1, 0), + FPlane(1, 0, 0, 0), + FPlane(0, 1, 0, 0), + FPlane(0, 0, 0, 1)); + + const float FOV = Target->FOVAngle * (float)PI / 360.0f; + + FIntPoint CaptureSize(Target->TextureTarget->GetSurfaceWidth(), Target->TextureTarget->GetSurfaceHeight()); + + float XAxisMultiplier; + float YAxisMultiplier; + + if (CaptureSize.X > CaptureSize.Y) + { + // if the viewport is wider than it is tall + XAxisMultiplier = 1.0f; + YAxisMultiplier = CaptureSize.X / (float)CaptureSize.Y; + } + else + { + // if the viewport is taller than it is wide + XAxisMultiplier = CaptureSize.Y / (float)CaptureSize.X; + YAxisMultiplier = 1.0f; + } + + FMatrix ProjectionMatrix = FReversedZPerspectiveMatrix ( + FOV, + FOV, + XAxisMultiplier, + YAxisMultiplier, + GNearClippingPlane, + GNearClippingPlane + ); + + FMatrix ViewProjectionMatrix = ViewMatrix * ProjectionMatrix; + + FVector4 ScreenPoint = ViewProjectionMatrix.TransformFVector4(FVector4(Location,1)); + + if (ScreenPoint.W > 0.0f) + { + float InvW = 1.0f / ScreenPoint.W; + float Y = (GProjectionSignY > 0.0f) ? ScreenPoint.Y : 1.0f - ScreenPoint.Y; + FIntRect ViewRect = FIntRect(0, 0, CaptureSize.X, CaptureSize.Y); + OutPixelLocation = FVector2D( + ViewRect.Min.X + (0.5f + ScreenPoint.X * 0.5f * InvW) * ViewRect.Width(), + ViewRect.Min.Y + (0.5f - Y * 0.5f * InvW) * ViewRect.Height() + ); + return true; + } + + return false; +} + +bool UVictoryBPFunctionLibrary::Capture2D_Project(class ASceneCapture2D* Target, FVector Location, FVector2D& OutPixelLocation) +{ + return (Target) ? CaptureComponent2D_Project(Target->GetCaptureComponent2D(), Location, OutPixelLocation) : false; +} + +static TSharedPtr GetImageWrapperByExtention(const FString InImagePath) +{ + IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked(FName("ImageWrapper")); + if (InImagePath.EndsWith(".png")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG); + } + else if (InImagePath.EndsWith(".jpg") || InImagePath.EndsWith(".jpeg")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG); + } + else if (InImagePath.EndsWith(".bmp")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::BMP); + } + else if (InImagePath.EndsWith(".ico")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICO); + } + else if (InImagePath.EndsWith(".exr")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::EXR); + } + else if (InImagePath.EndsWith(".icns")) + { + return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICNS); + } + + return nullptr; +} + +bool UVictoryBPFunctionLibrary::CaptureComponent2D_SaveImage(class USceneCaptureComponent2D* Target, const FString ImagePath, const FLinearColor ClearColour) +{ + // Bad scene capture component! No render target! Stay! Stay! Ok, feed!... wait, where was I? + if ((Target == nullptr) || (Target->TextureTarget == nullptr)) + { + return false; + } + + FRenderTarget* RenderTarget = Target->TextureTarget->GameThread_GetRenderTargetResource(); + if (RenderTarget == nullptr) + { + return false; + } + + TArray RawPixels; + + // Format not supported - use PF_B8G8R8A8. + if (Target->TextureTarget->GetFormat() != PF_B8G8R8A8) + { + // TRACEWARN("Format not supported - use PF_B8G8R8A8."); + return false; + } + + if (!RenderTarget->ReadPixels(RawPixels)) + { + return false; + } + + // Convert to FColor. + FColor ClearFColour = ClearColour.ToFColor(false); // FIXME - want sRGB or not? + + for (auto& Pixel : RawPixels) + { + // Switch Red/Blue changes. + const uint8 PR = Pixel.R; + const uint8 PB = Pixel.B; + Pixel.R = PB; + Pixel.B = PR; + + // Set alpha based on RGB values of ClearColour. + Pixel.A = ((Pixel.R == ClearFColour.R) && (Pixel.G == ClearFColour.G) && (Pixel.B == ClearFColour.B)) ? 0 : 255; + } + + TSharedPtr ImageWrapper = GetImageWrapperByExtention(ImagePath); + + const int32 Width = Target->TextureTarget->SizeX; + const int32 Height = Target->TextureTarget->SizeY; + + if (ImageWrapper.IsValid() && ImageWrapper->SetRaw(&RawPixels[0], RawPixels.Num() * sizeof(FColor), Width, Height, ERGBFormat::RGBA, 8)) + { + FFileHelper::SaveArrayToFile(ImageWrapper->GetCompressed(), *ImagePath); + return true; + } + + return false; +} + +bool UVictoryBPFunctionLibrary::Capture2D_SaveImage(class ASceneCapture2D* Target, const FString ImagePath, const FLinearColor ClearColour) +{ + return (Target) ? CaptureComponent2D_SaveImage(Target->GetCaptureComponent2D(), ImagePath, ClearColour) : false; +} + +UTexture2D* UVictoryBPFunctionLibrary::LoadTexture2D_FromFileByExtension(const FString& ImagePath, bool& IsValid, int32& OutWidth, int32& OutHeight) +{ + UTexture2D* Texture = nullptr; + IsValid = false; + + // To avoid log spam, make sure it exists before doing anything else. + if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*ImagePath)) + { + return nullptr; + } + + TArray CompressedData; + if (!FFileHelper::LoadFileToArray(CompressedData, *ImagePath)) + { + return nullptr; + } + + TSharedPtr ImageWrapper = GetImageWrapperByExtention(ImagePath); + + if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(CompressedData.GetData(), CompressedData.Num())) + { + const TArray* UncompressedRGBA = nullptr; + + if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA)) + { + Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8); + + if (Texture != nullptr) + { + IsValid = true; + + OutWidth = ImageWrapper->GetWidth(); + OutHeight = ImageWrapper->GetHeight(); + + void* TextureData = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE); + FMemory::Memcpy(TextureData, UncompressedRGBA->GetData(), UncompressedRGBA->Num()); + Texture->PlatformData->Mips[0].BulkData.Unlock(); + Texture->UpdateResource(); + } + } + } + + return Texture; +} + +UUserWidget* UVictoryBPFunctionLibrary::GetFirstWidgetOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass, bool TopLevelOnly) +{ + if (!WidgetClass || !WorldContextObject) + { + return nullptr; + } + + const UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + if (!World) + { + return nullptr; + } + + UUserWidget* ResultWidget = nullptr; + for (TObjectIterator Itr; Itr; ++Itr) + { + UUserWidget* LiveWidget = *Itr; + + // Skip any widget that's not in the current world context. + if (LiveWidget->GetWorld() != World) + { + continue; + } + + // Skip any widget that is not a child of the class specified. + if (!LiveWidget->GetClass()->IsChildOf(WidgetClass)) + { + continue; + } + + if (!TopLevelOnly || LiveWidget->IsInViewport()) + { + ResultWidget = LiveWidget; + break; + } + } + + return ResultWidget; +} + +bool UVictoryBPFunctionLibrary::WidgetIsChildOf(UWidget* ChildWidget, UWidget* PossibleParent) +{ + return (ChildWidget && PossibleParent) ? ChildWidget->IsChildOf(PossibleParent) : false; +} + +UUserWidget* UVictoryBPFunctionLibrary::WidgetGetParentOfClass(UWidget* ChildWidget, TSubclassOf WidgetClass) +{ + UUserWidget* ResultParent = nullptr; + + if (ChildWidget && WidgetClass) + { + UWidget* PossibleParent = ChildWidget->GetParent(); + UWidget* NextPossibleParent = nullptr; + int32 count = 0; + + while (PossibleParent != nullptr) + { + // Return once we find a parent of the desired class. + if (PossibleParent->GetClass()->IsChildOf(WidgetClass)) + { + ResultParent = Cast(PossibleParent); + break; + } + + NextPossibleParent = PossibleParent->GetParent(); + + // If we don't have a parent, follow the outer chain until we find another widget, if at all. + if (NextPossibleParent == nullptr) + { + UWidgetTree* WidgetTree = Cast(PossibleParent->GetOuter()); + if (WidgetTree) + { + NextPossibleParent = Cast(WidgetTree->GetOuter()); + } + } + + PossibleParent = NextPossibleParent; + } + } + + return ResultParent; +} + +void UVictoryBPFunctionLibrary::WidgetGetChildrenOfClass(UWidget* ParentWidget, TArray& ChildWidgets, TSubclassOf WidgetClass, bool bImmediateOnly) +{ + ChildWidgets.Empty(); + + if (ParentWidget && WidgetClass) + { + // Current set of widgets to check + TInlineComponentArray WidgetsToCheck; + + // Set of all widgets we have checked + TInlineComponentArray CheckedWidgets; + + WidgetsToCheck.Push(ParentWidget); + + // While still work left to do + while (WidgetsToCheck.Num() > 0) + { + // Get the next widgets off the queue + const bool bAllowShrinking = false; + UWidget* PossibleParent = WidgetsToCheck.Pop(bAllowShrinking); + + // Add it to the 'checked' set, should not already be there! + if (!CheckedWidgets.Contains(PossibleParent)) + { + CheckedWidgets.Add(PossibleParent); + + TArray Widgets; + + UWidgetTree::GetChildWidgets(PossibleParent, Widgets); + + for (UWidget* Widget : Widgets) + { + if (!CheckedWidgets.Contains(Widget)) + { + // Add any widget that is a child of the class specified. + if (Widget->GetClass()->IsChildOf(WidgetClass)) + { + ChildWidgets.Add(Cast(Widget)); + } + + // If we're not just looking for our immediate children, + // add this widget to list of widgets to check next. + if (!bImmediateOnly) + { + WidgetsToCheck.Push(Widget); + } + } + } + + if (bImmediateOnly) + { + break; + } + } + } + } +} + +UWidget* UVictoryBPFunctionLibrary::GetWidgetFromName(UUserWidget* ParentUserWidget, const FName& Name) +{ + UWidget* ResultWidget = nullptr; + + if (ParentUserWidget && (Name != NAME_None)) + { + ResultWidget = ParentUserWidget->GetWidgetFromName(Name); + } + + return ResultWidget; +} + +uint8 UVictoryBPFunctionLibrary::GetGenericTeamId(AActor* Target) +{ + IGenericTeamAgentInterface* TeamAgentInterface = nullptr; + if (Target) + { + TeamAgentInterface = Cast(Target); + } + return (TeamAgentInterface != nullptr) ? TeamAgentInterface->GetGenericTeamId() : FGenericTeamId::NoTeam; +} + +void UVictoryBPFunctionLibrary::SetGenericTeamId(AActor* Target, uint8 NewTeamId) +{ + if (Target) + { + IGenericTeamAgentInterface* TeamAgentInterface = Cast(Target); + if (TeamAgentInterface != nullptr) + { + TeamAgentInterface->SetGenericTeamId(NewTeamId); + } + } +} + +FLevelStreamInstanceInfo::FLevelStreamInstanceInfo(ULevelStreamingKismet* LevelInstance) +{ + PackageName = LevelInstance->GetWorldAssetPackageFName(); + PackageNameToLoad = LevelInstance->PackageNameToLoad; + Location = LevelInstance->LevelTransform.GetLocation(); + Rotation = LevelInstance->LevelTransform.GetRotation().Rotator(); + bShouldBeLoaded = LevelInstance->bShouldBeLoaded; + bShouldBeVisible = LevelInstance->bShouldBeVisible; + bShouldBlockOnLoad = LevelInstance->bShouldBlockOnLoad; + LODIndex = LevelInstance->LevelLODIndex; +}; + +FLevelStreamInstanceInfo UVictoryBPFunctionLibrary::GetLevelInstanceInfo(ULevelStreamingKismet* LevelInstance) +{ + return FLevelStreamInstanceInfo(LevelInstance); +} + +void UVictoryBPFunctionLibrary::AddToStreamingLevels(UObject* WorldContextObject, const FLevelStreamInstanceInfo& LevelInstanceInfo) +{ + bool bResult = true; + + UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + + if (World != nullptr) + { + bool bAlreadyExists = false; + + for (auto StreamingLevel : World->StreamingLevels) + { + if (StreamingLevel->GetWorldAssetPackageFName() == LevelInstanceInfo.PackageName) + { + bAlreadyExists = true; + // KRIS : Would normally log a warning here! Is there a LogVictory? + break; + } + } + + if (!bAlreadyExists) + { + FName PackageName = LevelInstanceInfo.PackageName; + + // For PIE Networking: remap the packagename to our local PIE packagename + FString PackageNameStr = PackageName.ToString(); + if (GEngine->NetworkRemapPath(World->GetNetDriver(), PackageNameStr, true)) + { + PackageName = FName(*PackageNameStr); + } + + GEngine->DelayGarbageCollection(); + + // Setup streaming level object that will load specified map + ULevelStreamingKismet* StreamingLevel = NewObject(World, ULevelStreamingKismet::StaticClass(), NAME_None, RF_Transient, nullptr); + StreamingLevel->SetWorldAssetByPackageName(PackageName); + StreamingLevel->LevelColor = FColor::MakeRandomColor(); + StreamingLevel->bShouldBeLoaded = LevelInstanceInfo.bShouldBeLoaded; + StreamingLevel->bShouldBeVisible = LevelInstanceInfo.bShouldBeVisible; + StreamingLevel->bShouldBlockOnLoad = LevelInstanceInfo.bShouldBlockOnLoad; + StreamingLevel->bInitiallyLoaded = true; + StreamingLevel->bInitiallyVisible = true; + + // Transform + StreamingLevel->LevelTransform = FTransform(LevelInstanceInfo.Rotation, LevelInstanceInfo.Location); + + // Map to Load + StreamingLevel->PackageNameToLoad = LevelInstanceInfo.PackageNameToLoad; + + // Add the new level to world. + World->StreamingLevels.Add(StreamingLevel); + + World->FlushLevelStreaming(EFlushLevelStreamingType::Full); + } + } +} + + +void UVictoryBPFunctionLibrary::RemoveFromStreamingLevels(UObject* WorldContextObject, const FLevelStreamInstanceInfo& LevelInstanceInfo) +{ + + UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull); + + // Check if the world exists and we have a level to unload + if (World != nullptr && !LevelInstanceInfo.PackageName.IsNone()) + { + +#if WITH_EDITOR + // If we are using the editor we will use this lambda to remove the play in editor string + auto GetCorrectPackageName = [&]( FName PackageName) { + FString PackageNameStr = PackageName.ToString(); + if (GEngine->NetworkRemapPath(World->GetNetDriver(), PackageNameStr, true)) + { + PackageName = FName(*PackageNameStr); + } + + return PackageName; + }; +#endif + + // Get the package name that we want to check + FName PackageNameToCheck = LevelInstanceInfo.PackageName; + +#if WITH_EDITOR + // Remove the play in editor string and client id to be able to use it with replication + PackageNameToCheck = GetCorrectPackageName(PackageNameToCheck); +#endif + + // Find the level to unload + for (auto StreamingLevel : World->StreamingLevels) + { + + FName LoadedPackageName = StreamingLevel->GetWorldAssetPackageFName(); + +#if WITH_EDITOR + // Remove the play in editor string and client id to be able to use it with replication + LoadedPackageName = GetCorrectPackageName(LoadedPackageName); +#endif + + // If we find the level unload it and break + if(PackageNameToCheck == LoadedPackageName) + { + // This unload the level + StreamingLevel->bShouldBeLoaded = false; + StreamingLevel->bShouldBeVisible = false; + // This removes the level from the streaming level list + StreamingLevel->bIsRequestingUnloadAndRemoval = true; + // Force a refresh of the world + World->FlushLevelStreaming(EFlushLevelStreamingType::Full); + break; + } + } + } +} + +bool UVictoryBPFunctionLibrary::GenericArray_SortCompare(const UProperty* LeftProperty, void* LeftValuePtr, const UProperty* RightProperty, void* RightValuePtr) +{ + bool bResult = false; + + if (const UNumericProperty *LeftNumericProperty = Cast(LeftProperty)) + { + if (LeftNumericProperty->IsFloatingPoint()) + { + bResult = (LeftNumericProperty->GetFloatingPointPropertyValue(LeftValuePtr) < Cast(RightProperty)->GetFloatingPointPropertyValue(RightValuePtr)); + } + else if (LeftNumericProperty->IsInteger()) + { + bResult = (LeftNumericProperty->GetSignedIntPropertyValue(LeftValuePtr) < Cast(RightProperty)->GetSignedIntPropertyValue(RightValuePtr)); + } + } + else if (const UBoolProperty* LeftBoolProperty = Cast(LeftProperty)) + { + bResult = (!LeftBoolProperty->GetPropertyValue(LeftValuePtr) && Cast(RightProperty)->GetPropertyValue(RightValuePtr)); + } + else if (const UNameProperty* LeftNameProperty = Cast(LeftProperty)) + { + bResult = (LeftNameProperty->GetPropertyValue(LeftValuePtr).ToString() < Cast(RightProperty)->GetPropertyValue(RightValuePtr).ToString()); + } + else if (const UStrProperty* LeftStringProperty = Cast(LeftProperty)) + { + bResult = (LeftStringProperty->GetPropertyValue(LeftValuePtr) < Cast(RightProperty)->GetPropertyValue(RightValuePtr)); + } + else if (const UTextProperty* LeftTextProperty = Cast(LeftProperty)) + { + bResult = (LeftTextProperty->GetPropertyValue(LeftValuePtr).ToString() < Cast(RightProperty)->GetPropertyValue(RightValuePtr).ToString()); + } + + return bResult; +} + +void UVictoryBPFunctionLibrary::GenericArray_Sort(void* TargetArray, const UArrayProperty* ArrayProp, bool bAscendingOrder /* = true */, FName VariableName /* = NAME_None */) +{ + if (TargetArray) + { + FScriptArrayHelper ArrayHelper(ArrayProp, TargetArray); + const int32 LastIndex = ArrayHelper.Num(); + + if (const UObjectProperty* ObjectProperty = Cast(ArrayProp->Inner)) + { + for (int32 i = 0; i < LastIndex; ++i) + { + for (int32 j = 0; j < LastIndex - 1 - i; ++j) + { + UObject* LeftObject = ObjectProperty->GetObjectPropertyValue(ArrayHelper.GetRawPtr(j)); + UObject* RightObject = ObjectProperty->GetObjectPropertyValue(ArrayHelper.GetRawPtr(j + 1)); + + UProperty* LeftProperty = FindField(LeftObject->GetClass(), VariableName); + UProperty* RightProperty = FindField(RightObject->GetClass(), VariableName); + + if (LeftProperty && RightProperty) + { + void* LeftValuePtr = LeftProperty->ContainerPtrToValuePtr(LeftObject); + void* RightValuePtr = RightProperty->ContainerPtrToValuePtr(RightObject); + + if (GenericArray_SortCompare(LeftProperty, LeftValuePtr, RightProperty, RightValuePtr) != bAscendingOrder) + { + ArrayHelper.SwapValues(j, j + 1); + } + } + } + } + } + else + { + UProperty* Property = nullptr; + + if (const UStructProperty* StructProperty = Cast(ArrayProp->Inner)) + { + Property = FindField(StructProperty->Struct, VariableName); + } + else + { + Property = ArrayProp->Inner; + } + + if (Property) + { + for (int32 i = 0; i < LastIndex; ++i) + { + for (int32 j = 0; j < LastIndex - 1 - i; ++j) + { + void* LeftValuePtr = Property->ContainerPtrToValuePtr(ArrayHelper.GetRawPtr(j)); + void* RightValuePtr = Property->ContainerPtrToValuePtr(ArrayHelper.GetRawPtr(j + 1)); + + if (GenericArray_SortCompare(Property, LeftValuePtr, Property, RightValuePtr) != bAscendingOrder) + { + ArrayHelper.SwapValues(j, j + 1); + } + } + } + } + } + } +} + +void UVictoryBPFunctionLibrary::Array_Sort(const TArray& TargetArray, bool bAscendingOrder /* = true */, FName VariableName /* = NAME_None */) +{ + // We should never hit these! They're stubs to avoid NoExport on the class. Call the Generic* equivalent instead + check(0); +} + +void UVictoryBPFunctionLibrary::Actor_PrestreamTextures(AActor* Target, float Seconds, bool bEnableStreaming /*= true*/, int32 CinematicTextureGroups /*= 0*/) +{ + if (Target != nullptr) + { + Target->PrestreamTextures(Seconds, bEnableStreaming, CinematicTextureGroups); + } +} + +void UVictoryBPFunctionLibrary::Component_PrestreamTextures(UMeshComponent* Target, float Seconds, bool bEnableStreaming /*= true*/, int32 CinematicTextureGroups /*= 0*/) +{ + if ((Target != nullptr) && (Target->IsRegistered())) + { + float Duration = Seconds; + + if (bEnableStreaming) + { + // A Seconds==0.0f, it means infinite (e.g. 30 days) + Duration = FMath::IsNearlyZero(Seconds) ? (60.0f*60.0f*24.0f*30.0f) : Seconds; + } + + Target->PrestreamTextures(Duration, false, CinematicTextureGroups); + } +} + +bool UVictoryBPFunctionLibrary::GetViewportPosition(UObject* WorldContextObject, const FVector2D& ScreenPosition, FVector2D& OutViewportPosition) +{ + OutViewportPosition = FVector2D::ZeroVector; + + if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull)) + { + FVector2D ViewportSize; + World->GetGameViewport()->GetViewportSize(ViewportSize); + OutViewportPosition = World->GetGameViewport()->Viewport->VirtualDesktopPixelToViewport(FIntPoint(ScreenPosition.X, ScreenPosition.Y)) * ViewportSize; + } + + return !OutViewportPosition.IsZero(); +} + +bool UVictoryBPFunctionLibrary::GetViewportPositionHitResultByChannel(UObject* WorldContextObject, const FVector2D& ViewportPosition, ECollisionChannel TraceChannel, bool bTraceComplex, FHitResult& OutHitResult) +{ + bool bResult = false; + + if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull)) + { + bResult = World->GetFirstPlayerController()->GetHitResultAtScreenPosition(ViewportPosition, TraceChannel, bTraceComplex, OutHitResult); + } + + if (!bResult) // For Blueprint users + { + OutHitResult = FHitResult(); + } + + return bResult; +} + +bool UVictoryBPFunctionLibrary::ViewportPositionDeproject(UObject* WorldContextObject, const FVector2D& ViewportPosition, FVector& OutWorldOrigin, FVector& OutWorldDirection) +{ + bool bResult = false; + + if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::ReturnNull)) + { + bResult = UGameplayStatics::DeprojectScreenToWorld(World->GetFirstPlayerController(), ViewportPosition, OutWorldOrigin, OutWorldDirection); + } + + return bResult; +} + +UPanelSlot* UVictoryBPFunctionLibrary::InsertChildAt(UWidget* Parent, int32 Index, UWidget* Content) +{ + UPanelSlot* ResultSlot = nullptr; + + if (Parent && Content) + { + if (UPanelWidget* PanelWidget = Cast(Parent)) + { + Index = FMath::Clamp(Index, 0, FMath::Max(0, PanelWidget->GetChildrenCount() - 1)); + + if (PanelWidget->GetChildIndex(Content) != Index) + { + ResultSlot = PanelWidget->AddChild(Content); + + UWidget* SlotContent = nullptr; + + for (int32 i = Index; i < PanelWidget->GetChildrenCount(); ++i) + { + SlotContent = PanelWidget->GetChildAt(Index); + if (SlotContent == Content) + { + break; + } + PanelWidget->RemoveChild(SlotContent); + PanelWidget->AddChild(SlotContent); + } + } + } + } + + return ResultSlot; +} + +void UVictoryBPFunctionLibrary::FlushPressedKeys(class APlayerController* PlayerController) +{ + if (PlayerController) + { + PlayerController->FlushPressedKeys(); + } +} + +FVector UVictoryBPFunctionLibrary::GetVectorRelativeLocation(FVector ParentLocation, FRotator ParentRotation, FVector ChildLocation) +{ + return ParentRotation.UnrotateVector(ChildLocation - ParentLocation); +} + +FVector UVictoryBPFunctionLibrary::GetComponentRelativeLocation(class USceneComponent* ParentComponent, class USceneComponent* ChildComponent) +{ + return (ParentComponent && ChildComponent) ? GetVectorRelativeLocation(ParentComponent->GetComponentLocation(), ParentComponent->GetComponentRotation(), ChildComponent->GetComponentLocation()) : FVector::ZeroVector; +} + +FVector UVictoryBPFunctionLibrary::GetActorRelativeLocation(class AActor* ParentActor, class AActor* ChildActor) +{ + return (ParentActor && ChildActor) ? GetVectorRelativeLocation(ParentActor->GetActorLocation(), ParentActor->GetActorRotation(), ChildActor->GetActorLocation()) : FVector::ZeroVector; +} + +FRotator UVictoryBPFunctionLibrary::GetRotatorRelativeRotation(FRotator ParentRotation, FRotator ChildRotation) +{ + const FRotator RelativeRotation = (FQuatRotationMatrix(ChildRotation.Quaternion()) * FQuatRotationMatrix(ParentRotation.Quaternion()).GetTransposed()).Rotator(); + + return RelativeRotation; +} + +FRotator UVictoryBPFunctionLibrary::GetComponentRelativeRotation(class USceneComponent* ParentComponent, class USceneComponent* ChildComponent) +{ + return (ParentComponent && ChildComponent) ? GetRotatorRelativeRotation(ParentComponent->GetComponentRotation(), ChildComponent->GetComponentRotation()) : FRotator::ZeroRotator; +} + +FRotator UVictoryBPFunctionLibrary::GetActorRelativeRotation(class AActor* ParentActor, class AActor* ChildActor) +{ + return (ParentActor && ChildActor) ? GetRotatorRelativeRotation(ParentActor->GetActorRotation(), ChildActor->GetActorRotation()) : FRotator::ZeroRotator; +} + +float UVictoryBPFunctionLibrary::HorizontalFOV(float VerticalFOV, float AspectRatio) +{ + VerticalFOV = FMath::DegreesToRadians(VerticalFOV); + return FMath::RadiansToDegrees(2 * FMath::Atan2(FMath::Tan(VerticalFOV * 0.5f) * AspectRatio, 1)); +} + +float UVictoryBPFunctionLibrary::VerticalFOV(float HorizontalFOV, float AspectRatio) +{ + HorizontalFOV = FMath::DegreesToRadians(HorizontalFOV); + return FMath::RadiansToDegrees(2 * FMath::Atan2(FMath::Tan(HorizontalFOV * 0.5f) * (1 / AspectRatio), 1)); +} + +bool UVictoryBPFunctionLibrary::StringIsEmpty(const FString& Target) +{ + return Target.IsEmpty(); +} + +//~~~~~~~~~ END OF CONTRIBUTED BY KRIS ~~~~~~~~~~~ + + + +//~~~ Inspired by Sahkan ~~~ +void UVictoryBPFunctionLibrary::Actor__GetAttachedActors(AActor* ParentActor,TArray& ActorsArray) +{ + if(!ParentActor) return; + //~~~~~~~~~~~~ + + ActorsArray.Empty(); + ParentActor->GetAttachedActors(ActorsArray); +} + +void UVictoryBPFunctionLibrary::SetBloomIntensity(APostProcessVolume* PostProcessVolume,float Intensity) +{ + if(!PostProcessVolume) return; + //~~~~~~~~~~~~~~~~ + + PostProcessVolume->Settings.bOverride_BloomIntensity = true; + PostProcessVolume->Settings.BloomIntensity = Intensity; +} + + +//~~~ Key To Truth ~~~ +//.cpp +//Append different text strings with optional pins. +FString UVictoryBPFunctionLibrary::AppendMultiple(FString A, FString B) +{ + FString Result = ""; + + Result += A; + Result += B; + + return Result; +} + +//~~~ Mhousse ~~~ + + +//TESTING +static void TESTINGInternalDrawDebugCircle(const UWorld* InWorld, const FMatrix& TransformMatrix, float Radius, int32 Segments, const FColor& Color, bool bPersistentLines, float LifeTime, uint8 DepthPriority, float Thickness=0) +{ + //this is how you can make cpp only internal functions! + +} + + + +#undef LOCTEXT_NAMESPACE diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary_WinOS.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary_WinOS.cpp new file mode 100644 index 0000000..6371875 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary_WinOS.cpp @@ -0,0 +1,65 @@ +/* + By Rama +*/ + +#include "VictoryBPLibraryPrivatePCH.h" +#include "VictoryBPFunctionLibrary.h" + +#if PLATFORM_WINDOWS +#include "AllowWindowsPlatformTypes.h" +//#include "AdditionalWindowsHeaders.h" +#endif + +void UVictoryBPFunctionLibrary::FlashGameOnTaskBar(APlayerController* PC, bool FlashContinuous, int32 MaxFlashCount, int32 FlashFrequencyMilliseconds) +{ + #if PLATFORM_WINDOWS + if(!PC) return; + + //Local Player + ULocalPlayer* VictoryPlayer = Cast(PC->Player); + if(!VictoryPlayer) return; + + //Game Viewport Client + UGameViewportClient* GameViewport = Cast(VictoryPlayer->ViewportClient); + if(!GameViewport) return; + + //Slate Game Window + TSharedPtr< SWindow > GWSlate = GameViewport->GetWindow(); + if(!GWSlate.IsValid()) return; + + //Native OS Window + TSharedPtr GW = GWSlate->GetNativeWindow(); + if(!GW.IsValid()) return; + + //Windows + FLASHWINFO fi; + fi.cbSize = sizeof(FLASHWINFO); + fi.hwnd = (HWND)GW->GetOSWindowHandle(); + fi.dwFlags = FLASHW_ALL; + + //Continuous? <3 Rama + if(FlashContinuous) + { + fi.dwFlags |= FLASHW_TIMERNOFG; + fi.uCount = 0; + fi.dwTimeout = 0; + } + else + { + fi.uCount = MaxFlashCount; + fi.dwTimeout = FlashFrequencyMilliseconds; + } + + FlashWindowEx(&fi); + #endif + + //<3 Rama +} + + + + + +#if PLATFORM_WINDOWS +#include "HideWindowsPlatformTypes.h" +#endif diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPHTML.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPHTML.cpp new file mode 100644 index 0000000..dc641dc --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPHTML.cpp @@ -0,0 +1,45 @@ +/* + By Rama +*/ +#include "VictoryBPLibraryPrivatePCH.h" +#include "VictoryBPHTML.h" + +#if PLATFORM_HTML5 + #include "SDL_opengl.h" + + DEFINE_LOG_CATEGORY_STATIC(VictoryPluginHTML, Log, All); + + #include "emscripten.h" + #include "html5.h" +#endif + +bool UVictoryBPHTML::IsHTML() +{ + #if PLATFORM_HTML5 + return true; + #else + return false; + #endif //HTML +} + +void UVictoryBPHTML::VictoryHTML5_SetCursorVisible(bool MakeVisible) +{ + if(MakeVisible) + { + #if PLATFORM_HTML5 + { + emscripten_exit_pointerlock(); + UE_LOG(VictoryPluginHTML, Warning, TEXT("Exiting Pointer Lock")); + } + #endif + } + else + { + #if PLATFORM_HTML5 + { + emscripten_request_pointerlock ( "#canvas" , true); + UE_LOG(VictoryPluginHTML, Warning, TEXT("Entering Pointer Lock")); + } + #endif + } +} \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibrary.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibrary.cpp new file mode 100644 index 0000000..329484a --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibrary.cpp @@ -0,0 +1,24 @@ +/* + By Rama +*/ +#include "VictoryBPLibraryPrivatePCH.h" + +#define LOCTEXT_NAMESPACE "FVictoryBPLibraryModule" + + +void FVictoryBPLibraryModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module + +} + +void FVictoryBPLibraryModule::ShutdownModule() +{ + // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, + // we call this function before unloading the module. + +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FVictoryBPLibraryModule, VictoryBPLibrary) \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibraryPrivatePCH.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibraryPrivatePCH.h new file mode 100644 index 0000000..baef7e2 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPLibraryPrivatePCH.h @@ -0,0 +1,4 @@ +/* + By Rama +*/ +#include "VictoryBPLibrary.h" \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/TKMathFunctionLibrary.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/TKMathFunctionLibrary.h new file mode 100644 index 0000000..76feae4 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/TKMathFunctionLibrary.h @@ -0,0 +1,265 @@ +/* + By TK-Master +*/ +#pragma once + +//For the Anchor Conversion +#include "Runtime/UMG/Public/UMG.h" + +#include "TKMathFunctionLibrary.generated.h" + +/* Speed Units Enum. */ +UENUM() +enum ESpeedUnit +{ + /* Centimeter / second (cm/s). This is default unreal velocity unit. */ + CentimeterPerSecond, + + /* Foot / second (ft/s). */ + FootPerSecond, + + /* Meter / second (m/s). */ + MeterPerSecond, + + /* Meter / minute (m/min). */ + MeterPerMinute, + + /* Kilometer / second (km/s). */ + KilometerPerSecond, + + /* Kilometer / minute (km/min). */ + KilometerPerMinute, + + /*Kilometer / hour (km/h). */ + KilometerPerHour, + + /* Mile / hour (mph). */ + MilePerHour, + + /* Knot (kn). Nautical mile per hour. */ + Knot, + + /* Mach (speed of sound) (M) at standard atm. */ + Mach, + + /* Speed of light. */ + SpeedOfLight, + + /* Yard / second. */ + YardPerSecond +}; + + +UCLASS() +class VICTORYBPLIBRARY_API UTKMathFunctionLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Console") + static float GetConsoleVariableFloat(FString VariableName); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Console") + static int32 GetConsoleVariableInt(FString VariableName); + + //Reverses the sign (- or +) of a float. + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Float") + static float NegateFloat(float A); + + //Reverses the sign (- or +) of an integer. + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Integer") + static int32 NegateInt(int32 A); + + //Reverses the sign (- or +) of a Vector2D. + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector2D") + static FVector2D NegateVector2D(FVector2D A); + + //Changes the size (length) of a Vector to the given size (normalized vector * size). + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector SetVectorLength(FVector A, float size); + + //Converts radians to degrees. + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector VectorRadiansToDegrees(FVector RadVector); + + //Converts degrees to radians. + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector VectorDegreesToRadians(FVector DegVector); + + /** + * Rounds an integer to the lower multiple of the given number. + * If Skip Self is set to True it will skip to the previous multiple if the integer rounds to itself. + * @param Multiple - The multiple number to round to. + * @param skipSelf - Skip to the previous multiple if the integer rounds to itself. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Integer") + static int32 RoundToLowerMultiple(int32 A, int32 Multiple = 32, bool skipSelf = false); + + /** + * Rounds an integer to the upper multiple of the given number. + * If Skip Self is set to True it will skip to the next multiple if the integer rounds to itself. + * @param Multiple - The multiple number to round to. + * @param skipSelf - Skip to the next multiple if the integer rounds to itself. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Integer") + static int32 RoundToUpperMultiple(int32 A, int32 Multiple = 32, bool skipSelf = false); + + /** Rounds an integer to the nearest multiple of the given number. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Integer") + static int32 RoundToNearestMultiple(int32 A, int32 Multiple = 32); + + /** Returns true if the integer is a power of two number. */ + UFUNCTION(BlueprintPure, meta = (CompactNodeTitle = "PwrOf2"), Category = "Victory BP Library|TK-Master Math|Integer") + static bool IsPowerOfTwo(int32 x); + + /** Returns true if the integer is a multiple of the given number. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Integer") + static bool IsMultipleOf(int32 A, int32 Multiple); + + /** Returns true if the number is even (false if it's odd). */ + UFUNCTION(BlueprintPure, meta = (CompactNodeTitle = "isEven"), Category = "Victory BP Library|TK-Master Math|Float") + static bool IsEvenNumber(float A); + + /** + * Find closest point on a Sphere to a Line. + * When line intersects Sphere, then closest point to LineOrigin is returned. + * @param SphereOrigin Origin of Sphere + * @param SphereRadius Radius of Sphere + * @param LineOrigin Origin of line + * @param LineDir Direction of line. + * @return Closest point on sphere to given line. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector ClosestPointOnSphereToLine(FVector SphereOrigin, float SphereRadius, FVector LineOrigin, FVector LineDir); + + /** Find the point on line segment from LineStart to LineEnd which is closest to Point. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector ClosestPointOnLineSeqment(FVector Point, FVector LineStart, FVector LineEnd); + + /** Returns true if the given Point vector is within a box (defined by BoxOrigin and BoxExtent). */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool IsPointInsideBox(FVector Point, FVector BoxOrigin, FVector BoxExtent); + + /** Determines whether a line intersects a sphere. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool IsLineInsideSphere(FVector LineStart, FVector LineDir, float LineLength, FVector SphereOrigin, float SphereRadius); + + /** + * Swept-Box vs Box test. + * Sweps a box defined by Extend from Start to End points and returns whether it hit a box or not plus the hit location and hit normal if successful. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool LineExtentBoxIntersection(FBox inBox, FVector Start, FVector End, FVector Extent, FVector& HitLocation, FVector& HitNormal, float& HitTime); + + /** + * Get the shortest distance between a point and a plane. + * The output is signed so it holds information as to which side of the plane normal the point is. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static float SignedDistancePlanePoint(FVector planeNormal, FVector planePoint, FVector point); + + /** + * Returns a vector point which is a projection from a point to a line (defined by the vector couple LineOrigin, LineDirection). + * The line is infinite (in both directions). + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector ProjectPointOnLine(FVector LineOrigin, FVector LineDirection, FVector Point); + + /** + * Performs a sphere vs box intersection test. + * @param SphereOrigin the center of the sphere being tested against the box. + * @param SphereRadius the size of the sphere being tested. + * @param BoxOrigin the box origin being tested against. + * @param BoxExtent the box extend (width, depth, height). + * @return Whether the sphere/box intersect or not. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool SphereBoxIntersection(FVector SphereOrigin, float SphereRadius, FVector BoxOrigin, FVector BoxExtent); + + /** + * Find closest points between 2 line segments. + * @param (Line1Start, Line1End) defines the first line segment. + * @param (Line2Start, Line2End) defines the second line segment. + * @param LinePoint1 Closest point on segment 1 to segment 2. + * @param LinePoint2 Closest point on segment 2 to segment 1. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static void ClosestPointsOfLineSegments(FVector Line1Start, FVector Line1End, FVector Line2Start, FVector Line2End, FVector& LinePoint1, FVector& LinePoint2); + + /** + * Calculate the intersection point of two infinitely long lines. Returns true if lines intersect, otherwise false. + * Note that in 3d, two lines do not intersect most of the time. + * So if the two lines are not in the same plane, use Closest Points On Two Lines instead. + * @param IntersectionPoint The intersection point of the lines. Returns zero if the lines do not intersect or the operation fails. + * @param LinePoint1 Line point of the first line. + * @param LineDir1 Line direction (normal) of the first line. Should be a normalized vector. + * @param LinePoint2 Line point of the second line. + * @param LineDir2 Line direction (normal) of the second line. Should be a normalized vector. + * @return true if lines intersect, otherwise false. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool LineToLineIntersection(FVector& IntersectionPoint, FVector LinePoint1, FVector LineDir1, FVector LinePoint2, FVector LineDir2); + + /* + * Calculate the closest points between two infinitely long lines. + * If lines are intersecting (not parallel) it will return false! Use Line To Line Intersection instead. + * @param closestPointLine1 The closest point of line1 to line2. Returns zero if the lines intersect. + * @param closestPointLine2 The closest point of line2 to line1. Returns zero if the lines intersect. + * @param linePoint1 Line point of the first line. + * @param lineVec1 Line direction (normal) of the first line. Should be a normalized vector. + * @param linePoint2 Line point of the second line. + * @param lineVec2 Line direction (normal) of the second line. Should be a normalized vector. + * @return true if lines are parallel, false otherwise. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static bool ClosestPointsOnTwoLines(FVector& closestPointLine1, FVector& closestPointLine2, FVector linePoint1, FVector lineVec1, FVector linePoint2, FVector lineVec2); + + /* + * Returns 0 if point is on the line segment. + * Returns 1 if point is not on the line segment and it is on the side of linePoint1. + * Returns 2 if point is not on the line segment and it is on the side of linePoint2. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static int32 PointOnWhichSideOfLineSegment(FVector linePoint1, FVector linePoint2, FVector point); + + /* + * Returns true if the two line segments are intersecting and not parallel. + * If you need the intersection point, use Closest Points On Two Lines. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector|Intersection") + static bool AreLineSegmentsCrossing(FVector pointA1, FVector pointA2, FVector pointB1, FVector pointB2); + + /*Snaps vector to nearest grid multiple.*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static FVector GridSnap(FVector A, float Grid); + + /*Converts UMG layout offsets to another anchor.*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Anchor", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void ConvertAnchorToAnchor(UObject* WorldContextObject, FAnchors CurrentAnchor, FMargin Offsets, FAnchors TargetAnchor, FMargin& ConvertedOffsets); + + /*Converts Physics Linear Velocity to a more useful speed unit.*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|TK-Master Math|Vector") + static float ConvertPhysicsLinearVelocity(FVector Velocity, TEnumAsByte SpeedUnit); + + //------------------------------------------------------------ + //Physics functions! (why aren't these exposed by Epic yet?!) + + /** + * Get the current world velocity of a point on a physics-enabled component. + * @param Point - Point in world space. + * @param DrawDebugInfo - Draw debug point & string. + * @param BoneName - If a SkeletalMeshComponent, name of body to get velocity of. 'None' indicates root body. + * @return The velocity of the point in world space. + */ + UFUNCTION(BlueprintCallable, Category = "Physics") + static FVector GetVelocityAtPoint(UPrimitiveComponent* Target, FVector Point, FName BoneName = NAME_None, bool DrawDebugInfo = false); + + /* + * Set the physx center of mass offset. + * Note: this offsets the physx-calculated center of mass (it is not an offset from the pivot point). + */ + UFUNCTION(BlueprintCallable, Category = "Physics") + static void SetCenterOfMassOffset(UPrimitiveComponent* Target, FVector Offset, FName BoneName = NAME_None); + +}; diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPFunctionLibrary.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPFunctionLibrary.h new file mode 100644 index 0000000..2fc9996 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPFunctionLibrary.h @@ -0,0 +1,1981 @@ +/* + + By Rama + +*/ +#pragma once + +//to prevent nodes from getting called in constructors: +//meta=(UnsafeDuringActorConstruction = "true") + +#include "VictoryISM.h" + +//~~~~~~~~~~~~ UMG ~~~~~~~~~~~~~~~ +#include "Runtime/UMG/Public/UMG.h" +#include "Runtime/UMG/Public/UMGStyle.h" +#include "Runtime/UMG/Public/Slate/SObjectWidget.h" +#include "Runtime/UMG/Public/IUMGModule.h" +#include "Runtime/UMG/Public/Blueprint/UserWidget.h" +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +//AI +#include "AIController.h" //MoveToWithFilter + +//Audio +#include "Components/AudioComponent.h" +#include "AudioDecompress.h" +#include "AudioDevice.h" +#include "ActiveSound.h" +#include "Audio.h" +#include "Developer/TargetPlatform/Public/Interfaces/IAudioFormat.h" +#include "VorbisAudioInfo.h" + +//Texture2D +//#include "Engine/Texture2D.h" +#include "DDSLoader.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#include "VictoryBPFunctionLibrary.generated.h" + +// BP Library for You +// +// Written by Rama + +//note about UBlueprintFunctionLibrary +// This class is a base class for any function libraries exposed to blueprints. +// Methods in subclasses are expected to be static, and no methods should be added to the base class. + + +//~~~~~~~~~~~~~~~~~~~~~~ +// Key Modifiers +//~~~~~~~~~~~~~~~~~~~~~~ +UENUM(BlueprintType) +enum class EJoyImageFormats : uint8 +{ + JPG UMETA(DisplayName="JPG "), + PNG UMETA(DisplayName="PNG "), + BMP UMETA(DisplayName="BMP "), + ICO UMETA(DisplayName="ICO "), + EXR UMETA(DisplayName="EXR "), + ICNS UMETA(DisplayName="ICNS ") +}; + +//! REMOVE THIS AFTER A FEW VERSIONS +//! +//! +UENUM(BlueprintType) +enum class EVictoryHMDDevice : uint8 +{ + None UMETA(DisplayName="None"), + OculusRift UMETA(DisplayName="Oculus Rift"), + Morpheus UMETA(DisplayName="Morpheus"), + ES2GenericStereoMesh UMETA(DisplayName="ES2 Generic Stereo Mesh"), + SteamVR UMETA(DisplayName="Vive (Steam VR)"), + GearVR UMETA(DisplayName="Gear VR") +}; + +USTRUCT(BlueprintType) +struct FVictoryInput +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FString ActionName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FKey Key; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FString KeyAsString; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + uint32 bShift:1; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + uint32 bCtrl:1; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + uint32 bAlt:1; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + uint32 bCmd:1; + + + FVictoryInput(){} + FVictoryInput(const FString InActionName, const FKey InKey, const bool bInShift, const bool bInCtrl, const bool bInAlt, const bool bInCmd) + : Key(InKey) + , KeyAsString(InKey.GetDisplayName().ToString()) + , bShift(bInShift) + , bCtrl(bInCtrl) + , bAlt(bInAlt) + , bCmd(bInCmd) + { + ActionName = InActionName; + } + + FVictoryInput(const FInputActionKeyMapping& Action) + : Key(Action.Key) + , KeyAsString(Action.Key.GetDisplayName().ToString()) + , bShift(Action.bShift) + , bCtrl(Action.bCtrl) + , bAlt(Action.bAlt) + , bCmd(Action.bCmd) + { + ActionName = Action.ActionName.ToString(); + } +}; + +USTRUCT(BlueprintType) +struct FVictoryInputAxis +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FString AxisName = ""; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FString KeyAsString = ""; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + FKey Key; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Input Song") + float Scale = 1; + + FVictoryInputAxis(){} + FVictoryInputAxis(const FString InAxisName, FKey InKey, float InScale) + : AxisName(InAxisName) + , KeyAsString(InKey.GetDisplayName().ToString()) + , Key(InKey) + , Scale(InScale) + { } + + FVictoryInputAxis(const FInputAxisKeyMapping& Axis) + : KeyAsString(Axis.Key.GetDisplayName().ToString()) + , Key(Axis.Key) + , Scale(Axis.Scale) + { + AxisName = Axis.AxisName.ToString(); + } +}; + +UENUM(BlueprintType) +namespace EJoyGraphicsFullScreen +{ + //256 entries max + enum Type + { + FullScreen UMETA(DisplayName="Regular Full Screen"), + WindowedFullScreen UMETA(DisplayName="Windowed Full Screen High Quality"), + WindowedFullScreenPerformance UMETA(DisplayName="Windowed Full Screen (Default)"), + //~~~ + + //256th entry + EJoyGraphicsFullScreen_Max UMETA(Hidden), + }; +} + +USTRUCT(BlueprintType) +struct FLevelStreamInstanceInfo +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + FName PackageName; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + FName PackageNameToLoad; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + FVector Location; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + FRotator Rotation; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + uint8 bShouldBeLoaded:1; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + uint8 bShouldBeVisible:1; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + uint8 bShouldBlockOnLoad:1; + + UPROPERTY(Category = "LevelStreaming", BlueprintReadWrite) + int32 LODIndex; + + FLevelStreamInstanceInfo() {} + + FLevelStreamInstanceInfo(ULevelStreamingKismet* LevelInstance); + + FString ToString() const + { + return FString::Printf(TEXT("PackageName: %s\nPackageNameToLoad:%s\nLocation:%s\nRotation:%s\nbShouldBeLoaded:%s\nbShouldBeVisible:%s\nbShouldBlockOnLoad:%s\nLODIndex:%i") + , *PackageName.ToString() + , *PackageNameToLoad.ToString() + , *Location.ToString() + , *Rotation.ToString() + , (bShouldBeLoaded) ? TEXT("True") : TEXT("False") + , (bShouldBeVisible) ? TEXT("True") : TEXT("False") + , (bShouldBlockOnLoad) ? TEXT("True") : TEXT("False") + , LODIndex); + } +}; + + +UCLASS() +class VICTORYBPLIBRARY_API UVictoryBPFunctionLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_UCLASS_BODY() + + //~~~~~~~~~~~~~~~~~~ + // Level Generation + //~~~~~~~~~~~~~~~~~~ + /** Load a level to a specific location and rotation, can create multiple of the same level! + * + * Ensure that each InstanceNumber is unique to spawn multiple instances of the same level! + * + * <3 Rama + * + * @param MapFolderOffOfContent - Maps or Maps/TileSets/TileSet1 etc + * @param LevelName - Just the level name itself, such as Tile1 + * @param InstanceNumber - Ensure this is unique by keeping count to spawn as many instances of same level as you want! + * @param Location - Worldspace location where the level should be spawned + * @param Rotation - Worldspace rotation for rotating the entire level + * @return false if the level name was not found + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Dynamic Level Generation",meta=(DeprecatedFunction, DeprecationMessage="My LoadLevelInstance BP node is in the main UE4 Engine as of 4.13! This version is deprecated and will be removed in the near future. <3 -Rama",WorldContext="WorldContextObject")) + static ULevelStreaming* VictoryLoadLevelInstance(UObject* WorldContextObject, FString MapFolderOffOfContent, FString LevelName, int32 InstanceNumber, FVector Location, FRotator Rotation,bool& Success); + + //~~~~~~~~~~ + // AI + //~~~~~~~~~~ + /** Move to Location with optional Query Filter! + * + * 1. Create Custon Nav Area Classes. + * + * 2. Use Nav Modifier Volumes to apply custom area class data within the level, then + * + * 3. Create Query Filters which alter/exclude those custom nav areas. + * + * 4. Can then choose to use the filters per character or even per Move To using this node. + * + * <3 Rama + * + * @param FilterClass - Allows different types of units to path in different ways all the time, or path differently per Move To using this node! + * @param bProjectDestinationToNavigation - Whether to attempt to find a nearby point on the nav mesh below/above/close to the supplied point. Uses the Agent's Nav Extent for the projection + * @param bStopOnOverlap - Add pawn's radius to AcceptanceRadius + * @param bCanStrafe - Set focus related flag: bAllowStrafe + * @return Whether the Pawn's AI Controller is valid and goal can be pathed to + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|AI") + static EPathFollowingRequestResult::Type Victory_AI_MoveToWithFilter( + APawn* Pawn, + const FVector& Dest, + TSubclassOf FilterClass = NULL, + float AcceptanceRadius = 0, + bool bProjectDestinationToNavigation = false, + bool bStopOnOverlap = false, + bool bCanStrafe = false + ); + + //~~~~~~~~~~~~~~~~ + // GPU <3 Rama + //~~~~~~~~~~~~~~~~ + + UFUNCTION(BlueprintPure,Category="Victory BP Library|GPU") + static FString Victory_GetGPUBrand() + { + return FPlatformMisc::GetPrimaryGPUBrand(); + } + UFUNCTION(BlueprintPure,Category="Victory BP Library|GPU", meta=(Keywords="GPU")) + static FString Victory_GetGRHIAdapterName() + { + return GRHIAdapterName; + } + + UFUNCTION(BlueprintPure,Category="Victory BP Library|GPU") + static void Victory_GetGPUInfo(FString& DeviceDescription, FString& Provider, FString& DriverVersion, FString& DriverDate); + + //~~~~~~~~~~ + // Core + //~~~~~~~~~~ + + /** + Launch a new process, if it is not set to be detached, UE4 will not fully close until the other process completes. + + The new process id is returned! + + Priority options: -2 idle, -1 low, 0 normal, 1 high, 2 higher + + ♥ Rama + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|System") + static void VictoryCreateProc(int32& ProcessId, FString FullPathOfProgramToRun,TArray CommandlineArgs,bool Detach,bool Hidden, int32 Priority=0, FString OptionalWorkingDirectory=""); + + /** You can obtain ProcessID from processes you initiate via VictoryCreateProc */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static FString VictoryGetApplicationName(int32 ProcessId) + { + //Please note it should really be uint32 but that is not supported by BP yet + return FPlatformProcess::GetApplicationName(ProcessId); + } + + /** You can obtain ProcessID from processes you initiate via VictoryCreateProc */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static bool VictoryIsApplicationRunning( int32 ProcessId ) + { + //Please note it should really be uint32 but that is not supported by BP yet + return FPlatformProcess::IsApplicationRunning(ProcessId); + } + /* Blueprints does not support int64 so at some pt in future int32 will not be enough, probably by then dolphins will rule the world, or UE4 BP will support int64, or both! <3 Rama*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static int32 GetUnixTimeStamp(const FDateTime& UTCTime) + { + //Please note it should really be int64 but that is not supported by BP yet + return UTCTime.ToUnixTimestamp(); + } + /* Blueprints does not support int64 so at some pt in future int32 will not be enough, probably by then dolphins will rule the world, or UE4 BP will support int64, or both! <3 Rama*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static void GetUTCFromUnixTimeStamp(int32 UnixTimeStamp, FDateTime& UTCTime) + { + //Please note it should really be int64 but that is not supported by BP yet + UTCTime = FDateTime::FromUnixTimestamp( UnixTimeStamp ); + } + + UFUNCTION(BlueprintPure, Category = "Rama Save System|File IO") + static void UTCToLocal(const FDateTime& UTCTime, FDateTime& LocalTime) + { + //Turn UTC into local ♥ Rama + FTimespan UTCOffset = FDateTime::Now() - FDateTime::UtcNow(); + LocalTime = UTCTime; + LocalTime += UTCOffset; + //♥ Rama + } + + /** Game thread may pause while hashing is ocurring. Please note that hashing multi-gb size files is very very slow, smaller files will process much faster :) <3 Rama*/ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|MD5") + static bool CreateMD5Hash(FString FileToHash, FString FileToStoreHashTo ); + + /** Game thread may pause while hashing is ocurring. Please note that hashing multi-gb size files is very very slow, smaller files will process much faster :) <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|MD5") + static bool CompareMD5Hash(FString MD5HashFile1, FString MD5HashFile2 ); + + /** Dynamically change how frequently in seconds a component will tick! Can be altered at any point during game-time! ♥ Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|System") + static void SetComponentTickRate(UActorComponent* Component, float Seconds) + { + if(!Component) return; + Component->PrimaryComponentTick.TickInterval = Seconds; + } + + /** Retrieves command line arguments that were passed into unreal */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static const FString GetCommandLine() + { + return FCommandLine::Get(); + } + + /** + * Create a new Texture Render Target 2D, ideal for use with Scene Capture Components created during runtime that need their own unique Render Targets + * @param Width Texture Width + * @param Height Texture Height + * @param ClearColor The color the texture is cleared to + * @param Gamma Will override FTextureRenderTarget2DResource::GetDisplayGamma if > 0. + * @return A new Texture Render Target 2D! + * + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static UTextureRenderTarget2D* CreateTextureRenderTarget2D(int32 Width=256, int32 Height=256, FLinearColor ClearColor = FLinearColor::White, float Gamma = 1) + { + UTextureRenderTarget2D* NewRenderTarget2D = NewObject(); + if(!NewRenderTarget2D) + { + return nullptr; + } + NewRenderTarget2D->ClearColor = FLinearColor::White; + NewRenderTarget2D->TargetGamma = Gamma; + NewRenderTarget2D->InitAutoFormat(Width, Height); + return NewRenderTarget2D; + } + + //~~~~~~~~~~ + // Physics + //~~~~~~~~~~ + + /** Update the Angular Damping during runtime! Make sure the component is simulating physics before calling this! Returns false if the new value could not be set. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool VictoryPhysics_UpdateAngularDamping(UPrimitiveComponent* CompToUpdate, float NewAngularDamping); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Physics", meta=(Keywords="Closest Surface")) + static float GetDistanceToCollision(UPrimitiveComponent* CollisionComponent, const FVector& Point, FVector& ClosestPointOnCollision); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Physics", meta=(Keywords="Closest Surface")) + static float GetDistanceBetweenComponentSurfaces(UPrimitiveComponent* CollisionComponent1, UPrimitiveComponent* CollisionComponent2, FVector& PointOnSurface1, FVector& PointOnSurface2); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics", meta=(Keywords="APEX Piece fracture damage PhysX Physics")) + static bool VictoryDestructible_DestroyChunk(UDestructibleComponent* DestructibleComp, int32 HitItem); + + + //~~~~~~~~~~ + // Joy ISM + //~~~~~~~~~~ + + /** Retrieve an array of all of the Victory Instanced Static Mesh Actors that have been created during runtime! */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Instanced Static Mesh",meta=(WorldContext="WorldContextObject")) + static void VictoryISM_GetAllVictoryISMActors(UObject* WorldContextObject, TArray& Out); + + /** Finds all instances of a specified Blueprint or class, and all subclasses of this class, and converts them into a single Instanced Static Mesh Actor! Returns the created Victory ISM actors. Please note all actors of subclasses are found as well, so use a very specific blueprint / class if you only want to generate Victory ISM actors for specific classes! Ignores actor classes that dont have a static mesh component. Please note that instanced static mesh actors can only be created for actors sharing the same static mesh asset. Different Instanced Static Mesh Actors are created for each unique static mesh asset found in the whole group of actors! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Instanced Static Mesh",meta=(WorldContext="WorldContextObject")) + static void VictoryISM_ConvertToVictoryISMActors(UObject* WorldContextObject, TSubclassOf ActorClass, TArray& CreatedISMActors, bool DestroyOriginalActors=true, int32 MinCountToCreateISM=2); + + //~~~~~~~~~~ + // File I/O + //~~~~~~~~~~ + + /** Obtain all files in a provided directory, with optional extension filter. All files are returned if Ext is left blank. Returns false if operation could not occur. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|File IO") + static bool JoyFileIO_GetFiles(TArray& Files, FString RootFolderFullPath, FString Ext); + + /** Obtain all files in a provided root directory, including all subdirectories, with optional extension filter. All files are returned if Ext is left blank. The full file path is returned because the file could be in any subdirectory. Returns false if operation could not occur. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|File IO") + static bool JoyFileIO_GetFilesInRootAndAllSubFolders(TArray& Files, FString RootFolderFullPath, FString Ext); + + /** Obtain a listing of all SaveGame file names that were saved using the Blueprint Save Game system. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|File IO") + static void SaveGameObject_GetAllSaveSlotFileNames(TArray& FileNames); + + /** Returns false if the new file could not be created. The folder path must be absolute, such as C:\Users\Self\Documents\YourProject\MyPics. You can use my other Paths nodes to easily get absolute paths related to your project! <3 Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Screenshots", meta=(Keywords="High resolution")) + static bool ScreenShots_Rename_Move_Most_Recent(FString& OriginalFileName, FString NewName, FString NewAbsoluteFolderPath, bool HighResolution=true); + + //~~~~ Key Re Binding ! ~~~~ + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Key Rebinding") + static void VictoryGetAllAxisAndActionMappingsForKey(FKey Key, TArray& ActionBindings, TArray& AxisBindings); + + // Axis Mapping + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Key Rebinding") + static FVictoryInputAxis VictoryGetVictoryInputAxis(const FKeyEvent& KeyEvent); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Key Rebinding") + static void VictoryGetAllAxisKeyBindings(TArray& Bindings); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Key Rebinding") + static void VictoryRemoveAxisKeyBind(FVictoryInputAxis ToRemove); + + /** You can leave the AsString field blank :) Returns false if the key could not be found as an existing mapping! Enjoy! <3 Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Key Rebinding") + static bool VictoryReBindAxisKey(FVictoryInputAxis Original, FVictoryInputAxis NewBinding); + + static FORCEINLINE void UpdateAxisMapping(FInputAxisKeyMapping& Destination, const FVictoryInputAxis& VictoryInputBind) + { + Destination.Key = VictoryInputBind.Key; + Destination.Scale = VictoryInputBind.Scale; + } + + + // Action Mapping + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Key Rebinding") + static FVictoryInput VictoryGetVictoryInput(const FKeyEvent& KeyEvent); + + static FORCEINLINE void UpdateActionMapping(FInputActionKeyMapping& Destination, const FVictoryInput& VictoryInputBind) + { + Destination.Key = VictoryInputBind.Key; + Destination.bShift = VictoryInputBind.bShift; + Destination.bCtrl = VictoryInputBind.bCtrl; + Destination.bAlt = VictoryInputBind.bAlt; + Destination.bCmd = VictoryInputBind.bCmd; + } + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Key Rebinding") + static void VictoryGetAllActionKeyBindings(TArray& Bindings); + + /** You can leave the AsString field blank :) Returns false if the key could not be found as an existing mapping! Enjoy! <3 Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Key Rebinding") + static bool VictoryReBindActionKey(FVictoryInput Original, FVictoryInput NewBinding); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Key Rebinding") + static void VictoryRemoveActionKeyBind(FVictoryInput ToRemove); + + //~~~~~~~~~~~~~~~~~~~~ + + /** Change volume of Sound class of your choosing, sets the volume instantly! Returns false if the sound class was not found and volume was not set. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Sound") + static bool VictorySoundVolumeChange(USoundClass* SoundClassObject, float NewVolume); + + /** Get Current Sound Volume! Returns -1 if sound class was not found*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Sound") + static float VictoryGetSoundVolume(USoundClass* SoundClassObject); + + //~~~~~~~~~~~~~~~~~~~~ + + /** The number of seconds that this actor has been in play, relative to Get Game Time In Seconds. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Actor") + static float GetTimeInPlay(AActor* Actor) + { + if(!Actor) return -1; + + UWorld* World = Actor->GetWorld(); + + //Use FApp Current Time as a back up + float CurrentTime = (World) ? World->GetTimeSeconds() : FApp::GetCurrentTime(); + return CurrentTime - Actor->CreationTime; + } + + /** + * Creates a plane centered on a world space point with a facing direction of Normal. + * + * @param Center The world space point the plane should be centered on (easy to observe with DrawDebugPlane) + * @param Normal The facing direction of the plane (can receive a Rotator) + * @return Plane coordinates + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Math|Plane", meta=(Keywords="make base plane")) + static FPlane CreatePlane(FVector Center, FVector Normal) + { + return FPlane(Center,Normal); + } + + /** >0: point is in front of the plane, <0: behind, =0: on the plane **/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Math|Plane") + static void PointDistanceToPlane(const FPlane& Plane, FVector Point,float& Distance) + { + Distance = Plane.PlaneDot(Point); + } + + /** Use a larger tolerance to allow inaccuracy of measurement in certain situations */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Math|Plane") + static bool IsPointOnPlane(const FPlane& Plane, FVector Point, float Tolerance= 0.01) + { + return FMath::Abs(Plane.PlaneDot(Point)) < Tolerance; + } + + /** Easily add to an integer! <3 Rama*/ + UFUNCTION(BlueprintCallable, meta = (CompactNodeTitle = "+=",Keywords = "increment integer"), Category = "Victory BP Library|Math|Integer") + static void VictoryIntPlusEquals(UPARAM(ref) int32& Int, int32 Add, int32& IntOut); + + /** Easily subtract from an integer! <3 Rama*/ + UFUNCTION(BlueprintCallable, meta = (CompactNodeTitle = "-=",Keywords = "decrement integer"), Category = "Victory BP Library|Math|Integer") + static void VictoryIntMinusEquals(UPARAM(ref) int32& Int, int32 Sub, int32& IntOut); + + /** Easily add to a float! <3 Rama*/ + UFUNCTION(BlueprintCallable, meta = (CompactNodeTitle = "+=",Keywords = "increment float"), Category = "Victory BP Library|Math|Float") + static void VictoryFloatPlusEquals(UPARAM(ref) float& Float, float Add, float& FloatOut); + + /** Easily subtract from a float! <3 Rama*/ + UFUNCTION(BlueprintCallable, meta = (CompactNodeTitle = "-=",Keywords = "decrement float"), Category = "Victory BP Library|Math|Float") + static void VictoryFloatMinusEquals(UPARAM(ref) float& Float, float Sub, float& FloatOut); + + /** Sort an integer array, smallest value will be at index 0 after sorting. Modifies the input array, no new data created. <3 Rama */ + UFUNCTION(BlueprintCallable, meta = (Keywords = "sort integer array"), Category = "Victory BP Library|Array") + static void VictorySortIntArray(UPARAM(ref) TArray& IntArray, TArray& IntArrayRef); + + /** Sort a float array, smallest value will be at index 0 after sorting. Modifies the input array, no new data created. */ + UFUNCTION(BlueprintCallable, meta = (Keywords = "sort float array"), Category = "Victory BP Library|Array") + static void VictorySortFloatArray(UPARAM(ref) TArray& FloatArray, TArray& FloatArrayRef); + + + /* Returns true if vector2D A is equal to vector2D B (A == B) within a specified error tolerance */ + UFUNCTION(BlueprintPure, meta=(DisplayName = "Equal (vector2D)", CompactNodeTitle = "==", Keywords = "== equal"), Category="Victory BP Library|Math|Vector2D") + static bool EqualEqual_Vector2DVector2D(FVector2D A, FVector2D B, float ErrorTolerance = 1.e-4f) + { + return A.Equals(B,ErrorTolerance); + } + + /* Returns true if vector2D A is not equal to vector2D B (A != B) within a specified error tolerance */ + UFUNCTION(BlueprintPure, meta=(DisplayName = "Not Equal (vector2D)", CompactNodeTitle = "!=", Keywords = "!= not equal"), Category="Victory BP Library|Math|Vector2D") + static bool NotEqual_Vector2DVector2D(FVector2D A, FVector2D B, float ErrorTolerance = 1.e-4f) + { + return !A.Equals(B,ErrorTolerance); + } + + //~~~ + + /** + * Tries to reach Target based on distance from Current position, giving a nice smooth feeling when tracking a position. + * + * @param Current Actual position + * @param Target Target position + * @param DeltaTime Time since last tick + * @param InterpSpeed Interpolation speed + * @return New interpolated position + */ + //UFUNCTION(BlueprintPure, Category="Math|Interpolation", meta=(Keywords="position")) + UFUNCTION(BlueprintPure, Category="Victory BP Library|Math", meta=(Keywords="position")) + static FVector2D Vector2DInterpTo(FVector2D Current, FVector2D Target, float DeltaTime, float InterpSpeed); + + /** + * Tries to reach Target at a constant rate. + * + * @param Current Actual position + * @param Target Target position + * @param DeltaTime Time since last tick + * @param InterpSpeed Interpolation speed + * @return New interpolated position + */ + //UFUNCTION(BlueprintPure, Category="Math|Interpolation", meta=(Keywords="position")) + UFUNCTION(BlueprintPure, Category="Victory BP Library|Math", meta=(Keywords="position")) + static FVector2D Vector2DInterpTo_Constant(FVector2D Current, FVector2D Target, float DeltaTime, float InterpSpeed); + + //~~~ Text To Number ~~~ + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion") + static bool Text_IsNumeric(const FText& Text) + { + return Text.IsNumeric(); + } + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion", meta=(AdvancedDisplay = "1")) + static float Text_ToFloat(const FText& Text, bool UseDotForThousands=false) + { + //because commas lead to string number being truncated, FText 10,000 becomes 10 for FString + FString StrFloat = Text.ToString(); + TextNumFormat(StrFloat,UseDotForThousands); + return FCString::Atof(*StrFloat); + } + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion", meta=(AdvancedDisplay = "1")) + static int32 Text_ToInt(const FText& Text, bool UseDotForThousands=false) + { + //because commas lead to string number being truncated, FText 10,000 becomes 10 for FString + FString StrInt = Text.ToString(); + TextNumFormat(StrInt,UseDotForThousands); + return FCString::Atoi(*StrInt); + } + + static void TextNumFormat(FString& StrNum, bool UseDotForThousands) + { + //10.000.000,997 + if(UseDotForThousands) + { + StrNum.ReplaceInline(TEXT("."),TEXT("")); //no dots as they truncate + StrNum.ReplaceInline(TEXT(","),TEXT(".")); //commas become decimal + } + + //10,000,000.997 + else + { + StrNum.ReplaceInline(TEXT(","),TEXT("")); //decimal can stay, commas would truncate so remove + } + } + + //~~~ End of Text To Number ~~~ + + /** Returns Value mapped from one range into another where the value is clamped to the output range. (e.g. 0.5 normalized from the range 0->1 to 0->50 would result in 25) */ + UFUNCTION(BlueprintPure, Category="Victory BP Library|Math", meta=(Keywords = "get mapped value clamped")) + static float MapRangeClamped(float Value, float InRangeA, float InRangeB, float OutRangeA, float OutRangeB); + + /** Server Travel! This is an async load level process which allows you to put up a UMG widget while the level loading occurs! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|System",meta=(WorldContext="WorldContextObject")) + static void ServerTravel(UObject* WorldContextObject,FString MapName, bool bNotifyPlayers=true); + + /** Get a Player Start by Name! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|System",meta=(WorldContext="WorldContextObject")) + static APlayerStart* GetPlayerStart(UObject* WorldContextObject,FString PlayerStartName); + + /** Convert String Back To Vector. IsValid indicates whether or not the string could be successfully converted. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion",meta=(DisplayName = "String to Vector", CompactNodeTitle = "->")) + static void Conversions__StringToVector(const FString& String, FVector& ConvertedVector, bool& IsValid); + + /** Convert String Back To Rotator. IsValid indicates whether or not the string could be successfully converted. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion",meta=(DisplayName = "String to Rotator", CompactNodeTitle = "->")) + static void Conversions__StringToRotator(const FString& String, FRotator& ConvertedRotator, bool& IsValid); + + /** Convert String Back To Color. IsValid indicates whether or not the string could be successfully converted. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion",meta=(DisplayName = "String to Color", CompactNodeTitle = "->")) + static void Conversions__StringToColor(const FString& String, FLinearColor& ConvertedColor, bool& IsValid); + + /** Convert Color to String! */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion",meta=(DisplayName = "Color to String ", CompactNodeTitle = "~>")) + static void Conversions__ColorToString(const FLinearColor& Color, FString& ColorAsString); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + //UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars!") + //static uint8 Victory_ConvertStringToByte(UEnum* Enum,FString String); + //! not working yet, always getting 255 + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static bool VictoryGetCustomConfigVar_Bool(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static int32 VictoryGetCustomConfigVar_Int(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static float VictoryGetCustomConfigVar_Float(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static FVector VictoryGetCustomConfigVar_Vector(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static FRotator VictoryGetCustomConfigVar_Rotator(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static FLinearColor VictoryGetCustomConfigVar_Color(FString SectionName, FString VariableName, bool& IsValid); + + /** Get Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static FString VictoryGetCustomConfigVar_String(FString SectionName, FString VariableName, bool& IsValid); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Custom Config Vars") + static FVector2D VictoryGetCustomConfigVar_Vector2D(FString SectionName, FString VariableName, bool& IsValid); + + //~~~~~~~~~~~~~~~~~~~~ + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Vector2D(FString SectionName, FString VariableName, FVector2D Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Bool(FString SectionName, FString VariableName, bool Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Int(FString SectionName, FString VariableName, int32 Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Float(FString SectionName, FString VariableName, float Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Vector(FString SectionName, FString VariableName, FVector Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Rotator(FString SectionName, FString VariableName, FRotator Value); + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_Color(FString SectionName, FString VariableName, FLinearColor Value); + + + /** Set Custom Config Var! These are stored in Saved/Config/Windows/Game.ini */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Custom Config Vars") + static void VictorySetCustomConfigVar_String(FString SectionName, FString VariableName, FString Value); + + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Transform") + FRotator TransformVectorToActorSpaceAngle(AActor* Actor, const FVector& InVector); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Transform") + FVector TransformVectorToActorSpace(AActor* Actor, const FVector& InVector); + + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|UMG", meta=(keywords="HMD vive oculus rift gearvr morpheus")) + static FName GetHeadMountedDisplayDeviceType(); + + + /** The FName that is expected is the exact same format as when you right click on asset -> Copy Reference! You can directly paste copied references into this node! IsValid lets you know if the path was correct or not and I was able to load the object. MAKE SURE TO SAVE THE RETURNED OBJECT AS A VARIABLE. Otherwise your shiny new asset will get garbage collected. I recommend you cast the return value to the appropriate object and then promote it to a variable :) -Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static UObject* LoadObjectFromAssetPath(TSubclassOf ObjectClass, FName Path, bool& IsValid); + + /** Uses the same format as I use for LoadObjectFromAssetPath! Use this node to get the asset path of objects in the world! -Rama */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Misc") + static FName GetObjectPath(UObject* Obj); + + + /** Find all widgets of a certain class! Top level only means only widgets that are directly added to the viewport will be found */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|UMG", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", DeterminesOutputType = "WidgetClass", DynamicOutputParam = "FoundWidgets")) + static void GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass, TArray& FoundWidgets, bool TopLevelOnly = true); + + /** Remove all widgets of a certain class from viewport! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|UMG", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void RemoveAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|UMG", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static bool IsWidgetOfClassInViewport(UObject* WorldContextObject, TSubclassOf WidgetClass); + + /** Handy helper to check if a Key Event was for specified Key ♥ Rama*/ + UFUNCTION(BlueprintPure,Category="Victory BP Library|UMG", meta = (Keywords = "== match same equal")) + static void JoyIsKey(const FKeyEvent& KeyEvent, FKey Key, bool& Ctrl, bool& Shift, bool& Alt, bool& Cmd, bool& Match) + { + Ctrl = KeyEvent.IsControlDown(); + Alt = KeyEvent.IsAltDown(); + Shift = KeyEvent.IsShiftDown(); + Cmd = KeyEvent.IsCommandDown(); + Match = KeyEvent.GetKey() == Key; + } + + /** Retrieves the unique net ID for the local player as a number! The number itself will vary based on what Online Subsystem is being used, but you are guaranteed that this number is unique per player! */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Networking") + static int32 GetPlayerUniqueNetID(); + + /** Call this periodically in a huge loop you are intentionally using to reset the BP runaway loop system. Caution, if you have an infinite loop this will permanently hang your system until you turn your computer off. Use very very carefully! When constructing a new loop and you are not sure if it is totally stable, do NOT use this node! Always test new loops normally to ensure you dont truly have a runaway loop that would hang your computer forever. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static void Loops_ResetBPRunawayCounter(); + + /** Set the Max Frame Rate. Min value is 10. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Graphics Settings") + static void GraphicsSettings__SetFrameRateCap(float NewValue); + + /** Only hardware dependent, no smoothing */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Graphics Settings") + static void GraphicsSettings__SetFrameRateToBeUnbound(); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static FVector2D ProjectWorldToScreenPosition(const FVector& WorldLocation); + + /** Make sure to save off the return value as a global variable in one of your BPs or else it will get garbage collected! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc", meta = (DeprecatedFunction, DeprecationMessage="Epic has introduced Construct Object as of 4.9.0, I recommend you use that instead! -Rama", HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static UObject* CreateObject(UObject* WorldContextObject, UClass* TheObjectClass); + + /** Make sure to save off the return value as a global variable in one of your BPs or else it will get garbage collected! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static UPrimitiveComponent* CreatePrimitiveComponent(UObject* WorldContextObject, TSubclassOf CompClass, FName Name, FVector Location, FRotator Rotation); + + + + /** Spawn an Actor and choose which level you want them to spawn into! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static AActor* SpawnActorIntoLevel(UObject* WorldContextObject, TSubclassOf ActorClass, FName Level = NAME_None, FVector Location = FVector::ZeroVector, FRotator Rotation = FRotator::ZeroRotator, bool SpawnEvenIfColliding = true); + + /** Get the names of all currently loaded and visible levels! */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void GetNamesOfLoadedLevels(UObject* WorldContextObject, TArray& NamesOfLoadedLevels); + + + + + /** Obtain the scaled,rotated, and translated vertex positions for any static mesh! Returns false if operation could not occur because the comp or static mesh asset was invalid. <3 Rama */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Actor") + static bool GetStaticMeshVertexLocations(UStaticMeshComponent* Comp, TArray& VertexPositions); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor") + static void AddToActorRotation(AActor* TheActor, FRotator AddRot); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void DrawCircle( + UObject* WorldContextObject, + FVector Center, + float Radius, + int32 NumPoints = 32, + float Thickness = 7, + FLinearColor LineColor = FLinearColor::Red, + FVector YAxis = FVector(0, 1, 0), + FVector ZAxis = FVector(0, 0, 1), + float Duration = 0, + bool PersistentLines = false + ); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|AI",meta=(WorldContext="WorldContextObject")) + static AActor* GetClosestActorOfClassInRadiusOfLocation(UObject* WorldContextObject, TSubclassOf ActorClass, FVector Center, float Radius, bool& IsValid); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|AI",meta=(WorldContext="WorldContextObject")) + static AActor* GetClosestActorOfClassInRadiusOfActor(UObject* WorldContextObject, TSubclassOf ActorClass, AActor* ActorCenter, float Radius, bool& IsValid); + + /** + * Generates a box that is guaranteed to contain all of the supplied points. + * + * @param Points The world space points that the box will encompass. + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Misc") + static void GetBoxContainingWorldPoints(const TArray& Points, FVector& Center, FVector& Extent) + { + FBox Box(ForceInit); + + for(const FVector& Each : Points) + { + Box += Each; + } + Center = Box.GetCenter(); + Extent = Box.GetExtent(); + } + + /** Implementation of a Selection Marquee / Selection Box as a BP Node. AnchorPoint is the first clicked point, which user then drags from to make the box. Class filter is optional way to narrow the scope of actors that can be selected by the selection box! -Rama*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void Selection_SelectionBox(UObject* WorldContextObject, TArray& SelectedActors, FVector2D AnchorPoint, FVector2D DraggedPoint, TSubclassOf ClassFilter); + + + /** Get the Controller ID for a supplied Player Controller <3 Rama. Returns false if operation could not occur. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Controller") + static bool PlayerController_GetControllerID(APlayerController* ThePC, int32& ControllerID); + + /** Get the Unique PlayerID from the PlayerState for a supplied Player Controller. Returns false if operation could not occur. Epic accepted my pull request for this a while back so now you can just GetPlayerState and directly access <3 Rama*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Networking") + static bool PlayerState_GetPlayerID(APlayerController* ThePC, int32& PlayerID); + + /** Returns whether this game instance is single player. <3 Rama*/ + UFUNCTION(BlueprintPure, Category="Victory BP Library|Networking", meta=(Keywords="SinglePlayer multiplayer", WorldContext="WorldContextObject")) + static bool IsStandAlone(UObject* WorldContextObject) + { + UWorld* World = GEngine->GetWorldFromContextObjectChecked( WorldContextObject ); + return World ? (World->GetNetMode() == NM_Standalone) : false; + } + + + /** Launches the specified URL in the OS default web browser :) <3 Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|System") + static void Open_URL_In_Web_Browser(FString TheURL); + + + + /** Returns which platform the game code is running in.*/ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System") + static void OperatingSystem__GetCurrentPlatform( + bool& Windows_, + bool& Mac, + bool& Linux, + bool& iOS, + bool& Android, + bool& Android_ARM, + bool& Android_Vulkan, + bool& PS4, + bool& XBoxOne, + bool& HTML5, + bool& Apple + ); + + //~~~ + + /** Retrieves the OS system Date and Time as a string at the instant this BP node runs. Use my other RealWorldTime node to get the time passed since the return value of this node! You can use this to record milliseconds/seconds/minutes/hours between events in game logic! */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System") + static FString RealWorldTime__GetCurrentOSTime( + int32& MilliSeconds, + int32& Seconds, + int32& Minutes, + int32& Hours12, + int32& Hours24, + int32& Day, + int32& Month, + int32& Year + ); + + /** Get the amount of seconds/minutes/hours since the the supplied DateTime string! You can use this to record milliseconds/seconds/minutes/hours between events in game logic! */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System") + static void RealWorldTime__GetTimePassedSincePreviousTime( + const FString& PreviousTime, + float& Milliseconds, + float& Seconds, + float& Minutes, + float& Hours + ); + + /** Get the difference between two recorded times! You can use this to record milliseconds/seconds/minutes/hours between events in game logic! */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System") + static void RealWorldTime__GetDifferenceBetweenTimes( + const FString& PreviousTime1, + const FString& PreviousTime2, + float& Milliseconds, + float& Seconds, + float& Minutes, + float& Hours + ); + + //~~~ + + /** Loads a text file from hard disk and parses it into a String array, where each entry in the string array is 1 line from the text file. Option to exclude lines that are only whitespace characters or '\n'. Returns the size of the final String Array that was created. Returns false if the file could be loaded from hard disk. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|File IO") + static bool LoadStringArrayFromFile(TArray& StringArray, int32& ArraySize, FString FullFilePath = "Enter Full File Path", bool ExcludeEmptyLines = false); + + /** Load a text file to a single string that you can use ParseIntoArray on newline characters if you want same format as LoadStringArrayFromFile. This version supports unicode characters! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|File IO") + static bool LoadStringFromFile(FString& Result, FString FullFilePath = "Enter Full File Path") + { + return FFileHelper::LoadFileToString( Result, *FullFilePath); + } + + //~~~ + + /** Max of all array entries. Returns -1 if the supplied array is empty. Returns the index of the max value as well as the value itself. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Array") + static void MaxOfFloatArray(const TArray& FloatArray, int32& IndexOfMaxValue, float& MaxValue); + + /** Max of all array entries. Returns -1 if the supplied array is empty. Returns the index of the max value as well as the value itself. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Array") + static void MaxOfIntArray(const TArray& IntArray, int32& IndexOfMaxValue, int32& MaxValue); + + /** Min of all array entries. Returns -1 if the supplied array is empty. Returns the index of the min value as well as the value itself. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Array") + static void MinOfFloatArray(const TArray& FloatArray, int32& IndexOfMinValue, float& MinValue); + + /** Min of all array entries. Returns -1 if the supplied array is empty. Returns the index of the min value as well as the value itself. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Array") + static void MinOfIntArray(const TArray& IntArray, int32& IndexOfMinValue, int32& MinValue); + + //~~~ + + /** Set Max Move Speed. Supply the Character whose Character Movement to change! Returns false if operation could not occur due to invalid Character or MovementComponent could not be obtained.*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Character", meta = (DefaultToSelf = "TheCharacter")) + static bool CharacterMovement__SetMaxMoveSpeed(ACharacter* TheCharacter, float NewMaxMoveSpeed); + + //~~~ + + /** Converts a float to a rounded Integer, examples: 1.4 becomes 1, 1.6 becomes 2 */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|Math") + static int32 Conversion__FloatToRoundedInteger(float IN_Float); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static int32 CountOccurrancesOfSubString(FString Source, FString SubString, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) + { + return Source.ReplaceInline(*SubString,TEXT(""),SearchCase); + } + + + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|String", meta=( Keywords = "concatenate append")) + static void VictoryAppendInline(UPARAM(ref) FString& String, const FString& ToAppend, FString& Result, bool AppendNewline=false) + { + String += ToAppend; + if(AppendNewline) String += LINE_TERMINATOR; + Result = String; + } + + /** Handy option to trim any extra 00: 's while keeping a base set of 00:ss as per user expectation. 00:05:30 will become 05:30. ♥ Rama */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System") + static FString Victory_SecondsToHoursMinutesSeconds(float Seconds, bool TrimZeroes=true); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static bool IsAlphaNumeric(const FString& String); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static void Victory_GetStringFromOSClipboard(FString& FromClipboard); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|String") + static void Victory_SaveStringToOSClipboard(const FString& ToClipboard); + + /** + * Returns whether or not the SearchIn string contains the supplied Substring. + * Ex: "cat" is a contained within "concatenation" as a substring. + * @param SearchIn The string to search within + * @param Substring The string to look for in the SearchIn string + * @param bUseCase Whether or not to be case-sensitive + * @param bSearchFromEnd Whether or not to start the search from the end of the string instead of the beginning + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static bool HasSubstring(const FString& SearchIn, const FString& Substring, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase, ESearchDir::Type SearchDir = ESearchDir::FromStart); + + /** Combines two strings together! The Separator and the Labels are optional*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static FString String__CombineStrings(FString StringFirst, FString StringSecond, FString Separator = "", FString StringFirstLabel = "", FString StringSecondLabel = ""); + + /** Separator is always a space */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String", meta=( Keywords = "concatenate append", CommutativeAssociativeBinaryOperator = "true")) + static FString String__CombineStrings_Multi(FString A, FString B); + + /** Returns three arrays containing all of the resolutions and refresh rates for the current computer's current display adapter. You can loop over just 1 of the arrays and use the current index for the other two arrays, as all 3 arrays will always have the same length. Returns false if operation could not occur. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|System", meta = (Keywords = "screen resolutions display adapter")) + static bool OptionsMenu__GetDisplayAdapterScreenResolutions(TArray& Widths, TArray& Heights, TArray& RefreshRates, bool IncludeRefreshRates = false); + + UFUNCTION(BlueprintPure, Category = "Victory BP Library|GPU", meta=(Keyword="amd nvidia graphics card brand make model")) + static void GetUserDisplayAdapterBrand(bool& IsAMD, bool& IsNvidia, bool& IsIntel, bool& IsUnknown, int32& UnknownId); + + /** Clones an actor by obtaining its class and creating a copy. Returns the created Actor. The cloned actor is set to have the rotation and location of the initial actor. You can optionally specify location / rotation offsets for the new clone from original actor. Use IsValid to know if the actor was able to be cloned. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static AStaticMeshActor* Clone__StaticMeshActor(UObject* WorldContextObject, bool&IsValid, AStaticMeshActor* ToClone, FVector LocationOffset = FVector(0, 0, 0), FRotator RotationOffset = FRotator(0, 0, 0)); + + + /** Teleport Actor To Actor. Moves an actor instantly to the position and rotation of another actor. Useful for player starts, notes, triggers, and any other destination actors who dont have collision. Returns false if the operation could not occur. */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|Actor") + static bool Actor__TeleportToActor(AActor* ActorToTeleport, AActor* DestinationActor); + + /** Is this game logic running in the Editor world? */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static bool WorldType__InEditorWorld(UObject* WorldContextObject); + + /** Is this game logic running in the PIE world? */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static bool WorldType__InPIEWorld(UObject* WorldContextObject); + + /** Is this game logic running in an actual independent game instance? */ + UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Victory BP Library|System", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static bool WorldType__InGameInstanceWorld(UObject* WorldContextObject); + + /** Cause a supplied Character (casted from Actor internally) to enter Ragdoll physics. A check will be done to see if the character has a physics asset. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__EnterRagDoll(AActor* TheCharacter); + + /** Cause a supplied Character (casted from Actor internally) to exit Ragdoll physics. HeightAboveRBMesh is how far above the RB Mesh the Actor Capsule should be moved to upon exiting. Pass in the InitLocation and InitRotation from InitializeVictoryRagdoll */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__LeaveRagDoll(AActor* TheCharacter, bool SetToFallingMovementMode=true, float HeightAboveRBMesh = 64, const FVector& InitLocation = FVector(0, 0, 0), const FRotator& InitRotation = FRotator(0, 0, 0)); + + /** Returns whether or not a supplied Character is in Ragdoll Physics. Cast from Actor done internally for your convenience. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__IsRagDoll(AActor* TheCharacter); + + /** Get the Ragdoll Position of the supplied actor, casted to Character internally. Returns false if operation could not occur. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__GetLocationofRagDoll(AActor* TheCharacter, FVector& RagdollLocation); + + /** Initialize Victory Ragdoll Mode, by Obtaining the Default Relative Rotation and Location for this Character's Mesh. The Output Location and Rotation must be saved for use with LeaveRagdoll. Returns false if operation could not occur */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__InitializeVictoryRagDoll(AActor* TheCharacter, FVector&InitLocation, FRotator&InitRotation); + + /** Update the TheCharacter's Capsule Location and Camera to the Current Location of the Ragdoll. InterpSpeed is how fast the camera keeps up with the moving ragdoll! HeightOffset is the height above the ragdoll that the camera should stay. Returns false if operation could not occur or if Mesh was not in ragdoll */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Physics") + static bool Physics__UpdateCharacterCameraToRagdollLocation(AActor* TheCharacter, float HeightOffset = 128, float InterpSpeed = 3); + + + /** This node checks all Scalar, Vector, and Texture parameters of a material to see if the supplied parameter name is an actual parameter in the material! ♥ Rama*/ + UFUNCTION(BlueprintPure,Category="Victory BP Library|Material") + static bool DoesMaterialHaveParameter(UMaterialInterface* Mat, FName Parameter); + + + /** Get Name as String*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|String") + static FString Accessor__GetNameAsString(const UObject* TheObject); + + /** Get Socket Local Transform. Returns false if operation could not occur.*/ + //UFUNCTION(BlueprintCallable, Category = "Victory BP Library") + //static bool Accessor__GetSocketLocalTransform(const USkeletalMeshComponent* Mesh, FTransform& LocalTransform, FName SocketName=FName("SocketName")); + + /** Get Player Character's Player Controller. Requires: The Passed in Actor must be a character and it must be a player controlled character. IsValid will tell you if the return value is valid, make sure to do a Branch to confirm this! */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Character") + static APlayerController* Accessor__GetPlayerController(AActor* TheCharacter, bool&IsValid); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Input") + static void VictorySimulateMouseWheel(const float& Delta); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Input") + static void VictorySimulateKeyPress(APlayerController* ThePC, FKey Key, EInputEvent EventType); + + /** This handy node lets you turn the rendering of the entire world on or off! Does not affect UMG or HUD, which allows you to use loading screens effectively! <3 Rama. Returns false if player controller could not be used to get the viewport. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|System", meta=(keywords="disable show hide loading screen")) + static bool Viewport__EnableWorldRendering(const APlayerController* ThePC, bool RenderTheWorld); + + /** SET the Mouse Position! Returns false if the operation could not occur */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Input") + static bool Viewport__SetMousePosition(const APlayerController* ThePC, const float& PosX, const float& PosY); + + /** Get the Cursor Position within the Player's Viewport. This will return a result consistent with SET Mouse Position Returns false if the operation could not occur */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Game Window") + static bool Viewport__GetMousePosition(const APlayerController* ThePC, float& PosX, float& PosY); + + + /** Get the coordinates of the center of the player's screen / viewport. Returns false if the operation could not occur */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Game Window") + static bool Viewport__GetCenterOfViewport(const APlayerController* ThePC, float& PosX, float& PosY); + + + /** Convert Vector to Rotator*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion") + static FRotator Conversions__VectorToRotator(const FVector& TheVector); + + /** Convert Rotator to Vector */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion") + static FVector Conversions__RotatorToVector(const FRotator& TheRotator); + + /** Input Actor is expected to be a ACharacter, conversion done internally for your convenience */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion") + static FRotator Character__GetControllerRotation(AActor * TheCharacter); + + + + /** Draw 3D Line of Chosen Thickness From Socket on Character's Mesh to Destination, conversion of AActor to ACharacter done internally for your convenience. Duration is in Seconds */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|3d Lines") + static void Draw__Thick3DLineFromCharacterSocket(AActor* TheCharacter, const FVector& EndPoint, FName Socket = FName("SocketName"), FLinearColor LineColor = FLinearColor(1, 0, 0, 1), float Thickness = 7, float Duration = -1.f); + /** Draw 3D Line of Chosen Thickness From Mesh Socket to Destination. Duration is in Seconds */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|3d Lines") + static void Draw__Thick3DLineFromSocket(USkeletalMeshComponent* Mesh, const FVector& EndPoint, FName Socket = FName("SocketName"), FLinearColor LineColor = FLinearColor(0, 1, 0, 1), float Thickness = 7, float Duration = -1.f); + /** Draw 3D Line of Chosen Thickness Between Two Actors. Duration is in Seconds */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|3d Lines") + static void Draw__Thick3DLineBetweenActors(AActor* StartActor, AActor* EndActor, FLinearColor LineColor = FLinearColor(0, 0, 1, 1), float Thickness = 7, float Duration = -1.f); + + /** AnimBPOwner - Must be a Character, Conversion Internally For Convenience.\n\nRetrieves the Aim Offsets Pitch & Yaw Based On the Rotation of the Controller of The Character Owning The Anim Instance.\n\nThe Pitch and Yaw are meant to be used with a Blend Space going from -90,-90 to 90,90.\n Returns true if function filled the pitch and yaw vars successfully */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Aim Offset") + static bool Animation__GetAimOffsets(AActor* AnimBPOwner, float& Pitch, float& Yaw); + + /** AnimBPOwner - Must be a Character, Conversion Internally For Convenience.\n\nRetrieves the Aim Offsets Pitch & Yaw for the AnimBPOwner Based On the supplied Rotation.\n\nThe Pitch and Yaw are meant to be used with a Blend Space going from -90,-90 to 90,90.\n Returns true if function filled the pitch and yaw vars successfully */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Aim Offset") + static bool Animation__GetAimOffsetsFromRotation(AActor * AnimBPOwner, const FRotator & TheRotation, float & Pitch, float & Yaw); + + /** Saves text to filename of your choosing, make sure include whichever file extension you want in the filename, ex: SelfNotes.txt . Make sure to include the entire file path in the save directory, ex: C:\MyGameDir\BPSavedTextFiles */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|File IO") + static bool FileIO__SaveStringTextToFile(FString SaveDirectory, FString JoyfulFileName, FString SaveText, bool AllowOverWriting = false); + + /** Saves multiple Strings to filename of your choosing, with each string on its own line! Make sure include whichever file extension you want in the filename, ex: SelfNotes.txt . Make sure to include the entire file path in the save directory, ex: C:\MyGameDir\BPSavedTextFiles */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|File IO") + static bool FileIO__SaveStringArrayToFile(FString SaveDirectory, FString JoyfulFileName, TArray SaveText, bool AllowOverWriting = false); + + + /** Obtain an Array of Actors Rendered Recently. You can specifiy what qualifies as "Recent" in seconds. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor", meta=(WorldContext="WorldContextObject")) + static void Visibility__GetRenderedActors(UObject* WorldContextObject, TArray& CurrentlyRenderedActors, float MinRecentTime = 0.01); + + /** Obtain an Array of Actors NOT Rendered Recently! You can specifiy what qualifies as "Recent" in seconds. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor", meta=(WorldContext="WorldContextObject")) + static void Visibility__GetNotRenderedActors(UObject* WorldContextObject, TArray& CurrentlyNotRenderedActors, float MinRecentTime = 0.01); + + /** Is the Current Game Window the Foreground window in the OS, or in the Editor? This will be accurate in standalone running of the game as well as in the editor PIE */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Game Window") + static bool ClientWindow__GameWindowIsForeGroundInOS(); + + /** Flashes the game on the windows OS task bar! Please note this won't look the best in PIE, flashing is smoother in Standalone or packaged game. You can use GameWindowIsForeGroundInOS to see if there is a need to get the user's attention! <3 Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Game Window") + static void FlashGameOnTaskBar(APlayerController* PC, bool FlashContinuous=false, int32 MaxFlashCount = 3, int32 FlashFrequencyMilliseconds=500); + + /** Freeze Game Render, Does Not Stop Game Logic, Just Rendering. This is not like Pausing. Mainly useful for freezing render when window is not in the foreground */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Game Window") + static void Rendering__FreezeGameRendering(); + + /** Unfreeze Game Render. This is not an unpause function, it's just for actual screen rendering */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Game Window") + static void Rendering__UnFreezeGameRendering(); + + /** Compare Source Vector against Array of Vectors. Returns: Returns the Closest Vector to Source and what that closest Distance is, or -1 if there was an error such as array being empty. Ignores: Ignores Source if source is in the array */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static float Calcs__ClosestPointToSourcePoint(const FVector & Source, const TArray& OtherPoints, FVector& ClosestPoint); + + /** Takes in an actor (for convenience) and tries to cast it to Character and return an array of Vectors of all of the current bone locations of the character's Mesh. Locations are in World Space. Returns: false if the operation could not occur. Requires: Character Mesh Component must be valid */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Actor") + static bool Data__GetCharacterBoneLocations(AActor * TheCharacter, TArray& BoneLocations); + + /** Retrieves the "Mesh" component of a Character. IsValid lets you know if the data is valid, make sure to check if it is! Requires: the passed in Actor must be a Character */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Character") + static USkeletalMeshComponent* Accessor__GetCharacterSkeletalMesh(AActor* TheCharacter, bool& IsValid); + + + /** + * Get All Bone Names Below Bone, requires a physics asset, by Rama + * + * @param StartingBoneName The name of the bone to find all bones below. + * + * @param BoneNames , all of the bone names below the starting bone. + * + * @return total number of bones found + */ + UFUNCTION(BlueprintCallable, Category="Victory BP Library|Components|SkinnedMesh") + static int32 GetAllBoneNamesBelowBone(USkeletalMeshComponent* SkeletalMeshComp, FName StartingBoneName, TArray& BoneNames ); + + /** Does Not Do A Trace, But Obtains the Start and End for doing a Trace:\n\nTakes in an actor (for convenience) and tries to cast it to Character. Takes in a socket name to find on the Character's Mesh component, the socket location will be the start of the trace.\n\nAlso takes in the Angle / Rotator and the length of the trace you want to do. Option to draw the trace with variable thickness as it occurs.\n\nReturns what the Trace Start and End should be so you can plug these into any existing trace node you want.\n\nRequires: Character Mesh Component must be valid. Returns False if trace could not be done */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Traces") + static bool TraceData__GetTraceDataFromCharacterSocket(FVector& TraceStart, FVector& TraceEnd, AActor * TheCharacter, const FRotator& TraceRotation, float TraceLength = 10240, FName Socket = "SocketName", bool DrawTraceData = true, FLinearColor TraceDataColor = FLinearColor(1, 0, 0, 1), float TraceDataThickness = 7); + + /** Does Not Do A Trace, But Obtains the Start and End for doing a Trace:\n\nTakes in a Skeletal Mesh Component and a socket name to trace from. Also takes in the Angle / Rotator and the length of the trace you want to do.\n\nOption to draw the trace as a variable thickness line\n\nReturns what the Trace Start and End should be so you can plug these into any existing trace node you want.\n\n Requires: Mesh must be valid. Returns False if trace could not be done */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Traces") + static bool TraceData__GetTraceDataFromSkeletalMeshSocket(FVector& TraceStart, FVector& TraceEnd, USkeletalMeshComponent* Mesh, const FRotator& TraceRotation, float TraceLength = 10240, FName Socket = "SocketName", bool DrawTraceData = true, FLinearColor TraceDataColor = FLinearColor(1, 0, 0, 1), float TraceDataThickness = 7); + + /** Does a simple line trace given Trace Start and End, and if a Character is hit by the trace, then a component trace is performed on that character's mesh. Trace Owner is ignored when doing the trace.\n\nReturns the Character that was hit, as an Actor, as well as the name of the bone that was closest to the impact point of the trace. Also returns the impact point itself as well as the impact normal.\n\nUsing component trace ensures accuracy for testing against bones and sockets.\n\nIsValid: Will be true only if the component trace also hit someting. But the Returned Actor will contain an actor if any actor at all was hit by the simple trace. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Traces") + static AActor* Traces__CharacterMeshTrace___ClosestBone(AActor* TraceOwner, const FVector& TraceStart, const FVector& TraceEnd, FVector& OutImpactPoint, FVector& OutImpactNormal, FName& ClosestBoneName, FVector & ClosestBoneLocation, bool&IsValid); + + /** Does a simple line trace given Trace Start and End, and if a Character is hit by the trace, then a component trace is performed on that character's mesh. Returns the name of the socket that was closest to the impact point of the trace. Also returns the impact point itself as well as the impact normal. Also returns the Socket Location. Using component trace ensures accuracy for testing against bones and sockets.*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Traces",meta=(WorldContext="WorldContextObject")) + static AActor* Traces__CharacterMeshTrace___ClosestSocket(UObject* WorldContextObject, const AActor * TraceOwner, const FVector& TraceStart, const FVector& TraceEnd, FVector& OutImpactPoint, FVector& OutImpactNormal, FName& ClosestSocketName, FVector & SocketLocation, bool&IsValid); + + /** Returns the float as a String with Precision, Precision 0 = no decimal value. Precison 1 = 1 decimal place. The re-precisioned result is rounded appropriately. */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Conversion") + static void StringConversion__GetFloatAsStringWithPrecision(float TheFloat, FString & TheString, int32 Precision = 2, bool IncludeLeadingZero=true); + + /** Rotator out value is the degrees of difference between the player camera and the direction of player to light source. Returns false if the operation could not occur. */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static bool LensFlare__GetLensFlareOffsets(APlayerController* PlayerController, AActor* LightSource, float& PitchOffset, float& YawOffset, float& RollOffset); + + /** Retrieve Distance of given point to any Surface point on a Static Mesh Actor. Returns the distance as well as the exact closest point on the mesh surface to the given point. Returns -1 if an error occurred*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static float DistanceToSurface__DistaceOfPointToMeshSurface(AStaticMeshActor* TheSMA, const FVector& TestPoint, FVector& ClosestSurfacePoint); + + /** Change the Mobility of a Static Mesh Component, can be used in Constructor Script or in Event Graph! Returns false if operation could not occur.*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Misc") + static bool Mobility__SetSceneCompMobility(USceneComponent* SceneComp, EComponentMobility::Type NewMobility); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Paths + + /** InstallDir/GameName/Binaries/Win64 */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__Win64Dir_BinaryLocation(); + + /** InstallDir/WindowsNoEditor/ */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__WindowsNoEditorDir(); + + /** InstallDir/GameName */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__GameRootDirectory(); + + /** InstallDir/GameName/Saved */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__SavedDir(); + + /** InstallDir/GameName/Saved/Config/ */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__ConfigDir(); + + /** InstallDir/GameName/Saved/Screenshots/Windows */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__ScreenShotsDir(); + + /** InstallDir/GameName/Saved/Logs */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Paths") + static FString VictoryPaths__LogsDir(); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Graphics Settings Sample + + //~~~~~~~~~~~~~~~~~~ + // FullScreen + //~~~~~~~~~~~~~~~~~~ + + /** Get Full Screen Type */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Graphics Settings") + static TEnumAsByte JoyGraphicsSettings__FullScreen_Get(); + + /** Set Full Screen Type */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Graphics Settings") + static void JoyGraphicsSettings__FullScreen_Set(TEnumAsByte NewSetting); + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CPP FUNCTION LIBRARY + + static FORCEINLINE void JoyCC(const FString& Str, const int32 Value) + { + TObjectIterator PC; + if (!PC) return; + //~~~~~~ + + PC->ConsoleCommand(Str + " " + FString::FromInt(Value)); + } + static FORCEINLINE void JoyGraphics_FullScreen_SetFullScreenType(int32 Value) + { + JoyCC("r.FullScreenMode", Value); + } + static FORCEINLINE int32 JoyGraphics_FullScreen_GetFullScreenType() + { + static const auto CVar = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.FullScreenMode")); + return CVar->GetValueOnGameThread(); + } + static FORCEINLINE void JoyGraphics_SetFullScreen_NonWindowed() + { + /*"r.FullScreenMode"), + 2, + TEXT("Defines how we do full screen when requested (e.g. command line option -fullscreen or in ini [SystemSettings] fullscreen=true)\n") + */ + JoyCC("r.FullScreenMode", 0); + } + static FORCEINLINE void JoyGraphics_SetFullScreen_Windowed() + { + //TEXT(" 2: windowed full screen, specified resolution (like 1 but no unintuitive performance cliff, can be blurry, default)\n") + JoyCC("r.FullScreenMode", 2); + } + static FORCEINLINE void JoyGraphics_SetFullScreen_WindowedHighestQuality() + { + //TEXT(" 1: windowed full screen, desktop resolution (quick switch between applications and window mode, full quality)\n") + JoyCC("r.FullScreenMode", 1); + } + + + + //Min and Max of Array + static FORCEINLINE float Min(const TArray& Values, int32* MinIndex = NULL) + { + if (MinIndex) + { + *MinIndex = 0; + } + + if (Values.Num() <= 0) + { + return -1; + } + + float CurMin = Values[0]; + for (const float EachValue : Values) + { + CurMin = FMath::Min(CurMin, EachValue); + } + + if (MinIndex) + { + *MinIndex = Values.Find(CurMin); + } + return CurMin; + } + static FORCEINLINE float Max(const TArray& Values, int32* MaxIndex = NULL) + { + if (MaxIndex) + { + *MaxIndex = 0; + } + + if (Values.Num() <= 0) + { + return -1; + } + + float CurMax = Values[0]; + for (const float EachValue : Values) + { + CurMax = FMath::Max(CurMax, EachValue); + } + + if (MaxIndex) + { + *MaxIndex = Values.Find(CurMax); + } + return CurMax; + } + + static FORCEINLINE int32 Min(const TArray& Values, int32* MinIndex = NULL) + { + if (MinIndex) + { + *MinIndex = 0; + } + + if (Values.Num() <= 0) + { + return -1; + } + + int32 CurMin = Values[0]; + for (const int32 EachValue : Values) + { + CurMin = FMath::Min(CurMin, EachValue); + } + + if (MinIndex) + { + *MinIndex = Values.Find(CurMin); + } + return CurMin; + } + static FORCEINLINE int32 Max(const TArray& Values, int32* MaxIndex = NULL) + { + if (MaxIndex) + { + *MaxIndex = 0; + } + + if (Values.Num() <= 0) + { + return -1; + } + + int32 CurMax = Values[0]; + for (const int32 EachValue : Values) + { + CurMax = FMath::Max(CurMax, EachValue); + } + + if (MaxIndex) + { + *MaxIndex = Values.Find(CurMax); + } + return CurMax; + } + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Contributed by Others + + /** + * + * Contributed by: Mindfane + * + * Split a string into an array of substrings based on the given delimitter. + * Unlike ParseIntoArray() function which expects single character delimitters, this function can accept a delimitter that is also a string. + * + * @param InputString - The string that is to be exploded. + * @param Separator - The delimitter that is used for splitting (multi character strings are allowed) + * @param limit - If greater than zero, returns only the first x strings. Otherwsie returns all the substrings + * @param bTrimElelements - If True, then each subsctring is processed and any leading or trailing whitespcaes are trimmed. + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Victory BP Library|String", Keywords = "split explode string"), Category = String) + static void String__ExplodeString(TArray& OutputStrings, FString InputString, FString Separator = ",", int32 limit = 0, bool bTrimElements = false); + + + //NOT QUITE WORKING, REQUIRES INVESTIGATION + /** Load a Texture 2D from a DDS file! Contributed by UE4 forum member n00854180t! */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="image DDS")) + static UTexture2D* LoadTexture2D_FromDDSFile(const FString& FullFilePath); + + /** Load a Texture2D from a JPG,PNG,BMP,ICO,EXR,ICNS file! IsValid tells you if file path was valid or not. Enjoy! -Rama */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="image png jpg jpeg bmp bitmap ico icon exr icns")) + static UTexture2D* Victory_LoadTexture2D_FromFile(const FString& FullFilePath,EJoyImageFormats ImageFormat,bool& IsValid, int32& Width, int32& Height); + + /** Load a Texture2D from a JPG,PNG,BMP,ICO,EXR,ICNS file! IsValid tells you if file path was valid or not. Enjoy! -Rama */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="image png jpg jpeg bmp bitmap ico icon exr icns")) + static UTexture2D* Victory_LoadTexture2D_FromFile_Pixels(const FString& FullFilePath,EJoyImageFormats ImageFormat,bool& IsValid, int32& Width, int32& Height, TArray& OutPixels); + + /** Retrieve a pixel color value given the pixel array, the image height, and the coordinates. Returns false if the coordinates were not valid. Pixel coordinates start from upper left corner as 0,0. X= horizontal, Y = vertical */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="image coordinate index map value")) + static bool Victory_Get_Pixel(const TArray& Pixels, int32 ImageHeight, int32 x, int32 y, FLinearColor& FoundColor); + + /** Save an array of pixels to disk as a PNG! It is very important that you supply the curret width and height of the image! Returns false if Width * Height != Array length or file could not be saved to the location specified. I return an ErrorString to clarify what the exact issue was. -Rama */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="create image png jpg jpeg bmp bitmap ico icon exr icns")) + static bool Victory_SavePixels(const FString& FullFilePath,int32 Width, int32 Height, const TArray& ImagePixels, bool SaveAsBMP, bool sRGB, FString& ErrorString); + + /** This will modify the original T2D to remove sRGB and change compression to VectorDisplacementMap to ensure accurate pixel reading. -Rama*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="create image png jpg jpeg bmp bitmap ico icon exr icns")) + static bool Victory_GetPixelFromT2D(UTexture2D* T2D, int32 X, int32 Y, FLinearColor& PixelColor); + + /** This will modify the original T2D to remove sRGB and change compression to VectorDisplacementMap to ensure accurate pixel reading. -Rama*/ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="create image png jpg jpeg bmp bitmap ico icon exr icns")) + static bool Victory_GetPixelsArrayFromT2D(UTexture2D* T2D, int32& TextureWidth, int32& TextureHeight,TArray& PixelArray); + + /** This will modify the original T2D to remove sRGB and change compression to VectorDisplacementMap to ensure accurate pixel reading. -Rama*/ + //UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Load Texture From File",meta=(Keywords="create image png jpg jpeg bmp bitmap ico icon exr icns")) + static bool Victory_GetPixelsArrayFromT2DDynamic(UTexture2DDynamic* T2D, int32& TextureWidth, int32& TextureHeight,TArray& PixelArray); + + /** Contributed by UE4 forum member n00854180t! Plays a .ogg sound from file, attached to and following the specified component. This is a fire and forget sound. Replication is also not handled at this point. + * @param FilePath - Path to sound file to play + * @param AttachComponent - Component to attach to. + * @param AttachPointName - Optional named point within the AttachComponent to play the sound at + * @param Location - Depending on the value of Location Type this is either a relative offset from the attach component/point or an absolute world position that will be translated to a relative offset + * @param LocationType - Specifies whether Location is a relative offset or an absolute world position + * @param bStopWhenAttachedToDestroyed - Specifies whether the sound should stop playing when the owner of the attach to component is destroyed. + * @param VolumeMultiplier - Volume multiplier + * @param PitchMultiplier - PitchMultiplier + * @param AttenuationSettings - Override attenuation settings package to play sound with + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Sound", meta = (VolumeMultiplier = "1.0", PitchMultiplier = "1.0", AdvancedDisplay = "2", UnsafeDuringActorConstruction = "true")) + static class UAudioComponent* PlaySoundAttachedFromFile(const FString& FilePath, class USceneComponent* AttachToComponent, FName AttachPointName = NAME_None, FVector Location = FVector(ForceInit), EAttachLocation::Type LocationType = EAttachLocation::SnapToTarget, bool bStopWhenAttachedToDestroyed = false, float VolumeMultiplier = 1.f, float PitchMultiplier = 1.f, float StartTime = 0.f, class USoundAttenuation* AttenuationSettings = NULL); + + /** Contributed by UE4 forum member n00854180t! Plays a .ogg sound at the given location. This is a fire and forget sound and does not travel with any actor. Replication is also not handled at this point. + * + * NOT SUPPORTED ON PS4. + * + * @param FilePath - Path to sound file to play + * @param Location - World position to play sound at + * @param World - The World in which the sound is to be played + * @param VolumeMultiplier - Volume multiplier + * @param PitchMultiplier - PitchMultiplier + * @param AttenuationSettings - Override attenuation settings package to play sound with + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Sound", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", VolumeMultiplier = "1.0", PitchMultiplier = "1.0", AdvancedDisplay = "3", UnsafeDuringActorConstruction = "true")) + static void PlaySoundAtLocationFromFile(UObject* WorldContextObject, const FString& FilePath, FVector Location, float VolumeMultiplier = 1.f, float PitchMultiplier = 1.f, float StartTime = 0.f, class USoundAttenuation* AttenuationSettings = NULL); + + /** Contributed by UE4 forum member n00854180t! Creates a USoundWave* from file path. + * Read .ogg header file and refresh USoundWave metadata. + * + * NOT SUPPORTED ON PS4. + * + * @param FilePath path to file to create sound wave from + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Sound") + static class USoundWave* GetSoundWaveFromFile(const FString& FilePath); + +#if !PLATFORM_PS4 +private: + // Thanks to @keru for the base code for loading an Ogg into a USoundWave: + // https://forums.unrealengine.com/showthread.php?7936-Custom-Music-Player&p=97659&viewfull=1#post97659 + + /** + * Read .ogg header file and refresh USoundWave metadata. NOT SUPPORTED BY PS4 + * @param sw wave to put metadata + * @param rawFile pointer to src file in memory + * @return 0 if everything is ok + * 1 if couldn't read metadata. + */ + static int32 fillSoundWaveInfo(USoundWave* sw, TArray* rawFile); + + + + /** + * Tries to find out FSoundSource object associated to the USoundWave. NOT SUPPORTED BY PS4 + * @param sw wave, search key + * @return 0 if wave found and correctly set + * -1 if error: sound device not set + * -2 if error: sound wave not found + */ + static int32 findSource(class USoundWave* sw, class FSoundSource* out_audioSource); +#endif //PLATFORM_PS4 + + + + /** + * Contributed by: SaxonRah + * Better random numbers. Seeded with a random device. if the random device's entropy is 0; defaults to current time for seed. + * can override with seed functions; + */ +//----------------------------------------------------------------------------------------------BeginRANDOM +public: + /** Construct a random device, returns either a random device or the default random engine; system dependant; + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Random") + static void constructRand(); + + /** Seed Rand with value passed + * @param seed - value to pass to the prng as the seed + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Random") + static void seedRand(int32 seed); + + /** Seed Rand with current time + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Random") + static void seedRandWithTime(); + + /** Seed Rand with entropy + * @param seed - value to pass to the prng as the seed + */ + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Random") + static void seedRandWithEntropy(); + + /** Random Bool - Bernoulli distribution + * @param fBias - Bias of Bernoulli distribution + * @return uniformly distributed bool based on bias parameter + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static bool RandBool_Bernoulli(float fBias); + + /** Random Integer - Zero to One Uniform distribution + * @return int32 - uniform distribution from 0 to 1 + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static int32 RandInt_uniDis(); + + /** Random Integer - MIN to MAX Uniform distribution + * @param iMin - Minimum value of uniform distribution + * @param iMax - Maximum value of uniform distribution + * @return int32 - uniform distribution from iMin to iMax parameters + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static int32 RandInt_MINMAX_uniDis(int32 iMin, int32 iMax); + + /** Random Double - Zero to One Uniform distribution + * @return double - uniform distribution from 0 to 1 + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static float RandFloat_uniDis(); + + /** Random Double - Uniform distribution based on MIN to MAX parameters + * @param iMin - Minimum value of uniform distribution + * @param iMax - Maximum value of uniform distribution + * @return double - uniform distribution from iMin to iMax parameters + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static float RandFloat_MINMAX_uniDis(float iMin, float iMax); + + /** Random Bool - Bernoulli distribution - Mersenne Twister + * @param fBias - Bias of Bernoulli distribution + * @return uniformly distributed bool based on bias parameter + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static bool RandBool_Bernoulli_MT(float fBias); + + /** Random Integer - Zero to One Uniform distribution - Mersenne Twister + * @return int32 - uniform distribution from 0 to 1 + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static int32 RandInt_uniDis_MT(); + + /** Random Integer - MIN to MAX Uniform distribution - Mersenne Twister + * @param iMin - Minimum value of uniform distribution + * @param iMax - Maximum value of uniform distribution + * @return int32 - uniform distribution from iMin to iMax parameters + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static int32 RandInt_MINMAX_uniDis_MT(int32 iMin, int32 iMax); + + /** Random Float - Zero to One Uniform distribution - Mersenne Twister + * @return float - uniform distribution from 0 to 1 + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static float RandFloat_uniDis_MT(); + + /** Random Float - Uniform distribution based on MIN to MAX parameters - Mersenne Twister + * @param iMin - Minimum value of uniform distribution + * @param iMax - Maximum value of uniform distribution + * @return float - uniform distribution from iMin to iMax parameters + */ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|Random") + static float RandFloat_MINMAX_uniDis_MT(float iMin, float iMax); +//----------------------------------------------------------------------------------------------ENDRANDOM + +/** Inspired by Sahkan! */ +UFUNCTION(BlueprintPure, Category = "Victory BP Library|Actor|Get Immediate Attached Actors") +static void Actor__GetAttachedActors(AActor* ParentActor,TArray& ActorsArray); + +/** Modify the bloom intensity of a post process volume, by Community Member Sahkan */ +UFUNCTION(BlueprintCallable, Category = "Victory BP Library|Post Process") +static void SetBloomIntensity(APostProcessVolume* PostProcessVolume,float Intensity); + + + + +//~~~ Kris ~~~ + + /* + *See if index is a valid index for this array + * + *@param TargetArray The array to perform the operation on + *@param Index The index to check. + *@return Bool if integer is valid index for this array + */ + UFUNCTION(Category="Victory BP Library|Utilities|Array", BlueprintPure, CustomThunk, meta=(DisplayName = "Valid Index", CompactNodeTitle = "VALID INDEX", ArrayParm = "TargetArray")) + static bool Array_IsValidIndex(const TArray& TargetArray, int32 Index); + + static bool GenericArray_IsValidIndex(void* TargetArray, const UArrayProperty* ArrayProp, int32 Index); + + DECLARE_FUNCTION(execArray_IsValidIndex) + { + Stack.MostRecentProperty = nullptr; + Stack.StepCompiledIn(NULL); + void* ArrayAddr = Stack.MostRecentPropertyAddress; + UArrayProperty* ArrayProperty = Cast(Stack.MostRecentProperty); + if (!ArrayProperty) + { + Stack.bArrayContextFailed = true; + return; + } + P_GET_PROPERTY(UIntProperty, Index); + P_FINISH; + + bool WasValid = GenericArray_IsValidIndex(ArrayAddr, ArrayProperty, Index); + *(bool*)RESULT_PARAM = WasValid; + } + + /** Get the time target actor was created. */ + UFUNCTION(Category = "Victory BP Library|Actor", BlueprintPure, Meta = (DefaultToSelf = "Target")) + static float GetCreationTime(const AActor* Target); + + /** Get the time target actor has been alive. */ + UFUNCTION(Category = "Victory BP Library|Actor", BlueprintPure, Meta = (DefaultToSelf = "Target")) + static float GetTimeAlive(const AActor* Target); + + /** Contributed by Community Member Kris! */ + UFUNCTION(Category = "Victory BP Library|SceneCapture", BlueprintPure) + static bool CaptureComponent2D_Project(class USceneCaptureComponent2D* Target, FVector Location, FVector2D& OutPixelLocation); + + /** Contributed by Community Member Kris! */ + UFUNCTION(Category = "Victory BP Library|SceneCapture", BlueprintPure, Meta = (DefaultToSelf = "Target")) + static bool Capture2D_Project(class ASceneCapture2D* Target, FVector Location, FVector2D& OutPixelLocation); + + /** Currently the only supported format for this function is B8G8R8A8. Make sure to include the appropriate image extension in your file path! Recommended: .bmp, .jpg, .png. Contributed by Community Member Kris! */ + UFUNCTION(Category = "Victory BP Library|SceneCapture", BlueprintCallable) + static bool CaptureComponent2D_SaveImage(class USceneCaptureComponent2D* Target, const FString ImagePath, const FLinearColor ClearColour); + + /** Currently the only supported format for this function is B8G8R8A8. Make sure to include the appropriate image extension in your file path! Recommended: .bmp, .jpg, .png. Contributed by Community Member Kris! */ + UFUNCTION(Category = "Victory BP Library|SceneCapture", BlueprintCallable, Meta = (DefaultToSelf = "Target")) + static bool Capture2D_SaveImage(class ASceneCapture2D* Target, const FString ImagePath, const FLinearColor ClearColour); + + /** Make sure your image path has a valid extension! Supported types can be seen in the BP node Victory_LoadTexture2D_FromFile. Contributed by Community Member Kris! */ + UFUNCTION(Category = "Victory BP Library|Load Texture From File", BlueprintCallable) + static UTexture2D* LoadTexture2D_FromFileByExtension(const FString& ImagePath, bool& IsValid, int32& OutWidth, int32& OutHeight); + + /** + * Find first widget of a certain class and return it. + * @param WidgetClass The widget class to filter by. + * @param TopLevelOnly Only a widget that is a direct child of the viewport will be returned. + */ + UFUNCTION(Category = "Victory BP Library|UMG", BlueprintCallable, BlueprintCosmetic, Meta = (WorldContext = "WorldContextObject", DeterminesOutputType = "WidgetClass")) + static UUserWidget* GetFirstWidgetOfClass(UObject* WorldContextObject, TSubclassOf WidgetClass, bool TopLevelOnly); + + /** + * Recurses up the list of parents and returns true if this widget is a descendant of the PossibleParent + * @return true if this widget is a child of the PossibleParent + */ + UFUNCTION(Category = "Victory BP Library|UMG", BlueprintCallable, BlueprintCosmetic, Meta = (DefaultToSelf = "ChildWidget")) + static bool WidgetIsChildOf(UWidget* ChildWidget, UWidget* PossibleParent); + + /** + * Recurses up the list of parents until it finds a widget of WidgetClass. + * @return widget that is Parent of ChildWidget that matches WidgetClass. + */ + UFUNCTION(Category = "Victory BP Library|UMG", BlueprintCallable, BlueprintCosmetic, Meta = (DefaultToSelf = "ChildWidget", DeterminesOutputType = "WidgetClass")) + static UUserWidget* WidgetGetParentOfClass(UWidget* ChildWidget, TSubclassOf WidgetClass); + + UFUNCTION(Category = "Victory BP Library|UMG", BlueprintCallable, BlueprintCosmetic, Meta = (DefaultToSelf = "ParentWidget", DeterminesOutputType = "WidgetClass", DynamicOutputParam = "ChildWidgets")) + static void WidgetGetChildrenOfClass(UWidget* ParentWidget, TArray& ChildWidgets, TSubclassOf WidgetClass, bool bImmediateOnly); + + UFUNCTION(Category = "Victory BP Library|UMG", BlueprintCallable, BlueprintCosmetic, Meta = (DefaultToSelf = "ParentUserWidget")) + static UWidget* GetWidgetFromName(UUserWidget* ParentUserWidget, const FName& Name); + + UFUNCTION(Category = "Victory BP Library|Team", BlueprintPure) + static uint8 GetGenericTeamId(AActor* Target); + + UFUNCTION(Category = "Victory BP Library|Team", BlueprintCallable) + static void SetGenericTeamId(AActor* Target, uint8 NewTeamId); + + UFUNCTION(Category = "Victory BP Library|LevelStreaming", BlueprintCallable) + static FLevelStreamInstanceInfo GetLevelInstanceInfo(ULevelStreamingKismet* LevelInstance); + + UFUNCTION(Category = "Victory BP Library|LevelStreaming", BlueprintCallable, Meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void AddToStreamingLevels(UObject* WorldContextObject, const FLevelStreamInstanceInfo& LevelInstanceInfo); + + UFUNCTION(Category = "Victory BP Library|LevelStreaming", BlueprintCallable, Meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject")) + static void RemoveFromStreamingLevels(UObject* WorldContextObject, const FLevelStreamInstanceInfo& LevelInstanceInfo); + + UFUNCTION(Category = "Victory BP Library|LevelStreaming", BlueprintCallable, Meta = (keywords="remove")) + static void HideStreamingLevel(ULevelStreamingKismet* LevelInstance) + { + if(LevelInstance) LevelInstance->bShouldBeVisible = false; + } + + UFUNCTION(Category = "Victory BP Library|LevelStreaming", BlueprintCallable, Meta = (keywords="remove")) + static void UnloadStreamingLevel(ULevelStreamingKismet* LevelInstance) + { + if(LevelInstance) LevelInstance->bShouldBeLoaded = false; + } + + static bool GenericArray_SortCompare(const UProperty* LeftProperty, void* LeftValuePtr, const UProperty* RightProperty, void* RightValuePtr); + + /** + * Sort the elements of an array by FString, FName, FText, float, int or boolean. + * Supports struct and object based arrays. + * + * @param TargetArray The array to sort. + * @param bAscendingOrder If true, sort by ascending order. + * @param VariableName If a struct or object based array, the name of the variable to sort by. + */ + UFUNCTION(Category = "Victory BP Library|Utilities|Array", BlueprintCallable, CustomThunk, Meta = (DisplayName = "Sort", ArrayParm = "TargetArray", AdvancedDisplay = "bAscendingOrder,VariableName")) + static void Array_Sort(const TArray& TargetArray, bool bAscendingOrder = true, FName VariableName = NAME_None); + + static void GenericArray_Sort(void* TargetArray, const UArrayProperty* ArrayProp, bool bAscendingOrder = true, FName VariableName = NAME_None); + + DECLARE_FUNCTION(execArray_Sort) + { + Stack.MostRecentProperty = nullptr; + Stack.StepCompiledIn(NULL); + void* ArrayAddr = Stack.MostRecentPropertyAddress; + UArrayProperty* ArrayProperty = Cast(Stack.MostRecentProperty); + if (!ArrayProperty) + { + Stack.bArrayContextFailed = true; + return; + } + + P_GET_UBOOL(bAscendingOrder); + + P_GET_PROPERTY(UNameProperty, VariableName); + + P_FINISH; + P_NATIVE_BEGIN; + GenericArray_Sort(ArrayAddr, ArrayProperty, bAscendingOrder, VariableName); + P_NATIVE_END; + } + + /** + * Calls PrestreamTextures() for all the actor's meshcomponents. + * PrestreamTextures() tells the streaming system to start loading all textures with all mip-levels. + * @param Seconds - Number of seconds to force all mip-levels to be resident + * @param bEnableStreaming - Whether to start (true) or stop (false) streaming + * @param CinematicTextureGroups - Bitfield indicating which texture groups that use extra high-resolution mips + */ + UFUNCTION(Category = "Victory BP Library|Actor", BlueprintCallable, Meta = (DisplayName = "PrestreamTextures (Actor)")) + static void Actor_PrestreamTextures(AActor* Target, float Seconds = 1.0f, bool bEnableStreaming = true, int32 CinematicTextureGroups = 0); + + /** + * Tells the streaming system to start loading all textures with all mip-levels. + * @param Seconds - Number of seconds to force all mip-levels to be resident + * @param bEnableStreaming - Whether to start (true) or stop (false) streaming + * @param CinematicTextureGroups - Bitfield indicating which texture groups that use extra high-resolution mips + */ + UFUNCTION(Category = "Victory BP Library|Components", BlueprintCallable, Meta = (DisplayName = "PrestreamTextures (Component)")) + static void Component_PrestreamTextures(UMeshComponent* Target, float Seconds = 1.0f, bool bEnableStreaming = true, int32 CinematicTextureGroups = 0); + + /** + * Converts the screen position (primary screen's top left corner) supplied by pointer events or similar + * to the local space of viewport related to WorldContextObject. + * + * @param WorldContextObject World context. + * @param ScreenPosition Coordinates from FPointerEvent GetScreenSpacePosition() or similar. + * @param OutViewportPosition Coordinates based on the local viewport (fullscreen or otherwise). + * + * @return True if OutViewportPosition is not 0,0. + */ + UFUNCTION(Category = "Victory BP Library|Game|Viewport", BlueprintCallable, meta=(WorldContext="WorldContextObject")) + static bool GetViewportPosition(UObject* WorldContextObject, const FVector2D& ScreenPosition, FVector2D& OutViewportPosition); + + /** + * Does a line collision trace based the viewport position and returns the first blocking hit encountered. + * This trace finds the objects that RESPOND to the given TraceChannel + * + * @param WorldContextObject World context. + * @param ViewportPosition Local space of viewport from GetViewportPosition() or similar. + * @param TraceChannel + * @param bTraceComplex True to test against complex collision, false to test against simplified collision. + * @param OutHitResult Properties of the trace hit. + * + * @return True if there was a hit, false otherwise. + */ + UFUNCTION(Category = "Victory BP Library|Game|Viewport", BlueprintCallable, Meta = (WorldContext="WorldContextObject", bTraceComplex = true, TraceChannel = ECC_Visibility)) + static bool GetViewportPositionHitResultByChannel(UObject* WorldContextObject, const FVector2D& ViewportPosition, ECollisionChannel TraceChannel, bool bTraceComplex, FHitResult& OutHitResult); + + /** + * Transforms the viewport position into a world space origin and direction. + * + * @param WorldContextObject World context. + * @param ViewportPosition Local space of viewport from GetViewportPosition() or similar. + * @param OutWorldOrigin Corresponding 3D location in world space. + * @param OutWorldDirection World space direction vector away from the camera at the given 2d point. + * + * @return false if something went wrong during the deproject process. + */ + UFUNCTION(Category = "Victory BP Library|Game|Viewport", BlueprintCallable, Meta = (WorldContext="WorldContextObject")) + static bool ViewportPositionDeproject(UObject* WorldContextObject, const FVector2D& ViewportPosition, FVector& OutWorldOrigin, FVector& OutWorldDirection); + + /** + * Inserts child widget into panel widget at given location. + * NOTE: The child widgets "Construct" event will be fired again! + * + * @param Parent - The panel to insert the child into. + * @param Index - Where to insert the new widget. + * @param Content - The child widget to insert. + * @return slot assigned to content. + */ + UFUNCTION(Category = "Victory BP Library|Widget|Panel", BlueprintCallable) + static class UPanelSlot* InsertChildAt(class UWidget* Parent, int32 Index, UWidget* Content); + + /** Flushes the current key state for target player controller. */ + UFUNCTION(Category = "Victory BP Library|Input", BlueprintCallable) + static void FlushPressedKeys(class APlayerController* PlayerController); + + UFUNCTION(Category = "Victory BP Library|Vector", BlueprintPure) + static FVector GetVectorRelativeLocation(FVector ParentLocation, FRotator ParentRotation, FVector ChildLocation); + + UFUNCTION(Category = "Victory BP Library|Components", BlueprintPure, Meta = (DefaultToSelf = "ChildComponent")) + static FVector GetComponentRelativeLocation(class USceneComponent* ParentComponent, class USceneComponent* ChildComponent); + + UFUNCTION(Category = "Victory BP Library|Actor", BlueprintPure, Meta = (DefaultToSelf = "ChildActor")) + static FVector GetActorRelativeLocation(class AActor* ParentActor, class AActor* ChildActor); + + UFUNCTION(Category = "Victory BP Library|Rotator", BlueprintPure) + static FRotator GetRotatorRelativeRotation(FRotator ParentRotation, FRotator ChildRotation); + + UFUNCTION(Category = "Victory BP Library|Components", BlueprintPure, Meta = (DefaultToSelf = "ChildComponent")) + static FRotator GetComponentRelativeRotation(class USceneComponent* ParentComponent, class USceneComponent* ChildComponent); + + UFUNCTION(Category = "Victory BP Library|Actor", BlueprintPure, Meta = (DefaultToSelf = "ChildActor")) + static FRotator GetActorRelativeRotation(class AActor* ParentActor, class AActor* ChildActor); + + /** + * Helper function to calculate vertical FOV from horizontal FOV and aspect ratio. + * Useful to for determining distance from camera fit in-game objects to the width of the screen. + */ + UFUNCTION(Category = "Victory BP Library|Game|Viewport", BlueprintPure) + static float HorizontalFOV(float VerticalFOV, float AspectRatio); + + /** + * Helper function to calculate vertical FOV from horizontal FOV and aspect ratio. + * Useful to for determining distance from camera fit in-game objects to the height of the screen. + */ + UFUNCTION(Category = "Victory BP Library|Game|Viewport", BlueprintPure) + static float VerticalFOV(float HorizontalFOV, float AspectRatio); + + UFUNCTION(Category = "Victory BP Library|Utilities|String", BlueprintPure, Meta = (DisplayName = "IsEmpty")) + static bool StringIsEmpty(const FString& Target); + +//~~~~~~~~~ + +//~~~ KeyToTruth ~~~ + +//.h +/* Addition of strings (A + B) with pins. Contributed by KeyToTruth */ +UFUNCTION(BlueprintPure, meta = (DisplayName = "Append Multiple", Keywords = "concatenate combine append strings", CommutativeAssociativeBinaryOperator = "true"), Category = "Victory BP Library|String") +static FString AppendMultiple(FString A, FString B); + +//~~~ Mhousse ~~~ + +}; + diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPHTML.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPHTML.h new file mode 100644 index 0000000..ba8050f --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPHTML.h @@ -0,0 +1,34 @@ +/* + + By Rama + +*/ +#pragma once + +#include "Runtime/Engine/Classes/Kismet/BlueprintFunctionLibrary.h" +#include "VictoryBPHTML.generated.h" + +// BP Library for You +// +// Written by Rama + +//note about UBlueprintFunctionLibrary +// This class is a base class for any function libraries exposed to blueprints. +// Methods in subclasses are expected to be static, and no methods should be added to the base class. + + +UCLASS() +class VICTORYBPLIBRARY_API UVictoryBPHTML : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() +public: + + /** Is the current OS HTML5? This code will only run in games packaged for HTML5, it will not run in Editor builds :) Use this to customize particle FX for HTML5 vs PC builds! Or for any custom HTML5-specific game logic! <3 Rama*/ + UFUNCTION(BlueprintPure, Category = "Victory BP Library|HTML5") + static bool IsHTML(); + + UFUNCTION(BlueprintCallable, Category = "Victory BP Library|HTML5") + static void VictoryHTML5_SetCursorVisible(bool MakeVisible); + +}; + diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPLibrary.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPLibrary.h new file mode 100644 index 0000000..e516187 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryBPLibrary.h @@ -0,0 +1,15 @@ +/* + By Rama +*/ +#pragma once + +#include "ModuleManager.h" + +class FVictoryBPLibraryModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.cpp new file mode 100644 index 0000000..92a0fdc --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.cpp @@ -0,0 +1,24 @@ +/* + + By Rama + +*/ +#include "VictoryBPLibraryPrivatePCH.h" +#include "VictoryISM.h" + +////////////////////////////////////////////////////////////////////////// +// VictoryISM + +AVictoryISM::AVictoryISM(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + RootComponent = Mesh = ObjectInitializer.CreateDefaultSubobject(this, "VictoryInstancedMesh"); +} + +void AVictoryISM::BeginPlay() +{ + Super::BeginPlay(); + //~~~~~~~~~ + + +} \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.h new file mode 100644 index 0000000..a60f437 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryISM.h @@ -0,0 +1,30 @@ +/* + + By Rama + +*/ + +#pragma once + +#include "Runtime/Engine/Classes/Components/InstancedStaticMeshComponent.h" +#include "VictoryISM.generated.h" + +UCLASS() +class AVictoryISM : public AActor +{ + GENERATED_BODY() +public: + + AVictoryISM(const FObjectInitializer& ObjectInitializer); + + UPROPERTY(Category = "Joy ISM", VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) + UInstancedStaticMeshComponent* Mesh; + +//~~~~~~~~~~~~~ +// ISM +//~~~~~~~~~~~~~ +public: + virtual void BeginPlay() override; + +}; + diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.cpp new file mode 100644 index 0000000..c629cb8 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.cpp @@ -0,0 +1,104 @@ +/* + + By Rama + +*/ + +#include "VictoryBPLibraryPrivatePCH.h" +#include "VictoryPC.h" + +#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h" + +DEFINE_LOG_CATEGORY(VictoryPCLog) + +////////////////////////////////////////////////////////////////////////// +// AVictoryPC + +AVictoryPC::AVictoryPC(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + +} + + +UAudioComponent* AVictoryPC::VictoryPlaySpeechSound( + USoundBase* Sound + ,float VolumeMultiplier + ,float PitchMultiplier + , float StartTime) +{ + + UAudioComponent* Audio = UGameplayStatics::SpawnSound2D(this,Sound,VolumeMultiplier,PitchMultiplier,StartTime); + if(Audio) + { + //Subtitle Delegate for You! + // <3 Rama + Audio->OnQueueSubtitles.BindDynamic(this, &AVictoryPC::Subtitles_CPPDelegate); + } + + /* + Note that the OnAudioFinished is BP assignable off of return of this node! + + //called when we finish playing audio, either because it played to completion or because a Stop() call turned it off early + UPROPERTY(BlueprintAssignable) + FOnAudioFinished OnAudioFinished; + */ + + return Audio; +} + +void AVictoryPC::Subtitles_CPPDelegate(const TArray& Subtitles, float CueDuration) +{ + TArray VictorySubtitles; + for(const FSubtitleCue& Each : Subtitles) + { + VictorySubtitles.Add(FVictorySubtitleCue(Each.Text,Each.Time)); + } + + OnVictorySubtitlesQueued(VictorySubtitles,CueDuration); +} + +//~~~ + +bool AVictoryPC::VictoryPC_GetMyIP_SendRequest() +{ + FHttpModule* Http = &FHttpModule::Get(); + + if(!Http) + { + return false; + } + + if(!Http->IsHttpEnabled()) + { + return false; + } + //~~~~~~~~~~~~~~~~~~~ + + FString TargetHost = "http://api.ipify.org"; + TSharedRef < IHttpRequest > Request = Http->CreateRequest(); + Request->SetVerb("GET"); + Request->SetURL(TargetHost); + Request->SetHeader("User-Agent", "VictoryBPLibrary/1.0"); + Request->SetHeader("Content-Type" ,"text/html"); + + Request->OnProcessRequestComplete().BindUObject(this, &AVictoryPC::HTTPOnResponseReceived); + if (!Request->ProcessRequest()) + { + return false; + } + + return true; +} + +void AVictoryPC::HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) +{ + FString ResponseStr = "AVictoryPC::HTTPOnResponseReceived>>> Connection Error"; + if(bWasSuccessful) + { + ResponseStr = Response->GetContentAsString(); + } + + this->VictoryPC_GetMyIP_DataReceived(ResponseStr); +} + \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.h new file mode 100644 index 0000000..2eca2f2 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryPC.h @@ -0,0 +1,72 @@ +/* + + By Rama + +*/ +#pragma once + +//HTTP +#include "Http.h" + +#include "Runtime/Engine/Classes/GameFramework/PlayerController.h" +#include "VictoryPC.generated.h" + +DECLARE_LOG_CATEGORY_EXTERN(VictoryPCLog, Log, All); + + +//Exposing the UE4 Subtitle system for Solus +// <3 Rama +USTRUCT(BlueprintType) +struct FVictorySubtitleCue +{ + GENERATED_USTRUCT_BODY() + + /** The text to appear in the subtitle. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=SubtitleCue) + FText SubtitleText; + + /** The time at which the subtitle is to be displayed, in seconds relative to the beginning of the line. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=SubtitleCue) + float Time; + + FVictorySubtitleCue() + : Time(0) + { } + FVictorySubtitleCue(const FText& InText, float InTime) + : SubtitleText(InText) + , Time(InTime) + {} +}; + +UCLASS() +class VICTORYBPLIBRARY_API AVictoryPC : public APlayerController +{ + GENERATED_BODY() + +public: + AVictoryPC(const FObjectInitializer& ObjectInitializer); + + /** + * When the sound is played OnVictorySubtitlesQueued will be called with the subtitles! + * You can bind an event off of the audio component for OnAudioFinished to know hwen the sound is done! + */ + UFUNCTION(Category="Victory Subtitles", BlueprintCallable, BlueprintCosmetic, meta=( UnsafeDuringActorConstruction = "true", Keywords = "play" )) + UAudioComponent* VictoryPlaySpeechSound(class USoundBase* Sound, float VolumeMultiplier = 1.f, float PitchMultiplier = 1.f, float StartTime = 0.f); + + UFUNCTION(Category="Victory Subtitles", BlueprintImplementableEvent) + void OnVictorySubtitlesQueued(const TArray& VictorySubtitles, float CueDuration); + + UFUNCTION() + void Subtitles_CPPDelegate(const TArray& VictorySubtitles, float CueDuration); + +public: + /** This node relies on http://api.ipify.org, so if this node ever stops working, check out http://api.ipify.org. Returns false if the operation could not occur because HTTP module was not loaded or unable to process request. */ + UFUNCTION(BlueprintCallable, Category="Victory PC") + bool VictoryPC_GetMyIP_SendRequest(); + + /** Implement this event to receive your IP once the request is processed! This requires that your computer has a live internet connection */ + UFUNCTION(BlueprintImplementableEvent, Category = "Victory PC", meta = (DisplayName = "Victory PC ~ GetMyIP ~ Data Received!")) + void VictoryPC_GetMyIP_DataReceived(const FString& YourIP); + + void HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); +}; diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.cpp b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.cpp new file mode 100644 index 0000000..ebf008f --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.cpp @@ -0,0 +1,201 @@ +/* + + By Rama + +*/ + +#include "VictoryBPLibraryPrivatePCH.h" +#include "VictoryTMapComp.h" + +DEFINE_LOG_CATEGORY(VictoryTMapLog) + +////////////////////////////////////////////////////////////////////////// +// UVictoryTMapComp + +UVictoryTMapComp::UVictoryTMapComp(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + +} + +//~~~ Add ~~~ +void UVictoryTMapComp::String_Actor__AddPair(FString Key, AActor* Value) +{ + StringActor.Add(Key,Value); +} + +void UVictoryTMapComp::String_String__AddPair(FString Key, FString Value) +{ + StringString.Add(Key,Value); +} + +void UVictoryTMapComp::String_Int__AddPair(FString Key, int32 Value) +{ + StringInt.Add(Key,Value); +} + +void UVictoryTMapComp::String_Vector__AddPair(FString Key, FVector Value) +{ + StringVector.Add(Key,Value); +} +void UVictoryTMapComp::String_Rotator__AddPair(FString Key, FRotator Value) +{ + StringRotator.Add(Key,Value); +} + +void UVictoryTMapComp::Int_Vector__AddPair(int32 Key, FVector Value) +{ + IntVector.Add(Key,Value); +} + +void UVictoryTMapComp::Int_Float__AddPair(int32 Key, float Value) +{ + IntFloat.Add(Key,Value); +} + +//~~~ Get ~~~ +AActor* UVictoryTMapComp::String_Actor__Get(FString Key, bool& IsValid) +{ + IsValid = false; + if(!StringActor.Contains(Key)) + { + return nullptr; + } + IsValid = true; + return StringActor[Key]; +} + +FString UVictoryTMapComp::String_String__Get(FString Key, bool& IsValid) +{ + IsValid = false; + if(!StringString.Contains(Key)) + { + return ""; + } + IsValid = true; + return StringString[Key]; +} + +int32 UVictoryTMapComp::String_Int__Get(FString Key, bool& IsValid) +{ + IsValid = false; + if(!StringInt.Contains(Key)) + { + return 0; + } + IsValid = true; + return StringInt[Key]; +} + +FVector UVictoryTMapComp::String_Vector__Get(FString Key, bool& IsValid) +{ + IsValid = false; + if(!StringVector.Contains(Key)) + { + return FVector::ZeroVector; + } + IsValid = true; + return StringVector[Key]; +} +FRotator UVictoryTMapComp::String_Rotator__Get(FString Key, bool& IsValid) +{ + IsValid = false; + if(!StringRotator.Contains(Key)) + { + return FRotator::ZeroRotator; + } + IsValid = true; + return StringRotator[Key]; +} + +FVector UVictoryTMapComp::Int_Vector__Get(int32 Key, bool& IsValid) +{ + IsValid = false; + if(!IntVector.Contains(Key)) + { + return FVector::ZeroVector; + } + IsValid = true; + return IntVector[Key]; +} + +float UVictoryTMapComp::Int_Float__Get(int32 Key, bool& IsValid) +{ + IsValid = false; + if(!IntFloat.Contains(Key)) + { + return -1; + } + IsValid = true; + return IntFloat[Key]; +} + +//~~~ Remove ~~~ +void UVictoryTMapComp::String_Actor__Remove(FString Key) +{ + StringActor.Remove(Key); +} + +void UVictoryTMapComp::String_String__Remove(FString Key) +{ + StringString.Remove(Key); +} + +void UVictoryTMapComp::String_Int__Remove(FString Key) +{ + StringInt.Remove(Key); +} + +void UVictoryTMapComp::String_Vector__Remove(FString Key) +{ + StringVector.Remove(Key); +} +void UVictoryTMapComp::String_Rotator__Remove(FString Key) +{ + StringRotator.Remove(Key); +} + +void UVictoryTMapComp::Int_Vector__Remove(int32 Key) +{ + IntVector.Remove(Key); +} + +void UVictoryTMapComp::Int_Float__Remove(int32 Key, float Value) +{ + IntFloat.Remove(Key); +} + +//~~~ Clear ~~~ +void UVictoryTMapComp::String_Actor__Clear() +{ + StringActor.Empty(); +} + +void UVictoryTMapComp::String_String__Clear() +{ + StringString.Empty(); +} + +void UVictoryTMapComp::String_Int__Clear() +{ + StringInt.Empty(); +} + +void UVictoryTMapComp::String_Vector__Clear() +{ + StringVector.Empty(); +} +void UVictoryTMapComp::String_Rotator__Clear() +{ + StringRotator.Empty(); +} + +void UVictoryTMapComp::Int_Vector__Clear() +{ + IntVector.Empty(); +} + +void UVictoryTMapComp::Int_Float__Clear() +{ + IntFloat.Empty(); +} diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.h b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.h new file mode 100644 index 0000000..a805a15 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Public/VictoryTMapComp.h @@ -0,0 +1,148 @@ +/* + + By Rama + +*/ +#pragma once + +#include "VictoryTMapComp.generated.h" + +DECLARE_LOG_CATEGORY_EXTERN(VictoryTMapLog, Log, All); + +UCLASS(ClassGroup=VictoryBPLibrary, meta=(BlueprintSpawnableComponent)) +class UVictoryTMapComp : public UActorComponent +{ + GENERATED_BODY() +public: + UVictoryTMapComp(const FObjectInitializer& ObjectInitializer); + +//Add +public: + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void String_Actor__AddPair(FString Key, AActor* Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void String_String__AddPair(FString Key, FString Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void String_Int__AddPair(FString Key, int32 Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void String_Vector__AddPair(FString Key, FVector Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void String_Rotator__AddPair(FString Key, FRotator Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void Int_Vector__AddPair(int32 Key, FVector Value); + + /** If a key already exists in the TMap, its current value is replaced with your new value! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Add") + void Int_Float__AddPair(int32 Key, float Value); + +//Get +public: + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + AActor* String_Actor__Get(FString Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + FString String_String__Get(FString Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + int32 String_Int__Get(FString Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + FVector String_Vector__Get(FString Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + FRotator String_Rotator__Get(FString Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + FVector Int_Vector__Get(int32 Key, bool& IsValid); + + /** Get the value associated with they key at fastest possible speed! <3 Rama */ + UFUNCTION(BlueprintPure,Category="Victory BP Library|TMap Component|Get") + float Int_Float__Get(int32 Key, bool& IsValid); + +//Remove +public: + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void String_Actor__Remove(FString Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void String_String__Remove(FString Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void String_Int__Remove(FString Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void String_Vector__Remove(FString Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void String_Rotator__Remove(FString Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void Int_Vector__Remove(int32 Key); + + /** Removes the key and any associated value from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Remove") + void Int_Float__Remove(int32 Key, float Value); + +//Clear +public: + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void String_Actor__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void String_String__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void String_Int__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void String_Vector__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void String_Rotator__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void Int_Vector__Clear(); + + /** Removes every entry from the TMap! <3 Rama */ + UFUNCTION(BlueprintCallable,Category="Victory BP Library|TMap Component|Clear", meta = (Keywords = "Clear Empty Reset")) + void Int_Float__Clear(); + +public: + TMap StringActor; + TMap StringString; + TMap StringInt; + TMap StringVector; + TMap StringRotator; + TMap IntVector; + TMap IntFloat; + +}; \ No newline at end of file diff --git a/Plugins/VictoryPlugin/Source/VictoryBPLibrary/VictoryBPLibrary.Build.cs b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/VictoryBPLibrary.Build.cs new file mode 100644 index 0000000..6792ad6 --- /dev/null +++ b/Plugins/VictoryPlugin/Source/VictoryBPLibrary/VictoryBPLibrary.Build.cs @@ -0,0 +1,93 @@ +// Some copyright should be here... + +using UnrealBuildTool; + +public class VictoryBPLibrary : ModuleRules +{ + public VictoryBPLibrary(ReadOnlyTargetRules Target) : base(Target) + { + //4.15 Include What You Use + bEnforceIWYU = false; + + PublicIncludePaths.AddRange( + new string[] { + "VictoryBPLibrary/Public" + + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + "VictoryBPLibrary/Private", + + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core" + + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "InputCore", + + "RHI", + "RenderCore", + + "HTTP", + "UMG", "Slate", "SlateCore", + + "ImageWrapper", + + "PhysX", + + "HeadMountedDisplay", + + "AIModule", + + //FPlatformApplicationMisc + "ApplicationCore" + } + ); + + //APEX EXCLUSIONS + if (Target.Platform != UnrealTargetPlatform.Android && Target.Platform != UnrealTargetPlatform.HTML5 && Target.Platform != UnrealTargetPlatform.IOS) + { + PrivateDependencyModuleNames.AddRange( + new string[] + { + "APEX" + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + "ApexDestruction" + } + ); + + } + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/Plugins/VictoryPlugin/VictoryBPLibrary.uplugin b/Plugins/VictoryPlugin/VictoryBPLibrary.uplugin new file mode 100644 index 0000000..c8abb07 --- /dev/null +++ b/Plugins/VictoryPlugin/VictoryBPLibrary.uplugin @@ -0,0 +1,33 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.0", + "FriendlyName": "Victory Plugin", + "Description": "120+ Custom Blueprint Nodes For You! <3 Rama", + "Category": "Rama", + "CreatedBy": "Rama", + "CreatedByURL": "http://www.ue4code.com", + "DocsURL": "http://www.ue4code.com", + "MarketplaceURL": "http://www.ue4code.com", + "SupportURL": "http://www.ue4code.com", + "EngineVersion": "4.19.0", + "CanContainContent": false, + "Installed": true, + "Modules": [ + { + "Name": "VictoryBPLibrary", + "Type": "Runtime", + "LoadingPhase": "PreDefault", + "WhitelistPlatforms": [ + "Win64", + "Win32" + ] + } + ], + "Plugins": [ + { + "Name": "ApexDestruction", + "Enabled": true + } + ] +} \ No newline at end of file diff --git a/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs new file mode 100644 index 0000000..8591b15 --- /dev/null +++ b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs @@ -0,0 +1,59 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using System.IO; +using UnrealBuildTool; + +public class DiscordRpcLibrary : ModuleRules +{ +#if WITH_FORWARDED_MODULE_RULES_CTOR + public DiscordRpcLibrary(ReadOnlyTargetRules Target) : base(Target) +#else + public DiscordRpcLibrary(TargetInfo Target) +#endif + { + Type = ModuleType.External; + Definitions.Add("DISCORD_DYNAMIC_LIB=1"); + + string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..", "ThirdParty", "DiscordRpcLibrary")); + + if (Target.Platform == UnrealTargetPlatform.Win64) + { + string lib = Path.Combine(BaseDirectory, "Win64"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "discord-rpc.lib")); + + // Dynamic + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "discord-rpc.dll"))); + PublicDelayLoadDLLs.Add("discord-rpc.dll"); + } + else if (Target.Platform == UnrealTargetPlatform.Linux) + { + string lib = Path.Combine(BaseDirectory, "Linux", "x86_64-unknown-linux-gnu"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.so")); + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.so"))); + } + else if (Target.Platform == UnrealTargetPlatform.Mac) + { + string lib = Path.Combine(BaseDirectory, "Mac"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.dylib")); + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.dylib"))); + } + } +} \ No newline at end of file diff --git a/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_register.h b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_register.h new file mode 100644 index 0000000..4c16b68 --- /dev/null +++ b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_register.h @@ -0,0 +1,26 @@ +#pragma once + +#if defined(DISCORD_DYNAMIC_LIB) +# if defined(_WIN32) +# if defined(DISCORD_BUILDING_SDK) +# define DISCORD_EXPORT __declspec(dllexport) +# else +# define DISCORD_EXPORT __declspec(dllimport) +# endif +# else +# define DISCORD_EXPORT __attribute__((visibility("default"))) +# endif +#else +# define DISCORD_EXPORT +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +DISCORD_EXPORT void Discord_Register(const char* applicationId, const char* command); +DISCORD_EXPORT void Discord_RegisterSteamGame(const char* applicationId, const char* steamId); + +#ifdef __cplusplus +} +#endif diff --git a/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h new file mode 100644 index 0000000..3e1441e --- /dev/null +++ b/Plugins/discordrpc/Binaries/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h @@ -0,0 +1,87 @@ +#pragma once +#include + +// clang-format off + +#if defined(DISCORD_DYNAMIC_LIB) +# if defined(_WIN32) +# if defined(DISCORD_BUILDING_SDK) +# define DISCORD_EXPORT __declspec(dllexport) +# else +# define DISCORD_EXPORT __declspec(dllimport) +# endif +# else +# define DISCORD_EXPORT __attribute__((visibility("default"))) +# endif +#else +# define DISCORD_EXPORT +#endif + +// clang-format on + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct DiscordRichPresence { + const char* state; /* max 128 bytes */ + const char* details; /* max 128 bytes */ + int64_t startTimestamp; + int64_t endTimestamp; + const char* largeImageKey; /* max 32 bytes */ + const char* largeImageText; /* max 128 bytes */ + const char* smallImageKey; /* max 32 bytes */ + const char* smallImageText; /* max 128 bytes */ + const char* partyId; /* max 128 bytes */ + int partySize; + int partyMax; + const char* matchSecret; /* max 128 bytes */ + const char* joinSecret; /* max 128 bytes */ + const char* spectateSecret; /* max 128 bytes */ + int8_t instance; +} DiscordRichPresence; + +typedef struct DiscordUser { + const char* userId; + const char* username; + const char* discriminator; + const char* avatar; +} DiscordUser; + +typedef struct DiscordEventHandlers { + void (*ready)(const DiscordUser* request); + void (*disconnected)(int errorCode, const char* message); + void (*errored)(int errorCode, const char* message); + void (*joinGame)(const char* joinSecret); + void (*spectateGame)(const char* spectateSecret); + void (*joinRequest)(const DiscordUser* request); +} DiscordEventHandlers; + +#define DISCORD_REPLY_NO 0 +#define DISCORD_REPLY_YES 1 +#define DISCORD_REPLY_IGNORE 2 + +DISCORD_EXPORT void Discord_Initialize(const char* applicationId, + DiscordEventHandlers* handlers, + int autoRegister, + const char* optionalSteamId); +DISCORD_EXPORT void Discord_Shutdown(void); + +/* checks for incoming messages, dispatches callbacks */ +DISCORD_EXPORT void Discord_RunCallbacks(void); + +/* If you disable the lib starting its own io thread, you'll need to call this from your own */ +#ifdef DISCORD_DISABLE_IO_THREAD +DISCORD_EXPORT void Discord_UpdateConnection(void); +#endif + +DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* presence); +DISCORD_EXPORT void Discord_ClearPresence(void); + +DISCORD_EXPORT void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply); + +DISCORD_EXPORT void Discord_UpdateHandlers(DiscordEventHandlers* handlers); + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/Plugins/discordrpc/Binaries/Win64/UE4Editor-DiscordRpc.pdb b/Plugins/discordrpc/Binaries/Win64/UE4Editor-DiscordRpc.pdb new file mode 100644 index 0000000..6ceb1c3 Binary files /dev/null and b/Plugins/discordrpc/Binaries/Win64/UE4Editor-DiscordRpc.pdb differ diff --git a/Plugins/discordrpc/Binaries/Win64/UE4Editor.modules b/Plugins/discordrpc/Binaries/Win64/UE4Editor.modules new file mode 100644 index 0000000..cc2d783 --- /dev/null +++ b/Plugins/discordrpc/Binaries/Win64/UE4Editor.modules @@ -0,0 +1,7 @@ +{ + "BuildId": "3944462", + "Modules": + { + "DiscordRpc": "UE4Editor-DiscordRpc.dll" + } +} \ No newline at end of file diff --git a/Plugins/discordrpc/DiscordRpc.uplugin b/Plugins/discordrpc/DiscordRpc.uplugin new file mode 100644 index 0000000..309df12 --- /dev/null +++ b/Plugins/discordrpc/DiscordRpc.uplugin @@ -0,0 +1,29 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.0", + "FriendlyName": "Discord RPC", + "Description": "Wrap the Discord RPC library.", + "Category": "Messaging", + "CreatedBy": "Chris Marsh ", + "CreatedByURL": "https://discordapp.com/", + "DocsURL": "", + "MarketplaceURL": "", + "SupportURL": "", + "CanContainContent": true, + "IsBetaVersion": true, + "Installed": false, + "Modules": [ + { + "Name": "DiscordRpc", + "Type": "Runtime", + "LoadingPhase": "PreDefault", + "WhitelistPlatforms" : + [ + "Win64", + "Linux", + "Mac" + ] + } + ] +} \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp new file mode 100644 index 0000000..dbd5333 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpc.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpcBlueprint.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response new file mode 100644 index 0000000..86ecb16 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response @@ -0,0 +1,307 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/Z7 +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/DIS_PROGRAM=0 +/DUE_GAME=1 +/DENABLE_PGO_PROFILE=0 +/DWITH_DEV_AUTOMATION_TESTS=1 +/DWITH_PERF_AUTOMATION_TESTS=1 +/DUNICODE +/D_UNICODE +/D__UNREAL__ +/DIS_MONOLITHIC=1 +/DWITH_ENGINE=1 +/DWITH_UNREAL_DEVELOPER_TOOLS=0 +/DWITH_COREUOBJECT=1 +/DUSE_STATS_WITHOUT_ENGINE=0 +/DWITH_PLUGIN_SUPPORT=0 +/DWITH_PERFCOUNTERS=0 +/DUSE_LOGGING_IN_SHIPPING=0 +/DWITH_LOGGING_TO_MEMORY=0 +/DUSE_CACHE_FREED_OS_ALLOCS=1 +/DUSE_CHECKS_IN_SHIPPING=0 +/DUE_BUILD_MINIMAL=1 +/DWITH_EDITOR=0 +/DWITH_EDITORONLY_DATA=0 +/DWITH_SERVER_CODE=1 +/DWITH_CEF3=1 +/DWITH_XGE_CONTROLLER=0 +/DUBT_COMPILED_PLATFORM=Win64 +/DUBT_COMPILED_TARGET=Game +/DWIN32=1 +/D_WIN32_WINNT=0x0601 +/DWINVER=0x0601 +/DPLATFORM_WINDOWS=1 +/DDEPTH_32_BIT_CONVERSION=0 +/DPROJECT_COPYRIGHT_STRING="Fill out your copyright notice in the Description page of Project Settings." +/DPROJECT_PRODUCT_NAME=MediocreMapper +/DPROJECT_PRODUCT_IDENTIFIER=MediocreMapper +/DNDEBUG=1 +/DUE_BUILD_DEVELOPMENT=1 +/DUE_ENGINE_DIRECTORY=D:/Games/UE_4.19/Engine/ +/DORIGINAL_FILE_NAME=\"UE4-DiscordRpc.lib\" +/DUE_IS_ENGINE_MODULE=0 +/DUE_BUILD_DEVELOPMENT_WITH_DEBUGGAME=0 +/DUE_PROJECT_NAME=MediocreMapper +/DDISCORD_DYNAMIC_LIB=1 +/DDEPRECATED_FORGAME=DEPRECATED +/DDISCORD_DYNAMIC_LIB=1 +/DDISCORDRPC_API= +/DUE_ENABLE_ICU=1 +/DWITH_VS_PERF_PROFILER=0 +/DWITH_DIRECTXMATH=0 +/DCORE_API= +/DDISCORD_DYNAMIC_LIB=1 +/DCOREUOBJECT_API= +/DWITH_PHYSX=1 +/DWITH_APEX=1 +/DWITH_APEX_CLOTHING=1 +/DWITH_CLOTH_COLLISION_DETECTION=1 +/DWITH_PHYSX_COOKING=1 +/DWITH_NVCLOTH=1 +/DWITH_RECAST=1 +/DGPUPARTICLE_LOCAL_VF_ONLY=0 +/DENGINE_API= +/DAPPLICATIONCORE_API= +/DRHI_API= +/DJSON_API= +/DSLATE_DEFERRED_DESIRED_SIZE=0 +/DWITH_FREETYPE=1 +/DSLATECORE_API= +/DINPUTCORE_API= +/DSLATE_API= +/DWITH_UNREALPNG=1 +/DWITH_UNREALJPEG=1 +/DWITH_UNREALEXR=1 +/DIMAGEWRAPPER_API= +/DMESSAGING_API= +/DMESSAGINGCOMMON_API= +/DRENDERCORE_API= +/DSHADERCORE_API= +/DUTILITYSHADERS_API= +/DASSETREGISTRY_API= +/DENGINEMESSAGES_API= +/DENGINESETTINGS_API= +/DSYNTHBENCHMARK_API= +/DRENDERER_API= +/DGAMEPLAYTAGS_API= +/DWITH_RECAST=1 +/DWITH_GAMEPLAY_DEBUGGER=1 +/DAIMODULE_API= +/DGAMEPLAYTASKS_API= +/DDATABASESUPPORT_API= +/DPACKETHANDLER_API= +/DRELIABILITYHANDLERCOMPONENT_API= +/DHARDWARESURVEY_API= +/DCLOTHINGSYSTEMRUNTIMEINTERFACE_API= +/DNETWORKREPLAYSTREAMING_API= +/DAUDIOMIXER_API= +/DLOAD_PLUGINS_FOR_TARGET_PLATFORMS=0 +/DPROJECTS_API= +/D_HAS_EXCEPTIONS=0 +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.cpp" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp new file mode 100644 index 0000000..4e85f2d --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc\DiscordRpc.init.gen.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc\DiscordRpcBlueprint.gen.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response new file mode 100644 index 0000000..0a96bd8 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response @@ -0,0 +1,307 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/DIS_PROGRAM=0 +/DUE_GAME=1 +/DENABLE_PGO_PROFILE=0 +/DWITH_DEV_AUTOMATION_TESTS=1 +/DWITH_PERF_AUTOMATION_TESTS=1 +/DUNICODE +/D_UNICODE +/D__UNREAL__ +/DIS_MONOLITHIC=1 +/DWITH_ENGINE=1 +/DWITH_UNREAL_DEVELOPER_TOOLS=0 +/DWITH_COREUOBJECT=1 +/DUSE_STATS_WITHOUT_ENGINE=0 +/DWITH_PLUGIN_SUPPORT=0 +/DWITH_PERFCOUNTERS=0 +/DUSE_LOGGING_IN_SHIPPING=0 +/DWITH_LOGGING_TO_MEMORY=0 +/DUSE_CACHE_FREED_OS_ALLOCS=1 +/DUSE_CHECKS_IN_SHIPPING=0 +/DUE_BUILD_MINIMAL=1 +/DWITH_EDITOR=0 +/DWITH_EDITORONLY_DATA=0 +/DWITH_SERVER_CODE=1 +/DWITH_CEF3=1 +/DWITH_XGE_CONTROLLER=0 +/DUBT_COMPILED_PLATFORM=Win64 +/DUBT_COMPILED_TARGET=Game +/DWIN32=1 +/D_WIN32_WINNT=0x0601 +/DWINVER=0x0601 +/DPLATFORM_WINDOWS=1 +/DDEPTH_32_BIT_CONVERSION=0 +/DPROJECT_COPYRIGHT_STRING="Fill out your copyright notice in the Description page of Project Settings." +/DPROJECT_PRODUCT_NAME=MediocreMapper +/DPROJECT_PRODUCT_IDENTIFIER=MediocreMapper +/DNDEBUG=1 +/DUE_BUILD_DEVELOPMENT=1 +/DUE_ENGINE_DIRECTORY=D:/Games/UE_4.19/Engine/ +/DORIGINAL_FILE_NAME=\"UE4-DiscordRpc.lib\" +/DUE_IS_ENGINE_MODULE=0 +/DUE_BUILD_DEVELOPMENT_WITH_DEBUGGAME=0 +/DUE_PROJECT_NAME=MediocreMapper +/DDISCORD_DYNAMIC_LIB=1 +/DDEPRECATED_FORGAME=DEPRECATED +/DDISCORD_DYNAMIC_LIB=1 +/DDISCORDRPC_API= +/DUE_ENABLE_ICU=1 +/DWITH_VS_PERF_PROFILER=0 +/DWITH_DIRECTXMATH=0 +/DCORE_API= +/DDISCORD_DYNAMIC_LIB=1 +/DCOREUOBJECT_API= +/DWITH_PHYSX=1 +/DWITH_APEX=1 +/DWITH_APEX_CLOTHING=1 +/DWITH_CLOTH_COLLISION_DETECTION=1 +/DWITH_PHYSX_COOKING=1 +/DWITH_NVCLOTH=1 +/DWITH_RECAST=1 +/DGPUPARTICLE_LOCAL_VF_ONLY=0 +/DENGINE_API= +/DAPPLICATIONCORE_API= +/DRHI_API= +/DJSON_API= +/DSLATE_DEFERRED_DESIRED_SIZE=0 +/DWITH_FREETYPE=1 +/DSLATECORE_API= +/DINPUTCORE_API= +/DSLATE_API= +/DWITH_UNREALPNG=1 +/DWITH_UNREALJPEG=1 +/DWITH_UNREALEXR=1 +/DIMAGEWRAPPER_API= +/DMESSAGING_API= +/DMESSAGINGCOMMON_API= +/DRENDERCORE_API= +/DSHADERCORE_API= +/DUTILITYSHADERS_API= +/DASSETREGISTRY_API= +/DENGINEMESSAGES_API= +/DENGINESETTINGS_API= +/DSYNTHBENCHMARK_API= +/DRENDERER_API= +/DGAMEPLAYTAGS_API= +/DWITH_RECAST=1 +/DWITH_GAMEPLAY_DEBUGGER=1 +/DAIMODULE_API= +/DGAMEPLAYTASKS_API= +/DDATABASESUPPORT_API= +/DPACKETHANDLER_API= +/DRELIABILITYHANDLERCOMPONENT_API= +/DHARDWARESURVEY_API= +/DCLOTHINGSYSTEMRUNTIMEINTERFACE_API= +/DNETWORKREPLAYSTREAMING_API= +/DAUDIOMIXER_API= +/DLOAD_PLUGINS_FOR_TARGET_PLATFORMS=0 +/DPROJECTS_API= +/D_HAS_EXCEPTIONS=0 +/D_HAS_EXCEPTIONS=0 +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.gen.cpp" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/UE4-DiscordRpc.lib.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/UE4-DiscordRpc.lib.response new file mode 100644 index 0000000..4c28d3f --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Development/UE4-DiscordRpc.lib.response @@ -0,0 +1,8 @@ +/NOLOGO +/errorReport:prompt +/MACHINE:x64 +/SUBSYSTEM:WINDOWS +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Development\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Intermediate\Build\Win64\UE4\Development\DiscordRpc\PCLaunch.rc.res" +/OUT:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Binaries\Win64\UE4-DiscordRpc.lib" \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpc.init.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpc.init.gen.cpp new file mode 100644 index 0000000..b380c04 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpc.init.gen.cpp @@ -0,0 +1,49 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "GeneratedCppIncludes.h" +#include "Private/DiscordRpcPrivatePCH.h" +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable : 4883) +#endif +PRAGMA_DISABLE_DEPRECATION_WARNINGS +void EmptyLinkFunctionForGeneratedCodeDiscordRpc_init() {} + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature(); + UPackage* Z_Construct_UPackage__Script_DiscordRpc() + { + static UPackage* ReturnPackage = nullptr; + if (!ReturnPackage) + { + static UObject* (*const SingletonFuncArray[])() = { + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature, + }; + static const UE4CodeGen_Private::FPackageParams PackageParams = { + "/Script/DiscordRpc", + PKG_CompiledIn | 0x00000000, + 0x5CB914B6, + 0xE6515C92, + SingletonFuncArray, ARRAY_COUNT(SingletonFuncArray), + METADATA_PARAMS(nullptr, 0) + }; + UE4CodeGen_Private::ConstructUPackage(ReturnPackage, PackageParams); + } + return ReturnPackage; + } +PRAGMA_ENABLE_DEPRECATION_WARNINGS +#ifdef _MSC_VER +#pragma warning (pop) +#endif diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp new file mode 100644 index 0000000..21d1768 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp @@ -0,0 +1,828 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "GeneratedCppIncludes.h" +#include "Private/DiscordRpcPrivatePCH.h" +#include "Public/DiscordRpcBlueprint.h" +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable : 4883) +#endif +PRAGMA_DISABLE_DEPRECATION_WARNINGS +void EmptyLinkFunctionForGeneratedCodeDiscordRpcBlueprint() {} +// Cross Module References + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature(); + UPackage* Z_Construct_UPackage__Script_DiscordRpc(); + DISCORDRPC_API UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature(); + DISCORDRPC_API UEnum* Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes(); + DISCORDRPC_API UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence(); + DISCORDRPC_API UClass* Z_Construct_UClass_UDiscordRpc_NoRegister(); + DISCORDRPC_API UClass* Z_Construct_UClass_UDiscordRpc(); + COREUOBJECT_API UClass* Z_Construct_UClass_UObject(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_ClearPresence(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Initialize(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Respond(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_RunCallbacks(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Shutdown(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_UpdatePresence(); +// End Cross Module References + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordJoinRequest_Parms + { + FDiscordUserData joinRequest; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinRequest_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_joinRequest = { UE4CodeGen_Private::EPropertyClass::Struct, "joinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000008000182, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordJoinRequest_Parms, joinRequest), Z_Construct_UScriptStruct_FDiscordUserData, METADATA_PARAMS(NewProp_joinRequest_MetaData, ARRAY_COUNT(NewProp_joinRequest_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinRequest, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordJoinRequest__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordJoinRequest_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordSpectate_Parms + { + FString spectateSecret; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_spectateSecret_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_spectateSecret = { UE4CodeGen_Private::EPropertyClass::Str, "spectateSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordSpectate_Parms, spectateSecret), METADATA_PARAMS(NewProp_spectateSecret_MetaData, ARRAY_COUNT(NewProp_spectateSecret_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_spectateSecret, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordSpectate__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordSpectate_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordJoin_Parms + { + FString joinSecret; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinSecret_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_joinSecret = { UE4CodeGen_Private::EPropertyClass::Str, "joinSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordJoin_Parms, joinSecret), METADATA_PARAMS(NewProp_joinSecret_MetaData, ARRAY_COUNT(NewProp_joinSecret_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinSecret, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordJoin__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordJoin_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordErrored_Parms + { + int32 errorCode; + FString errorMessage; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_errorMessage_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_errorMessage = { UE4CodeGen_Private::EPropertyClass::Str, "errorMessage", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordErrored_Parms, errorMessage), METADATA_PARAMS(NewProp_errorMessage_MetaData, ARRAY_COUNT(NewProp_errorMessage_MetaData)) }; + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_errorCode = { UE4CodeGen_Private::EPropertyClass::Int, "errorCode", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordErrored_Parms, errorCode), METADATA_PARAMS(nullptr, 0) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorMessage, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorCode, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordErrored__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordErrored_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordDisconnected_Parms + { + int32 errorCode; + FString errorMessage; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_errorMessage_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_errorMessage = { UE4CodeGen_Private::EPropertyClass::Str, "errorMessage", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordDisconnected_Parms, errorMessage), METADATA_PARAMS(NewProp_errorMessage_MetaData, ARRAY_COUNT(NewProp_errorMessage_MetaData)) }; + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_errorCode = { UE4CodeGen_Private::EPropertyClass::Int, "errorCode", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordDisconnected_Parms, errorCode), METADATA_PARAMS(nullptr, 0) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorMessage, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorCode, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordDisconnected__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordDisconnected_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordConnected_Parms + { + FDiscordUserData joinRequest; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinRequest_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_joinRequest = { UE4CodeGen_Private::EPropertyClass::Struct, "joinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000008000182, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordConnected_Parms, joinRequest), Z_Construct_UScriptStruct_FDiscordUserData, METADATA_PARAMS(NewProp_joinRequest_MetaData, ARRAY_COUNT(NewProp_joinRequest_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinRequest, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordConnected__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordConnected_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + static UEnum* EDiscordJoinResponseCodes_StaticEnum() + { + static UEnum* Singleton = nullptr; + if (!Singleton) + { + Singleton = GetStaticEnum(Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("EDiscordJoinResponseCodes")); + } + return Singleton; + } + static FCompiledInDeferEnum Z_CompiledInDeferEnum_UEnum_EDiscordJoinResponseCodes(EDiscordJoinResponseCodes_StaticEnum, TEXT("/Script/DiscordRpc"), TEXT("EDiscordJoinResponseCodes"), false, nullptr, nullptr); + uint32 Get_Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes_CRC() { return 2532223064U; } + UEnum* Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes() + { +#if WITH_HOT_RELOAD + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UEnum* ReturnEnum = FindExistingEnumIfHotReloadOrDynamic(Outer, TEXT("EDiscordJoinResponseCodes"), 0, Get_Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes_CRC(), false); +#else + static UEnum* ReturnEnum = nullptr; +#endif // WITH_HOT_RELOAD + if (!ReturnEnum) + { + static const UE4CodeGen_Private::FEnumeratorParam Enumerators[] = { + { "EDiscordJoinResponseCodes::DISCORD_REPLY_NO", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_NO }, + { "EDiscordJoinResponseCodes::DISCORD_REPLY_YES", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_YES }, + { "EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE }, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Enum_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "DISCORD_REPLY_IGNORE.DisplayName", "Ignore" }, + { "DISCORD_REPLY_NO.DisplayName", "No" }, + { "DISCORD_REPLY_YES.DisplayName", "Yes" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Valid response codes for Respond function" }, + }; +#endif + static const UE4CodeGen_Private::FEnumParams EnumParams = { + (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, + UE4CodeGen_Private::EDynamicType::NotDynamic, + "EDiscordJoinResponseCodes", + RF_Public|RF_Transient|RF_MarkAsNative, + nullptr, + (uint8)UEnum::ECppForm::EnumClass, + "EDiscordJoinResponseCodes", + Enumerators, + ARRAY_COUNT(Enumerators), + METADATA_PARAMS(Enum_MetaDataParams, ARRAY_COUNT(Enum_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUEnum(ReturnEnum, EnumParams); + } + return ReturnEnum; + } +class UScriptStruct* FDiscordRichPresence::StaticStruct() +{ + static class UScriptStruct* Singleton = NULL; + if (!Singleton) + { + extern DISCORDRPC_API uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(); + Singleton = GetStaticStruct(Z_Construct_UScriptStruct_FDiscordRichPresence, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("DiscordRichPresence"), sizeof(FDiscordRichPresence), Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC()); + } + return Singleton; +} +static FCompiledInDeferStruct Z_CompiledInDeferStruct_UScriptStruct_FDiscordRichPresence(FDiscordRichPresence::StaticStruct, TEXT("/Script/DiscordRpc"), TEXT("DiscordRichPresence"), false, nullptr, nullptr); +static struct FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence +{ + FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence() + { + UScriptStruct::DeferCppStructOps(FName(TEXT("DiscordRichPresence")),new UScriptStruct::TCppStructOps); + } +} ScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence; + UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence() + { +#if WITH_HOT_RELOAD + extern uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(); + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UScriptStruct* ReturnStruct = FindExistingStructIfHotReloadOrDynamic(Outer, TEXT("DiscordRichPresence"), sizeof(FDiscordRichPresence), Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(), false); +#else + static UScriptStruct* ReturnStruct = nullptr; +#endif + if (!ReturnStruct) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Struct_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Rich presence data" }, + }; +#endif + auto NewStructOpsLambda = []() -> void* { return (UScriptStruct::ICppStructOps*)new UScriptStruct::TCppStructOps(); }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_instance_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + auto NewProp_instance_SetBit = [](void* Obj){ ((FDiscordRichPresence*)Obj)->instance = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_instance = { UE4CodeGen_Private::EPropertyClass::Bool, "instance", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(FDiscordRichPresence), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(NewProp_instance_MetaData, ARRAY_COUNT(NewProp_instance_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_spectateSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_spectateSecret = { UE4CodeGen_Private::EPropertyClass::Str, "spectateSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, spectateSecret), METADATA_PARAMS(NewProp_spectateSecret_MetaData, ARRAY_COUNT(NewProp_spectateSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_joinSecret = { UE4CodeGen_Private::EPropertyClass::Str, "joinSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, joinSecret), METADATA_PARAMS(NewProp_joinSecret_MetaData, ARRAY_COUNT(NewProp_joinSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_matchSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_matchSecret = { UE4CodeGen_Private::EPropertyClass::Str, "matchSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, matchSecret), METADATA_PARAMS(NewProp_matchSecret_MetaData, ARRAY_COUNT(NewProp_matchSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partyMax_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_partyMax = { UE4CodeGen_Private::EPropertyClass::Int, "partyMax", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partyMax), METADATA_PARAMS(NewProp_partyMax_MetaData, ARRAY_COUNT(NewProp_partyMax_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partySize_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_partySize = { UE4CodeGen_Private::EPropertyClass::Int, "partySize", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partySize), METADATA_PARAMS(NewProp_partySize_MetaData, ARRAY_COUNT(NewProp_partySize_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partyId_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_partyId = { UE4CodeGen_Private::EPropertyClass::Str, "partyId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partyId), METADATA_PARAMS(NewProp_partyId_MetaData, ARRAY_COUNT(NewProp_partyId_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_smallImageText_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_smallImageText = { UE4CodeGen_Private::EPropertyClass::Str, "smallImageText", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, smallImageText), METADATA_PARAMS(NewProp_smallImageText_MetaData, ARRAY_COUNT(NewProp_smallImageText_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_smallImageKey_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_smallImageKey = { UE4CodeGen_Private::EPropertyClass::Str, "smallImageKey", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, smallImageKey), METADATA_PARAMS(NewProp_smallImageKey_MetaData, ARRAY_COUNT(NewProp_smallImageKey_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_largeImageText_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_largeImageText = { UE4CodeGen_Private::EPropertyClass::Str, "largeImageText", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, largeImageText), METADATA_PARAMS(NewProp_largeImageText_MetaData, ARRAY_COUNT(NewProp_largeImageText_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_largeImageKey_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_largeImageKey = { UE4CodeGen_Private::EPropertyClass::Str, "largeImageKey", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, largeImageKey), METADATA_PARAMS(NewProp_largeImageKey_MetaData, ARRAY_COUNT(NewProp_largeImageKey_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_endTimestamp_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_endTimestamp = { UE4CodeGen_Private::EPropertyClass::Int, "endTimestamp", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, endTimestamp), METADATA_PARAMS(NewProp_endTimestamp_MetaData, ARRAY_COUNT(NewProp_endTimestamp_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_startTimestamp_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "todo, timestamps are 64bit, does that even matter?" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_startTimestamp = { UE4CodeGen_Private::EPropertyClass::Int, "startTimestamp", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, startTimestamp), METADATA_PARAMS(NewProp_startTimestamp_MetaData, ARRAY_COUNT(NewProp_startTimestamp_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_details_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_details = { UE4CodeGen_Private::EPropertyClass::Str, "details", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, details), METADATA_PARAMS(NewProp_details_MetaData, ARRAY_COUNT(NewProp_details_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_state_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_state = { UE4CodeGen_Private::EPropertyClass::Str, "state", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, state), METADATA_PARAMS(NewProp_state_MetaData, ARRAY_COUNT(NewProp_state_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_instance, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_spectateSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_matchSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partyMax, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partySize, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partyId, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_smallImageText, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_smallImageKey, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_largeImageText, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_largeImageKey, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_endTimestamp, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_startTimestamp, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_details, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_state, + }; + static const UE4CodeGen_Private::FStructParams ReturnStructParams = { + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + nullptr, + &UE4CodeGen_Private::TNewCppStructOpsWrapper::NewCppStructOps, + "DiscordRichPresence", + RF_Public|RF_Transient|RF_MarkAsNative, + EStructFlags(0x00000001), + sizeof(FDiscordRichPresence), + alignof(FDiscordRichPresence), + PropPointers, ARRAY_COUNT(PropPointers), + METADATA_PARAMS(Struct_MetaDataParams, ARRAY_COUNT(Struct_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUScriptStruct(ReturnStruct, ReturnStructParams); + } + return ReturnStruct; + } + uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC() { return 1613447826U; } +class UScriptStruct* FDiscordUserData::StaticStruct() +{ + static class UScriptStruct* Singleton = NULL; + if (!Singleton) + { + extern DISCORDRPC_API uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(); + Singleton = GetStaticStruct(Z_Construct_UScriptStruct_FDiscordUserData, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("DiscordUserData"), sizeof(FDiscordUserData), Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC()); + } + return Singleton; +} +static FCompiledInDeferStruct Z_CompiledInDeferStruct_UScriptStruct_FDiscordUserData(FDiscordUserData::StaticStruct, TEXT("/Script/DiscordRpc"), TEXT("DiscordUserData"), false, nullptr, nullptr); +static struct FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData +{ + FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData() + { + UScriptStruct::DeferCppStructOps(FName(TEXT("DiscordUserData")),new UScriptStruct::TCppStructOps); + } +} ScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData; + UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData() + { +#if WITH_HOT_RELOAD + extern uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(); + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UScriptStruct* ReturnStruct = FindExistingStructIfHotReloadOrDynamic(Outer, TEXT("DiscordUserData"), sizeof(FDiscordUserData), Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(), false); +#else + static UScriptStruct* ReturnStruct = nullptr; +#endif + if (!ReturnStruct) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Struct_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Ask to join callback data" }, + }; +#endif + auto NewStructOpsLambda = []() -> void* { return (UScriptStruct::ICppStructOps*)new UScriptStruct::TCppStructOps(); }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_avatar_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_avatar = { UE4CodeGen_Private::EPropertyClass::Str, "avatar", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, avatar), METADATA_PARAMS(NewProp_avatar_MetaData, ARRAY_COUNT(NewProp_avatar_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_discriminator_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_discriminator = { UE4CodeGen_Private::EPropertyClass::Str, "discriminator", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, discriminator), METADATA_PARAMS(NewProp_discriminator_MetaData, ARRAY_COUNT(NewProp_discriminator_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_username_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_username = { UE4CodeGen_Private::EPropertyClass::Str, "username", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, username), METADATA_PARAMS(NewProp_username_MetaData, ARRAY_COUNT(NewProp_username_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_userId_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_userId = { UE4CodeGen_Private::EPropertyClass::Str, "userId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, userId), METADATA_PARAMS(NewProp_userId_MetaData, ARRAY_COUNT(NewProp_userId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_avatar, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_discriminator, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_username, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_userId, + }; + static const UE4CodeGen_Private::FStructParams ReturnStructParams = { + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + nullptr, + &UE4CodeGen_Private::TNewCppStructOpsWrapper::NewCppStructOps, + "DiscordUserData", + RF_Public|RF_Transient|RF_MarkAsNative, + EStructFlags(0x00000001), + sizeof(FDiscordUserData), + alignof(FDiscordUserData), + PropPointers, ARRAY_COUNT(PropPointers), + METADATA_PARAMS(Struct_MetaDataParams, ARRAY_COUNT(Struct_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUScriptStruct(ReturnStruct, ReturnStructParams); + } + return ReturnStruct; + } + uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC() { return 636588304U; } + void UDiscordRpc::StaticRegisterNativesUDiscordRpc() + { + UClass* Class = UDiscordRpc::StaticClass(); + static const FNameNativePtrPair Funcs[] = { + { "ClearPresence", &UDiscordRpc::execClearPresence }, + { "Initialize", &UDiscordRpc::execInitialize }, + { "Respond", &UDiscordRpc::execRespond }, + { "RunCallbacks", &UDiscordRpc::execRunCallbacks }, + { "Shutdown", &UDiscordRpc::execShutdown }, + { "UpdatePresence", &UDiscordRpc::execUpdatePresence }, + }; + FNativeFunctionRegistrar::RegisterFunctions(Class, Funcs, ARRAY_COUNT(Funcs)); + } + UFunction* Z_Construct_UFunction_UDiscordRpc_ClearPresence() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Clear presence" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "ClearPresence", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Initialize() + { + struct DiscordRpc_eventInitialize_Parms + { + FString applicationId; + bool autoRegister; + FString optionalSteamId; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_optionalSteamId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_optionalSteamId = { UE4CodeGen_Private::EPropertyClass::Str, "optionalSteamId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventInitialize_Parms, optionalSteamId), METADATA_PARAMS(NewProp_optionalSteamId_MetaData, ARRAY_COUNT(NewProp_optionalSteamId_MetaData)) }; + auto NewProp_autoRegister_SetBit = [](void* Obj){ ((DiscordRpc_eventInitialize_Parms*)Obj)->autoRegister = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_autoRegister = { UE4CodeGen_Private::EPropertyClass::Bool, "autoRegister", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(DiscordRpc_eventInitialize_Parms), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(nullptr, 0) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_applicationId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_applicationId = { UE4CodeGen_Private::EPropertyClass::Str, "applicationId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventInitialize_Parms, applicationId), METADATA_PARAMS(NewProp_applicationId_MetaData, ARRAY_COUNT(NewProp_applicationId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_optionalSteamId, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_autoRegister, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_applicationId, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Initialize connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Initialize", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, sizeof(DiscordRpc_eventInitialize_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Respond() + { + struct DiscordRpc_eventRespond_Parms + { + FString userId; + int32 reply; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_reply = { UE4CodeGen_Private::EPropertyClass::Int, "reply", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventRespond_Parms, reply), METADATA_PARAMS(nullptr, 0) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_userId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_userId = { UE4CodeGen_Private::EPropertyClass::Str, "userId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventRespond_Parms, userId), METADATA_PARAMS(NewProp_userId_MetaData, ARRAY_COUNT(NewProp_userId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_reply, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_userId, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Respond to join request" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Respond", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, sizeof(DiscordRpc_eventRespond_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_RunCallbacks() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Check for callbacks" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "RunCallbacks", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Shutdown() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Shut down connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Shutdown", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_UpdatePresence() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Send presence" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "UpdatePresence", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UClass* Z_Construct_UClass_UDiscordRpc_NoRegister() + { + return UDiscordRpc::StaticClass(); + } + UClass* Z_Construct_UClass_UDiscordRpc() + { + static UClass* OuterClass = nullptr; + if (!OuterClass) + { + static UObject* (*const DependentSingletons[])() = { + (UObject* (*)())Z_Construct_UClass_UObject, + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + }; + static const FClassFunctionLinkInfo FuncInfo[] = { + { &Z_Construct_UFunction_UDiscordRpc_ClearPresence, "ClearPresence" }, // 510145216 + { &Z_Construct_UFunction_UDiscordRpc_Initialize, "Initialize" }, // 1572649349 + { &Z_Construct_UFunction_UDiscordRpc_Respond, "Respond" }, // 4089312034 + { &Z_Construct_UFunction_UDiscordRpc_RunCallbacks, "RunCallbacks" }, // 2574395339 + { &Z_Construct_UFunction_UDiscordRpc_Shutdown, "Shutdown" }, // 2738986725 + { &Z_Construct_UFunction_UDiscordRpc_UpdatePresence, "UpdatePresence" }, // 2597121176 + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Class_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "Category", "Discord" }, + { "DisplayName", "Discord RPC" }, + { "IncludePath", "DiscordRpcBlueprint.h" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_RichPresence_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "Rich presence info" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_RichPresence = { UE4CodeGen_Private::EPropertyClass::Struct, "RichPresence", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, RichPresence), Z_Construct_UScriptStruct_FDiscordRichPresence, METADATA_PARAMS(NewProp_RichPresence_MetaData, ARRAY_COUNT(NewProp_RichPresence_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnJoinRequest_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord another user sends a join request" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnJoinRequest = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnJoinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnJoinRequest), Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature, METADATA_PARAMS(NewProp_OnJoinRequest_MetaData, ARRAY_COUNT(NewProp_OnJoinRequest_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnSpectate_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord user presses spectate" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnSpectate = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnSpectate", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnSpectate), Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature, METADATA_PARAMS(NewProp_OnSpectate_MetaData, ARRAY_COUNT(NewProp_OnSpectate_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnJoin_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord user presses join" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnJoin = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnJoin", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnJoin), Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature, METADATA_PARAMS(NewProp_OnJoin_MetaData, ARRAY_COUNT(NewProp_OnJoin_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnErrored_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On error message" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnErrored = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnErrored", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnErrored), Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature, METADATA_PARAMS(NewProp_OnErrored_MetaData, ARRAY_COUNT(NewProp_OnErrored_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnDisconnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On disconnection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnDisconnected = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnDisconnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnDisconnected), Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature, METADATA_PARAMS(NewProp_OnDisconnected_MetaData, ARRAY_COUNT(NewProp_OnDisconnected_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnConnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnConnected = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnConnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnConnected), Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature, METADATA_PARAMS(NewProp_OnConnected_MetaData, ARRAY_COUNT(NewProp_OnConnected_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_IsConnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "Is Discord connected" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + auto NewProp_IsConnected_SetBit = [](void* Obj){ ((UDiscordRpc*)Obj)->IsConnected = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_IsConnected = { UE4CodeGen_Private::EPropertyClass::Bool, "IsConnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(UDiscordRpc), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(NewProp_IsConnected_MetaData, ARRAY_COUNT(NewProp_IsConnected_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_RichPresence, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnJoinRequest, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnSpectate, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnJoin, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnErrored, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnDisconnected, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnConnected, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_IsConnected, + }; + static const FCppClassTypeInfoStatic StaticCppClassTypeInfo = { + TCppClassTypeTraits::IsAbstract, + }; + static const UE4CodeGen_Private::FClassParams ClassParams = { + &UDiscordRpc::StaticClass, + DependentSingletons, ARRAY_COUNT(DependentSingletons), + 0x00900080u, + FuncInfo, ARRAY_COUNT(FuncInfo), + PropPointers, ARRAY_COUNT(PropPointers), + nullptr, + &StaticCppClassTypeInfo, + nullptr, 0, + METADATA_PARAMS(Class_MetaDataParams, ARRAY_COUNT(Class_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUClass(OuterClass, ClassParams); + } + return OuterClass; + } + IMPLEMENT_CLASS(UDiscordRpc, 1261885565); + static FCompiledInDefer Z_CompiledInDefer_UClass_UDiscordRpc(Z_Construct_UClass_UDiscordRpc, &UDiscordRpc::StaticClass, TEXT("/Script/DiscordRpc"), TEXT("UDiscordRpc"), false, nullptr, nullptr, nullptr); + DEFINE_VTABLE_PTR_HELPER_CTOR(UDiscordRpc); +PRAGMA_ENABLE_DEPRECATION_WARNINGS +#ifdef _MSC_VER +#pragma warning (pop) +#endif diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h new file mode 100644 index 0000000..c8c91ad --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h @@ -0,0 +1,299 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "ObjectMacros.h" +#include "ScriptMacros.h" + +PRAGMA_DISABLE_DEPRECATION_WARNINGS +struct FDiscordUserData; +#ifdef DISCORDRPC_DiscordRpcBlueprint_generated_h +#error "DiscordRpcBlueprint.generated.h already included, missing '#pragma once' in DiscordRpcBlueprint.h" +#endif +#define DISCORDRPC_DiscordRpcBlueprint_generated_h + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_54_GENERATED_BODY \ + friend DISCORDRPC_API class UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence(); \ + DISCORDRPC_API static class UScriptStruct* StaticStruct(); + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_15_GENERATED_BODY \ + friend DISCORDRPC_API class UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData(); \ + DISCORDRPC_API static class UScriptStruct* StaticStruct(); + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_45_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordJoinRequest_Parms \ +{ \ + FDiscordUserData joinRequest; \ +}; \ +static inline void FDiscordJoinRequest_DelegateWrapper(const FMulticastScriptDelegate& DiscordJoinRequest, FDiscordUserData const& joinRequest) \ +{ \ + _Script_DiscordRpc_eventDiscordJoinRequest_Parms Parms; \ + Parms.joinRequest=joinRequest; \ + DiscordJoinRequest.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_44_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordSpectate_Parms \ +{ \ + FString spectateSecret; \ +}; \ +static inline void FDiscordSpectate_DelegateWrapper(const FMulticastScriptDelegate& DiscordSpectate, const FString& spectateSecret) \ +{ \ + _Script_DiscordRpc_eventDiscordSpectate_Parms Parms; \ + Parms.spectateSecret=spectateSecret; \ + DiscordSpectate.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_43_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordJoin_Parms \ +{ \ + FString joinSecret; \ +}; \ +static inline void FDiscordJoin_DelegateWrapper(const FMulticastScriptDelegate& DiscordJoin, const FString& joinSecret) \ +{ \ + _Script_DiscordRpc_eventDiscordJoin_Parms Parms; \ + Parms.joinSecret=joinSecret; \ + DiscordJoin.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_42_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordErrored_Parms \ +{ \ + int32 errorCode; \ + FString errorMessage; \ +}; \ +static inline void FDiscordErrored_DelegateWrapper(const FMulticastScriptDelegate& DiscordErrored, int32 errorCode, const FString& errorMessage) \ +{ \ + _Script_DiscordRpc_eventDiscordErrored_Parms Parms; \ + Parms.errorCode=errorCode; \ + Parms.errorMessage=errorMessage; \ + DiscordErrored.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_41_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordDisconnected_Parms \ +{ \ + int32 errorCode; \ + FString errorMessage; \ +}; \ +static inline void FDiscordDisconnected_DelegateWrapper(const FMulticastScriptDelegate& DiscordDisconnected, int32 errorCode, const FString& errorMessage) \ +{ \ + _Script_DiscordRpc_eventDiscordDisconnected_Parms Parms; \ + Parms.errorCode=errorCode; \ + Parms.errorMessage=errorMessage; \ + DiscordDisconnected.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_40_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordConnected_Parms \ +{ \ + FDiscordUserData joinRequest; \ +}; \ +static inline void FDiscordConnected_DelegateWrapper(const FMulticastScriptDelegate& DiscordConnected, FDiscordUserData const& joinRequest) \ +{ \ + _Script_DiscordRpc_eventDiscordConnected_Parms Parms; \ + Parms.joinRequest=joinRequest; \ + DiscordConnected.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS \ + \ + DECLARE_FUNCTION(execRespond) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_userId); \ + P_GET_PROPERTY(UIntProperty,Z_Param_reply); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Respond(Z_Param_userId,Z_Param_reply); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execClearPresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->ClearPresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execUpdatePresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->UpdatePresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execRunCallbacks) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->RunCallbacks(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execShutdown) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Shutdown(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execInitialize) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_applicationId); \ + P_GET_UBOOL(Z_Param_autoRegister); \ + P_GET_PROPERTY(UStrProperty,Z_Param_optionalSteamId); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Initialize(Z_Param_applicationId,Z_Param_autoRegister,Z_Param_optionalSteamId); \ + P_NATIVE_END; \ + } + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS_NO_PURE_DECLS \ + \ + DECLARE_FUNCTION(execRespond) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_userId); \ + P_GET_PROPERTY(UIntProperty,Z_Param_reply); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Respond(Z_Param_userId,Z_Param_reply); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execClearPresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->ClearPresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execUpdatePresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->UpdatePresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execRunCallbacks) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->RunCallbacks(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execShutdown) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Shutdown(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execInitialize) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_applicationId); \ + P_GET_UBOOL(Z_Param_autoRegister); \ + P_GET_PROPERTY(UStrProperty,Z_Param_optionalSteamId); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Initialize(Z_Param_applicationId,Z_Param_autoRegister,Z_Param_optionalSteamId); \ + P_NATIVE_END; \ + } + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS_NO_PURE_DECLS \ +private: \ + static void StaticRegisterNativesUDiscordRpc(); \ + friend DISCORDRPC_API class UClass* Z_Construct_UClass_UDiscordRpc(); \ +public: \ + DECLARE_CLASS(UDiscordRpc, UObject, COMPILED_IN_FLAGS(0), 0, TEXT("/Script/DiscordRpc"), NO_API) \ + DECLARE_SERIALIZER(UDiscordRpc) \ + enum {IsIntrinsic=COMPILED_IN_INTRINSIC}; + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS \ +private: \ + static void StaticRegisterNativesUDiscordRpc(); \ + friend DISCORDRPC_API class UClass* Z_Construct_UClass_UDiscordRpc(); \ +public: \ + DECLARE_CLASS(UDiscordRpc, UObject, COMPILED_IN_FLAGS(0), 0, TEXT("/Script/DiscordRpc"), NO_API) \ + DECLARE_SERIALIZER(UDiscordRpc) \ + enum {IsIntrinsic=COMPILED_IN_INTRINSIC}; + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_STANDARD_CONSTRUCTORS \ + /** Standard constructor, called after all reflected properties have been initialized */ \ + NO_API UDiscordRpc(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ + DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UDiscordRpc) \ + DECLARE_VTABLE_PTR_HELPER_CTOR(NO_API, UDiscordRpc); \ +DEFINE_VTABLE_PTR_HELPER_CTOR_CALLER(UDiscordRpc); \ +private: \ + /** Private move- and copy-constructors, should never be used */ \ + NO_API UDiscordRpc(UDiscordRpc&&); \ + NO_API UDiscordRpc(const UDiscordRpc&); \ +public: + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_ENHANCED_CONSTRUCTORS \ + /** Standard constructor, called after all reflected properties have been initialized */ \ + NO_API UDiscordRpc(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ +private: \ + /** Private move- and copy-constructors, should never be used */ \ + NO_API UDiscordRpc(UDiscordRpc&&); \ + NO_API UDiscordRpc(const UDiscordRpc&); \ +public: \ + DECLARE_VTABLE_PTR_HELPER_CTOR(NO_API, UDiscordRpc); \ +DEFINE_VTABLE_PTR_HELPER_CTOR_CALLER(UDiscordRpc); \ + DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UDiscordRpc) + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_92_PROLOG +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_GENERATED_BODY_LEGACY \ +PRAGMA_DISABLE_DEPRECATION_WARNINGS \ +public: \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_STANDARD_CONSTRUCTORS \ +public: \ +PRAGMA_ENABLE_DEPRECATION_WARNINGS + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_GENERATED_BODY \ +PRAGMA_DISABLE_DEPRECATION_WARNINGS \ +public: \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS_NO_PURE_DECLS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS_NO_PURE_DECLS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_ENHANCED_CONSTRUCTORS \ +private: \ +PRAGMA_ENABLE_DEPRECATION_WARNINGS + + +#undef CURRENT_FILE_ID +#define CURRENT_FILE_ID MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h + + +#define FOREACH_ENUM_EDISCORDJOINRESPONSECODES(op) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_NO) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_YES) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE) +PRAGMA_ENABLE_DEPRECATION_WARNINGS diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcClasses.h b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcClasses.h new file mode 100644 index 0000000..8dee57e --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/DiscordRpcClasses.h @@ -0,0 +1,10 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#pragma once + + + diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/Timestamp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/Timestamp new file mode 100644 index 0000000..b196b52 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Inc/DiscordRpc/Timestamp @@ -0,0 +1 @@ +E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public\DiscordRpcBlueprint.h \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp new file mode 100644 index 0000000..dbd5333 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpc.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpcBlueprint.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp.obj.response new file mode 100644 index 0000000..ec2fce4 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.cpp.obj.response @@ -0,0 +1,307 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/Z7 +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/DIS_PROGRAM=0 +/DUE_GAME=1 +/DENABLE_PGO_PROFILE=0 +/DWITH_DEV_AUTOMATION_TESTS=0 +/DWITH_PERF_AUTOMATION_TESTS=0 +/DUNICODE +/D_UNICODE +/D__UNREAL__ +/DIS_MONOLITHIC=1 +/DWITH_ENGINE=1 +/DWITH_UNREAL_DEVELOPER_TOOLS=0 +/DWITH_COREUOBJECT=1 +/DUSE_STATS_WITHOUT_ENGINE=0 +/DWITH_PLUGIN_SUPPORT=0 +/DWITH_PERFCOUNTERS=0 +/DUSE_LOGGING_IN_SHIPPING=0 +/DWITH_LOGGING_TO_MEMORY=0 +/DUSE_CACHE_FREED_OS_ALLOCS=1 +/DUSE_CHECKS_IN_SHIPPING=0 +/DUE_BUILD_MINIMAL=1 +/DWITH_EDITOR=0 +/DWITH_EDITORONLY_DATA=0 +/DWITH_SERVER_CODE=1 +/DWITH_CEF3=1 +/DWITH_XGE_CONTROLLER=0 +/DUBT_COMPILED_PLATFORM=Win64 +/DUBT_COMPILED_TARGET=Game +/DWIN32=1 +/D_WIN32_WINNT=0x0601 +/DWINVER=0x0601 +/DPLATFORM_WINDOWS=1 +/DDEPTH_32_BIT_CONVERSION=0 +/DPROJECT_COPYRIGHT_STRING="Fill out your copyright notice in the Description page of Project Settings." +/DPROJECT_PRODUCT_NAME=MediocreMapper +/DPROJECT_PRODUCT_IDENTIFIER=MediocreMapper +/DNDEBUG=1 +/DUE_BUILD_SHIPPING=1 +/DUE_ENGINE_DIRECTORY=D:/Games/UE_4.19/Engine/ +/DORIGINAL_FILE_NAME=\"UE4-DiscordRpc-Win64-Shipping.lib\" +/DUE_IS_ENGINE_MODULE=0 +/DUE_BUILD_DEVELOPMENT_WITH_DEBUGGAME=0 +/DUE_PROJECT_NAME=MediocreMapper +/DDISCORD_DYNAMIC_LIB=1 +/DDEPRECATED_FORGAME=DEPRECATED +/DDISCORD_DYNAMIC_LIB=1 +/DDISCORDRPC_API= +/DUE_ENABLE_ICU=1 +/DWITH_VS_PERF_PROFILER=0 +/DWITH_DIRECTXMATH=0 +/DCORE_API= +/DDISCORD_DYNAMIC_LIB=1 +/DCOREUOBJECT_API= +/DWITH_PHYSX=1 +/DWITH_APEX=1 +/DWITH_APEX_CLOTHING=1 +/DWITH_CLOTH_COLLISION_DETECTION=1 +/DWITH_PHYSX_COOKING=1 +/DWITH_NVCLOTH=1 +/DWITH_RECAST=1 +/DGPUPARTICLE_LOCAL_VF_ONLY=0 +/DENGINE_API= +/DAPPLICATIONCORE_API= +/DRHI_API= +/DJSON_API= +/DSLATE_DEFERRED_DESIRED_SIZE=0 +/DWITH_FREETYPE=1 +/DSLATECORE_API= +/DINPUTCORE_API= +/DSLATE_API= +/DWITH_UNREALPNG=1 +/DWITH_UNREALJPEG=1 +/DWITH_UNREALEXR=1 +/DIMAGEWRAPPER_API= +/DMESSAGING_API= +/DMESSAGINGCOMMON_API= +/DRENDERCORE_API= +/DSHADERCORE_API= +/DUTILITYSHADERS_API= +/DASSETREGISTRY_API= +/DENGINEMESSAGES_API= +/DENGINESETTINGS_API= +/DSYNTHBENCHMARK_API= +/DRENDERER_API= +/DGAMEPLAYTAGS_API= +/DWITH_RECAST=1 +/DWITH_GAMEPLAY_DEBUGGER=0 +/DAIMODULE_API= +/DGAMEPLAYTASKS_API= +/DDATABASESUPPORT_API= +/DPACKETHANDLER_API= +/DRELIABILITYHANDLERCOMPONENT_API= +/DHARDWARESURVEY_API= +/DCLOTHINGSYSTEMRUNTIMEINTERFACE_API= +/DNETWORKREPLAYSTREAMING_API= +/DAUDIOMIXER_API= +/DLOAD_PLUGINS_FOR_TARGET_PLATFORMS=0 +/DPROJECTS_API= +/D_HAS_EXCEPTIONS=0 +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.cpp" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp new file mode 100644 index 0000000..4e85f2d --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc\DiscordRpc.init.gen.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc\DiscordRpcBlueprint.gen.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response new file mode 100644 index 0000000..d2847be --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response @@ -0,0 +1,307 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/DIS_PROGRAM=0 +/DUE_GAME=1 +/DENABLE_PGO_PROFILE=0 +/DWITH_DEV_AUTOMATION_TESTS=0 +/DWITH_PERF_AUTOMATION_TESTS=0 +/DUNICODE +/D_UNICODE +/D__UNREAL__ +/DIS_MONOLITHIC=1 +/DWITH_ENGINE=1 +/DWITH_UNREAL_DEVELOPER_TOOLS=0 +/DWITH_COREUOBJECT=1 +/DUSE_STATS_WITHOUT_ENGINE=0 +/DWITH_PLUGIN_SUPPORT=0 +/DWITH_PERFCOUNTERS=0 +/DUSE_LOGGING_IN_SHIPPING=0 +/DWITH_LOGGING_TO_MEMORY=0 +/DUSE_CACHE_FREED_OS_ALLOCS=1 +/DUSE_CHECKS_IN_SHIPPING=0 +/DUE_BUILD_MINIMAL=1 +/DWITH_EDITOR=0 +/DWITH_EDITORONLY_DATA=0 +/DWITH_SERVER_CODE=1 +/DWITH_CEF3=1 +/DWITH_XGE_CONTROLLER=0 +/DUBT_COMPILED_PLATFORM=Win64 +/DUBT_COMPILED_TARGET=Game +/DWIN32=1 +/D_WIN32_WINNT=0x0601 +/DWINVER=0x0601 +/DPLATFORM_WINDOWS=1 +/DDEPTH_32_BIT_CONVERSION=0 +/DPROJECT_COPYRIGHT_STRING="Fill out your copyright notice in the Description page of Project Settings." +/DPROJECT_PRODUCT_NAME=MediocreMapper +/DPROJECT_PRODUCT_IDENTIFIER=MediocreMapper +/DNDEBUG=1 +/DUE_BUILD_SHIPPING=1 +/DUE_ENGINE_DIRECTORY=D:/Games/UE_4.19/Engine/ +/DORIGINAL_FILE_NAME=\"UE4-DiscordRpc-Win64-Shipping.lib\" +/DUE_IS_ENGINE_MODULE=0 +/DUE_BUILD_DEVELOPMENT_WITH_DEBUGGAME=0 +/DUE_PROJECT_NAME=MediocreMapper +/DDISCORD_DYNAMIC_LIB=1 +/DDEPRECATED_FORGAME=DEPRECATED +/DDISCORD_DYNAMIC_LIB=1 +/DDISCORDRPC_API= +/DUE_ENABLE_ICU=1 +/DWITH_VS_PERF_PROFILER=0 +/DWITH_DIRECTXMATH=0 +/DCORE_API= +/DDISCORD_DYNAMIC_LIB=1 +/DCOREUOBJECT_API= +/DWITH_PHYSX=1 +/DWITH_APEX=1 +/DWITH_APEX_CLOTHING=1 +/DWITH_CLOTH_COLLISION_DETECTION=1 +/DWITH_PHYSX_COOKING=1 +/DWITH_NVCLOTH=1 +/DWITH_RECAST=1 +/DGPUPARTICLE_LOCAL_VF_ONLY=0 +/DENGINE_API= +/DAPPLICATIONCORE_API= +/DRHI_API= +/DJSON_API= +/DSLATE_DEFERRED_DESIRED_SIZE=0 +/DWITH_FREETYPE=1 +/DSLATECORE_API= +/DINPUTCORE_API= +/DSLATE_API= +/DWITH_UNREALPNG=1 +/DWITH_UNREALJPEG=1 +/DWITH_UNREALEXR=1 +/DIMAGEWRAPPER_API= +/DMESSAGING_API= +/DMESSAGINGCOMMON_API= +/DRENDERCORE_API= +/DSHADERCORE_API= +/DUTILITYSHADERS_API= +/DASSETREGISTRY_API= +/DENGINEMESSAGES_API= +/DENGINESETTINGS_API= +/DSYNTHBENCHMARK_API= +/DRENDERER_API= +/DGAMEPLAYTAGS_API= +/DWITH_RECAST=1 +/DWITH_GAMEPLAY_DEBUGGER=0 +/DAIMODULE_API= +/DGAMEPLAYTASKS_API= +/DDATABASESUPPORT_API= +/DPACKETHANDLER_API= +/DRELIABILITYHANDLERCOMPONENT_API= +/DHARDWARESURVEY_API= +/DCLOTHINGSYSTEMRUNTIMEINTERFACE_API= +/DNETWORKREPLAYSTREAMING_API= +/DAUDIOMIXER_API= +/DLOAD_PLUGINS_FOR_TARGET_PLATFORMS=0 +/DPROJECTS_API= +/D_HAS_EXCEPTIONS=0 +/D_HAS_EXCEPTIONS=0 +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.gen.cpp" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/UE4-DiscordRpc-Win64-Shipping.lib.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/UE4-DiscordRpc-Win64-Shipping.lib.response new file mode 100644 index 0000000..0ca41f4 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4/Shipping/UE4-DiscordRpc-Win64-Shipping.lib.response @@ -0,0 +1,9 @@ +/NOLOGO +/errorReport:prompt +/MACHINE:x64 +/SUBSYSTEM:WINDOWS +/LTCG +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Intermediate\Build\Win64\UE4\Shipping\DiscordRpc\PCLaunch.rc.res" +/OUT:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Binaries\Win64\UE4-DiscordRpc-Win64-Shipping.lib" \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Definitions.DiscordRpc.h b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Definitions.DiscordRpc.h new file mode 100644 index 0000000..2201fa4 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Definitions.DiscordRpc.h @@ -0,0 +1,163 @@ +#undef DISCORDRPC_API +#undef UE_IS_ENGINE_MODULE +#undef DEPRECATED_FORGAME +#define DEPRECATED_FORGAME DEPRECATED +#define IS_PROGRAM 0 +#define UE_EDITOR 1 +#define ENABLE_PGO_PROFILE 0 +#define WITH_DEV_AUTOMATION_TESTS 1 +#define WITH_PERF_AUTOMATION_TESTS 1 +#define UNICODE 1 +#define _UNICODE 1 +#define __UNREAL__ 1 +#define IS_MONOLITHIC 0 +#define WITH_ENGINE 1 +#define WITH_UNREAL_DEVELOPER_TOOLS 1 +#define WITH_COREUOBJECT 1 +#define USE_STATS_WITHOUT_ENGINE 0 +#define WITH_PLUGIN_SUPPORT 0 +#define WITH_PERFCOUNTERS 1 +#define USE_LOGGING_IN_SHIPPING 0 +#define WITH_LOGGING_TO_MEMORY 0 +#define USE_CACHE_FREED_OS_ALLOCS 1 +#define USE_CHECKS_IN_SHIPPING 0 +#define UE_BUILD_MINIMAL 0 +#define WITH_EDITOR 1 +#define WITH_SERVER_CODE 1 +#define WITH_CEF3 1 +#define WITH_XGE_CONTROLLER 1 +#define UBT_COMPILED_PLATFORM Win64 +#define UBT_COMPILED_TARGET Editor +#define WIN32 1 +#define _WIN32_WINNT 0x0601 +#define WINVER 0x0601 +#define PLATFORM_WINDOWS 1 +#define DEPTH_32_BIT_CONVERSION 0 +#define NDEBUG 1 +#define UE_BUILD_DEVELOPMENT 1 +#define ORIGINAL_FILE_NAME "UE4Editor-DiscordRpc.dll" +#define UE_IS_ENGINE_MODULE 0 +#define UE_BUILD_DEVELOPMENT_WITH_DEBUGGAME 0 +#define UE_PROJECT_NAME MediocreMapper +#define DISCORD_DYNAMIC_LIB 1 +#define DEPRECATED_FORGAME DEPRECATED +#define DISCORD_DYNAMIC_LIB 1 +#define DISCORDRPC_API DLLEXPORT +#define UE_ENABLE_ICU 1 +#define WITH_VS_PERF_PROFILER 0 +#define WITH_DIRECTXMATH 0 +#define CORE_API DLLIMPORT +#define DISCORD_DYNAMIC_LIB 1 +#define COREUOBJECT_API DLLIMPORT +#define WITH_PHYSX 1 +#define WITH_APEX 1 +#define WITH_APEX_CLOTHING 1 +#define WITH_CLOTH_COLLISION_DETECTION 1 +#define WITH_PHYSX_COOKING 1 +#define WITH_NVCLOTH 1 +#define WITH_RECAST 1 +#define GPUPARTICLE_LOCAL_VF_ONLY 0 +#define ENGINE_API DLLIMPORT +#define APPLICATIONCORE_API DLLIMPORT +#define RHI_API DLLIMPORT +#define JSON_API DLLIMPORT +#define SLATE_DEFERRED_DESIRED_SIZE 0 +#define WITH_FREETYPE 1 +#define SLATECORE_API DLLIMPORT +#define INPUTCORE_API DLLIMPORT +#define SLATE_API DLLIMPORT +#define WITH_UNREALPNG 1 +#define WITH_UNREALJPEG 1 +#define WITH_UNREALEXR 1 +#define IMAGEWRAPPER_API DLLIMPORT +#define MESSAGING_API DLLIMPORT +#define MESSAGINGCOMMON_API DLLIMPORT +#define RENDERCORE_API DLLIMPORT +#define SHADERCORE_API DLLIMPORT +#define UTILITYSHADERS_API DLLIMPORT +#define ASSETREGISTRY_API DLLIMPORT +#define ENGINEMESSAGES_API DLLIMPORT +#define ENGINESETTINGS_API DLLIMPORT +#define SYNTHBENCHMARK_API DLLIMPORT +#define RENDERER_API +#define GAMEPLAYTAGS_API DLLIMPORT +#define WITH_RECAST 1 +#define WITH_GAMEPLAY_DEBUGGER 1 +#define AIMODULE_API DLLIMPORT +#define GAMEPLAYTASKS_API DLLIMPORT +#define DATABASESUPPORT_API DLLIMPORT +#define PACKETHANDLER_API DLLIMPORT +#define RELIABILITYHANDLERCOMPONENT_API DLLIMPORT +#define HARDWARESURVEY_API DLLIMPORT +#define WITH_PHYSX 1 +#define WITH_APEX 1 +#define WITH_APEX_CLOTHING 1 +#define WITH_CLOTH_COLLISION_DETECTION 1 +#define WITH_PHYSX_COOKING 1 +#define WITH_NVCLOTH 1 +#define WITH_RECAST 1 +#define UNREALED_API DLLIMPORT +#define BSPMODE_API DLLIMPORT +#define DIRECTORYWATCHER_API DLLIMPORT +#define DOCUMENTATION_API DLLIMPORT +#define LOAD_PLUGINS_FOR_TARGET_PLATFORMS 1 +#define PROJECTS_API DLLIMPORT +#define SANDBOXFILE_API DLLIMPORT +#define EDITORSTYLE_API DLLIMPORT +#define SOURCE_CONTROL_WITH_SLATE 1 +#define SOURCECONTROL_API DLLIMPORT +#define UNREALEDMESSAGES_API DLLIMPORT +#define GAMEPLAYDEBUGGER_API DLLIMPORT +#define BLUEPRINTGRAPH_API DLLIMPORT +#define HTTP_PACKAGE 1 +#define CURL_ENABLE_DEBUG_CALLBACK 1 +#define CURL_ENABLE_NO_TIMEOUTS_OPTION 1 +#define HTTP_API DLLIMPORT +#define UNREALAUDIO_API DLLIMPORT +#define FUNCTIONALTESTING_API DLLIMPORT +#define AUTOMATIONCONTROLLER_API DLLIMPORT +#define LOCALIZATION_API DLLIMPORT +#define AUDIOEDITOR_API DLLIMPORT +#define LEVELEDITOR_API DLLIMPORT +#define SETTINGS_API +#define INTROTUTORIALS_API +#define HEADMOUNTEDDISPLAY_API +#define VREDITOR_API +#define COMMONMENUEXTENSIONS_API +#define WITH_PHYSX 1 +#define WITH_APEX 1 +#define WITH_APEX_CLOTHING 1 +#define WITH_CLOTH_COLLISION_DETECTION 1 +#define WITH_PHYSX_COOKING 1 +#define WITH_NVCLOTH 1 +#define LANDSCAPE_API DLLIMPORT +#define PROPERTYEDITOR_API DLLIMPORT +#define ACTORPICKERMODE_API DLLIMPORT +#define SCENEDEPTHPICKERMODE_API DLLIMPORT +#define DETAILCUSTOMIZATIONS_API DLLIMPORT +#define CLASSVIEWER_API DLLIMPORT +#define GRAPHEDITOR_API DLLIMPORT +#define CONTENTBROWSER_API DLLIMPORT +#define ENABLE_HTTP_FOR_NFS 1 +#define NETWORKFILESYSTEM_API DLLIMPORT +#define SOCKETS_PACKAGE 1 +#define SOCKETS_API DLLIMPORT +#define UMG_API DLLIMPORT +#define MOVIESCENE_API DLLIMPORT +#define MOVIESCENETRACKS_API DLLIMPORT +#define WITH_OGGVORBIS 1 +#define XAUDIO2_API DLLIMPORT +#define AUDIOMIXERXAUDIO2_API DLLIMPORT +#define COLLECTIONMANAGER_API +#define ADDCONTENTDIALOG_API +#define USE_EMBREE 1 +#define MESHUTILITIES_API +#define MESHMERGEUTILITIES_API +#define HIERARCHICALLODUTILITIES_API +#define MESHREDUCTIONINTERFACE_API +#define ASSETTOOLS_API +#define KISMETCOMPILER_API +#define KISMET_API DLLIMPORT +#define CLOTHINGSYSTEMRUNTIMEINTERFACE_API DLLIMPORT +#define NETWORKREPLAYSTREAMING_API +#define AUDIOMIXER_API diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp new file mode 100644 index 0000000..dbd5333 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpc.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private\DiscordRpcBlueprint.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response new file mode 100644 index 0000000..173fc65 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.cpp.obj.response @@ -0,0 +1,376 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/D_WINDLL +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/EHsc +/Z7 +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Programs\UnrealLightmass\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\AutoReimport +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Commandlets +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Dialogs +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\DragAndDrop +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Features +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Kismet2 +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Layers +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Settings +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Toolkits +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UnrealEd +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd +/I D:\Games\UE_4.19\Engine\Source\Editor\BspMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\BspMode +/I D:\Games\UE_4.19\Engine\Source\Developer\DirectoryWatcher\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\DirectoryWatcher +/I D:\Games\UE_4.19\Engine\Source\Editor\Documentation\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\Documentation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/I D:\Games\UE_4.19\Engine\Source\Runtime\SandboxFile\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SandboxFile +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EditorStyle +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl\Public\Tests +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\SourceControl +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UnrealEdMessages +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages +/I D:\Games\UE_4.19\Engine\Source\Developer\GameplayDebugger\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayDebugger +/I D:\Games\UE_4.19\Engine\Source\Developer\GameplayDebugger +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\BlueprintGraph +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP +/I D:\Games\UE_4.19\Engine\Source\Runtime\UnrealAudio\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UnrealAudio +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting\Classes +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\FunctionalTesting +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting +/I D:\Games\UE_4.19\Engine\Source\Developer\AutomationController\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AutomationController +/I D:\Games\UE_4.19\Engine\Source\Developer\AutomationController +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization\Public\Serialization +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Localization +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Public\AssetTypeActions +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AudioEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\LevelEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\LevelEditor +/I D:\Games\UE_4.19\Engine\Source\Developer\Settings\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\Settings +/I D:\Games\UE_4.19\Engine\Source\Editor\IntroTutorials\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\IntroTutorials +/I D:\Games\UE_4.19\Engine\Source\Editor\IntroTutorials +/I D:\Games\UE_4.19\Engine\Source\Runtime\HeadMountedDisplay\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\HeadMountedDisplay +/I D:\Games\UE_4.19\Engine\Source\Runtime\HeadMountedDisplay +/I D:\Games\UE_4.19\Engine\Source\Editor\VREditor\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\VREditor +/I D:\Games\UE_4.19\Engine\Source\Editor\VREditor +/I D:\Games\UE_4.19\Engine\Source\Editor\CommonMenuExtensions\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\CommonMenuExtensions +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Landscape +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape +/I D:\Games\UE_4.19\Engine\Source\Editor\PropertyEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\PropertyEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\ActorPickerMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\ActorPickerMode +/I D:\Games\UE_4.19\Engine\Source\Editor\SceneDepthPickerMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\SceneDepthPickerMode +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations\Public\Customizations +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations +/I D:\Games\UE_4.19\Engine\Source\Editor\ClassViewer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ClassViewer +/I D:\Games\UE_4.19\Engine\Source\Editor\ClassViewer +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public\KismetNodes +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public\KismetPins +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GraphEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\ContentBrowser\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ContentBrowser +/I D:\Games\UE_4.19\Engine\Source\Editor\ContentBrowser +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkFileSystem\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkFileSystem +/I D:\Games\UE_4.19\Engine\Source\Runtime\Sockets\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Sockets +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Binding +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Slate +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UMG +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Compilation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Evaluation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Evaluation\Blending +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Generators +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Sections +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Tracks +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\MovieScene +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Evaluation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Sections +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Tracks +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\MovieSceneTracks +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\XAudio2\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\XAudio2 +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\AudioMixerXAudio2 +/I D:\Games\UE_4.19\Engine\Source\Developer\CollectionManager\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\CollectionManager +/I D:\Games\UE_4.19\Engine\Source\Editor\AddContentDialog\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AddContentDialog +/I D:\Games\UE_4.19\Engine\Source\Editor\AddContentDialog +/I D:\Games\UE_4.19\Engine\Source\ThirdParty\IntelEmbree\Embree2140\Win64\include +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshMergeUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshMergeUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\HierarchicalLODUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\HierarchicalLODUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshReductionInterface\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshReductionInterface +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools\Public\AssetTypeActions +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AssetTools +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools +/I D:\Games\UE_4.19\Engine\Source\Editor\KismetCompiler\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\KismetCompiler +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public\Nodes +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public\WorkflowOrientedApp +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Kismet +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/FI"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h" +/Yu"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h" +/Fp"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h.pch" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.cpp" +/FI"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Definitions.DiscordRpc.h" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp new file mode 100644 index 0000000..a543ef7 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp @@ -0,0 +1,3 @@ +// This file is automatically generated at compile-time to include some subset of the user-created cpp files. +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Inc\DiscordRpc\DiscordRpc.init.gen.cpp" +#include "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Inc\DiscordRpc\DiscordRpcBlueprint.gen.cpp" diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response new file mode 100644 index 0000000..ea1d7cc --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/DiscordRpc/Module.DiscordRpc.gen.cpp.obj.response @@ -0,0 +1,375 @@ +/Zc:inline +/nologo +/Oi +/c +/Gy +/Zm850 +/wd4819 +/D_CRT_STDIO_LEGACY_WIDE_SPECIFIERS=1 +/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1 +/D_WINDLL +/source-charset:utf-8 /execution-charset:utf-8 +/Ox +/Ot +/Ob2 +/errorReport:prompt +/EHsc +/MD +/bigobj +/fp:fast +/Zo +/Zp8 +/wd4463 +/wd4838 +/w44668 +/I D:\Games\UE_4.19\Engine\Source +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Private" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Include" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Inc\DiscordRpc" +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc" +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Async +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Containers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Delegates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Math +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Modules\Boilerplate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Serialization\Csv +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\UObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Core +/I "E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary" +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Misc +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Serialization\Formatters +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\Templates +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject\Public\UObject +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\CoreUObject +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\AI\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Curves +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\EdGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Internationalization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Net +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\PacketHandlers +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Performance +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Physics +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\ProfilingDebugging +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine\Public\VisualLogger +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\Engine +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\ApplicationCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RHI +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Dom +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Policies +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json\Public\Serialization +/I D:\Games\UE_4.19\Engine\Source\Runtime\Json +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Brushes +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Fonts +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Logging +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Rendering +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Sound +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Stats +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Textures +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Types +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore\Public\Widgets +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\SlateCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\HAL +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore\Public\Windows +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\InputCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Application +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Commands +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MetaData +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\MultiBox +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Styling +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Framework\Views +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Colors +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Docking +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Images +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Input +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\LayerManager +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Layout +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Navigation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Notifications +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Text +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate\Public\Widgets\Views +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\Slate +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ImageWrapper +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Messaging +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MessagingCommon +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\RenderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\ShaderCore +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UtilityShaders +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\AssetRegistry +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineMessages +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\EngineSettings +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SynthBenchmark +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\Renderer +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTags +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule\Classes +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\AIModule +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\GameplayTasks +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\DatabaseSupport +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\PacketHandler +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\PacketHandlers\ReliabilityHandlerComponent +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\HardwareSurvey +/I D:\Games\UE_4.19\Engine\Source\Programs\UnrealLightmass\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\AutoReimport +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Commandlets +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Dialogs +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\DragAndDrop +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Features +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Kismet2 +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Layers +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Settings +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Tests +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd\Public\Toolkits +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UnrealEd +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEd +/I D:\Games\UE_4.19\Engine\Source\Editor\BspMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\BspMode +/I D:\Games\UE_4.19\Engine\Source\Developer\DirectoryWatcher\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\DirectoryWatcher +/I D:\Games\UE_4.19\Engine\Source\Editor\Documentation\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\Documentation +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Projects +/I D:\Games\UE_4.19\Engine\Source\Runtime\SandboxFile\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\SandboxFile +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\EditorStyle +/I D:\Games\UE_4.19\Engine\Source\Editor\EditorStyle +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl\Public\Tests +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\SourceControl +/I D:\Games\UE_4.19\Engine\Source\Developer\SourceControl +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UnrealEdMessages +/I D:\Games\UE_4.19\Engine\Source\Editor\UnrealEdMessages +/I D:\Games\UE_4.19\Engine\Source\Developer\GameplayDebugger\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GameplayDebugger +/I D:\Games\UE_4.19\Engine\Source\Developer\GameplayDebugger +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\BlueprintGraph +/I D:\Games\UE_4.19\Engine\Source\Editor\BlueprintGraph +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\GenericPlatform +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\Interfaces +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP\Public\Windows +/I D:\Games\UE_4.19\Engine\Source\Runtime\Online\HTTP +/I D:\Games\UE_4.19\Engine\Source\Runtime\UnrealAudio\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UnrealAudio +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting\Classes +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\FunctionalTesting +/I D:\Games\UE_4.19\Engine\Source\Developer\FunctionalTesting +/I D:\Games\UE_4.19\Engine\Source\Developer\AutomationController\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AutomationController +/I D:\Games\UE_4.19\Engine\Source\Developer\AutomationController +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization\Public\Serialization +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Localization +/I D:\Games\UE_4.19\Engine\Source\Developer\Localization +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor\Public\AssetTypeActions +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AudioEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\AudioEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\LevelEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\LevelEditor +/I D:\Games\UE_4.19\Engine\Source\Developer\Settings\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\Settings +/I D:\Games\UE_4.19\Engine\Source\Editor\IntroTutorials\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\IntroTutorials +/I D:\Games\UE_4.19\Engine\Source\Editor\IntroTutorials +/I D:\Games\UE_4.19\Engine\Source\Runtime\HeadMountedDisplay\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\HeadMountedDisplay +/I D:\Games\UE_4.19\Engine\Source\Runtime\HeadMountedDisplay +/I D:\Games\UE_4.19\Engine\Source\Editor\VREditor\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\VREditor +/I D:\Games\UE_4.19\Engine\Source\Editor\VREditor +/I D:\Games\UE_4.19\Engine\Source\Editor\CommonMenuExtensions\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\CommonMenuExtensions +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Landscape +/I D:\Games\UE_4.19\Engine\Source\Runtime\Landscape +/I D:\Games\UE_4.19\Engine\Source\Editor\PropertyEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\PropertyEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\ActorPickerMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\ActorPickerMode +/I D:\Games\UE_4.19\Engine\Source\Editor\SceneDepthPickerMode\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\SceneDepthPickerMode +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations\Public\Customizations +/I D:\Games\UE_4.19\Engine\Source\Editor\DetailCustomizations +/I D:\Games\UE_4.19\Engine\Source\Editor\ClassViewer\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ClassViewer +/I D:\Games\UE_4.19\Engine\Source\Editor\ClassViewer +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public\KismetNodes +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor\Public\KismetPins +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\GraphEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\GraphEditor +/I D:\Games\UE_4.19\Engine\Source\Editor\ContentBrowser\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ContentBrowser +/I D:\Games\UE_4.19\Engine\Source\Editor\ContentBrowser +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkFileSystem\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkFileSystem +/I D:\Games\UE_4.19\Engine\Source\Runtime\Sockets\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Sockets +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Animation +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Binding +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Blueprint +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG\Public\Slate +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\UMG +/I D:\Games\UE_4.19\Engine\Source\Runtime\UMG +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Compilation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Evaluation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Evaluation\Blending +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Generators +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Sections +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene\Public\Tracks +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\MovieScene +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieScene +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Evaluation +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Sections +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks\Public\Tracks +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\MovieSceneTracks +/I D:\Games\UE_4.19\Engine\Source\Runtime\MovieSceneTracks +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\XAudio2\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\XAudio2 +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\Windows\AudioMixerXAudio2 +/I D:\Games\UE_4.19\Engine\Source\Developer\CollectionManager\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\CollectionManager +/I D:\Games\UE_4.19\Engine\Source\Editor\AddContentDialog\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AddContentDialog +/I D:\Games\UE_4.19\Engine\Source\Editor\AddContentDialog +/I D:\Games\UE_4.19\Engine\Source\ThirdParty\IntelEmbree\Embree2140\Win64\include +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshMergeUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshMergeUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\HierarchicalLODUtilities\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\HierarchicalLODUtilities +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshReductionInterface\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\MeshReductionInterface +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools\Public +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools\Public\AssetTypeActions +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AssetTools +/I D:\Games\UE_4.19\Engine\Source\Developer\AssetTools +/I D:\Games\UE_4.19\Engine\Source\Editor\KismetCompiler\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\KismetCompiler +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Classes +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public\Nodes +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet\Public\WorkflowOrientedApp +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\Kismet +/I D:\Games\UE_4.19\Engine\Source\Editor\Kismet +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface\Public +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\ClothingSystemRuntimeInterface +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming\Public +/I D:\Games\UE_4.19\Engine\Source\Runtime\NetworkReplayStreaming\NetworkReplayStreaming +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Classes +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\Components +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer\Public\DSP +/I D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Inc\AudioMixer +/I D:\Games\UE_4.19\Engine\Source\Runtime\AudioMixer +/FI"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h" +/Yu"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h" +/Fp"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h.pch" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.gen.cpp" +/FI"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Definitions.DiscordRpc.h" +/Fo"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +/TP +/GR- +/W4 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.dll.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.dll.response new file mode 100644 index 0000000..b632a02 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.dll.response @@ -0,0 +1,70 @@ +/MANIFEST:NO +/NOLOGO +/DEBUG +/errorReport:prompt +/MACHINE:x64 +/SUBSYSTEM:WINDOWS +/FIXED:No +/NXCOMPAT +/STACK:5000000 +/DELAY:UNLOAD +/DLL +/PDBALTPATH:%_PDB% +/OPT:NOREF +/OPT:NOICF +/INCREMENTAL:NO +/ignore:4199 +/ignore:4099 +/DELAYLOAD:"d3d12.dll" +/DELAYLOAD:"discord-rpc.dll" +/LIBPATH:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Win64" +/NODEFAULTLIB:"LIBCMT" +/NODEFAULTLIB:"LIBCPMT" +/NODEFAULTLIB:"LIBCMTD" +/NODEFAULTLIB:"LIBCPMTD" +/NODEFAULTLIB:"MSVCRTD" +/NODEFAULTLIB:"MSVCPRTD" +/NODEFAULTLIB:"LIBC" +/NODEFAULTLIB:"LIBCP" +/NODEFAULTLIB:"LIBCD" +/NODEFAULTLIB:"LIBCPD" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\PCLaunch.rc.res" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\ModuleVersionResource.rc.inl.res" +"delayimp.lib" +"wininet.lib" +"rpcrt4.lib" +"ws2_32.lib" +"dbghelp.lib" +"comctl32.lib" +"Winmm.lib" +"kernel32.lib" +"user32.lib" +"gdi32.lib" +"winspool.lib" +"comdlg32.lib" +"advapi32.lib" +"shell32.lib" +"ole32.lib" +"oleaut32.lib" +"uuid.lib" +"odbc32.lib" +"odbccp32.lib" +"netapi32.lib" +"iphlpapi.lib" +"setupapi.lib" +"dwmapi.lib" +"imm32.lib" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\ThirdParty\DiscordRpcLibrary\Win64\discord-rpc.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-CoreUObject.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Engine.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Slate.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-SlateCore.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Projects.lib" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Core.lib" +/OUT:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Binaries\Win64\UE4Editor-DiscordRpc.dll" +/IMPLIB:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-DiscordRpc.suppressed.lib" +/PDB:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Binaries\Win64\UE4Editor-DiscordRpc.pdb" +/ignore:4078 \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.exp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.exp new file mode 100644 index 0000000..cfe394c Binary files /dev/null and b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.exp differ diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.lib.response b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.lib.response new file mode 100644 index 0000000..ce1b94e --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.lib.response @@ -0,0 +1,14 @@ +/NOLOGO +/errorReport:prompt +/MACHINE:x64 +/SUBSYSTEM:WINDOWS +/DEF +/NAME:"UE4Editor-DiscordRpc.dll" +/IGNORE:4221 +/NODEFAULTLIB +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\Engine\SharedPCH.Engine.h.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.cpp.obj" +"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\Module.DiscordRpc.gen.cpp.obj" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\DiscordRpc\PCLaunch.rc.res" +"D:\Games\UE_4.19\Engine\Intermediate\Build\Win64\UE4Editor\Development\ModuleVersionResource.rc.inl.res" +/OUT:"E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-DiscordRpc.lib" \ No newline at end of file diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.suppressed.exp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.suppressed.exp new file mode 100644 index 0000000..cc0cbbd Binary files /dev/null and b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Development/UE4Editor-DiscordRpc.suppressed.exp differ diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpc.init.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpc.init.gen.cpp new file mode 100644 index 0000000..b380c04 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpc.init.gen.cpp @@ -0,0 +1,49 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "GeneratedCppIncludes.h" +#include "Private/DiscordRpcPrivatePCH.h" +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable : 4883) +#endif +PRAGMA_DISABLE_DEPRECATION_WARNINGS +void EmptyLinkFunctionForGeneratedCodeDiscordRpc_init() {} + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature(); + UPackage* Z_Construct_UPackage__Script_DiscordRpc() + { + static UPackage* ReturnPackage = nullptr; + if (!ReturnPackage) + { + static UObject* (*const SingletonFuncArray[])() = { + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature, + (UObject* (*)())Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature, + }; + static const UE4CodeGen_Private::FPackageParams PackageParams = { + "/Script/DiscordRpc", + PKG_CompiledIn | 0x00000000, + 0x5CB914B6, + 0xE6515C92, + SingletonFuncArray, ARRAY_COUNT(SingletonFuncArray), + METADATA_PARAMS(nullptr, 0) + }; + UE4CodeGen_Private::ConstructUPackage(ReturnPackage, PackageParams); + } + return ReturnPackage; + } +PRAGMA_ENABLE_DEPRECATION_WARNINGS +#ifdef _MSC_VER +#pragma warning (pop) +#endif diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp new file mode 100644 index 0000000..21d1768 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.gen.cpp @@ -0,0 +1,828 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "GeneratedCppIncludes.h" +#include "Private/DiscordRpcPrivatePCH.h" +#include "Public/DiscordRpcBlueprint.h" +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable : 4883) +#endif +PRAGMA_DISABLE_DEPRECATION_WARNINGS +void EmptyLinkFunctionForGeneratedCodeDiscordRpcBlueprint() {} +// Cross Module References + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature(); + UPackage* Z_Construct_UPackage__Script_DiscordRpc(); + DISCORDRPC_API UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature(); + DISCORDRPC_API UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature(); + DISCORDRPC_API UEnum* Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes(); + DISCORDRPC_API UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence(); + DISCORDRPC_API UClass* Z_Construct_UClass_UDiscordRpc_NoRegister(); + DISCORDRPC_API UClass* Z_Construct_UClass_UDiscordRpc(); + COREUOBJECT_API UClass* Z_Construct_UClass_UObject(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_ClearPresence(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Initialize(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Respond(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_RunCallbacks(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_Shutdown(); + DISCORDRPC_API UFunction* Z_Construct_UFunction_UDiscordRpc_UpdatePresence(); +// End Cross Module References + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordJoinRequest_Parms + { + FDiscordUserData joinRequest; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinRequest_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_joinRequest = { UE4CodeGen_Private::EPropertyClass::Struct, "joinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000008000182, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordJoinRequest_Parms, joinRequest), Z_Construct_UScriptStruct_FDiscordUserData, METADATA_PARAMS(NewProp_joinRequest_MetaData, ARRAY_COUNT(NewProp_joinRequest_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinRequest, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordJoinRequest__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordJoinRequest_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordSpectate_Parms + { + FString spectateSecret; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_spectateSecret_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_spectateSecret = { UE4CodeGen_Private::EPropertyClass::Str, "spectateSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordSpectate_Parms, spectateSecret), METADATA_PARAMS(NewProp_spectateSecret_MetaData, ARRAY_COUNT(NewProp_spectateSecret_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_spectateSecret, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordSpectate__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordSpectate_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordJoin_Parms + { + FString joinSecret; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinSecret_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_joinSecret = { UE4CodeGen_Private::EPropertyClass::Str, "joinSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordJoin_Parms, joinSecret), METADATA_PARAMS(NewProp_joinSecret_MetaData, ARRAY_COUNT(NewProp_joinSecret_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinSecret, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordJoin__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordJoin_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordErrored_Parms + { + int32 errorCode; + FString errorMessage; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_errorMessage_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_errorMessage = { UE4CodeGen_Private::EPropertyClass::Str, "errorMessage", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordErrored_Parms, errorMessage), METADATA_PARAMS(NewProp_errorMessage_MetaData, ARRAY_COUNT(NewProp_errorMessage_MetaData)) }; + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_errorCode = { UE4CodeGen_Private::EPropertyClass::Int, "errorCode", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordErrored_Parms, errorCode), METADATA_PARAMS(nullptr, 0) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorMessage, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorCode, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordErrored__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordErrored_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordDisconnected_Parms + { + int32 errorCode; + FString errorMessage; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_errorMessage_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_errorMessage = { UE4CodeGen_Private::EPropertyClass::Str, "errorMessage", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordDisconnected_Parms, errorMessage), METADATA_PARAMS(NewProp_errorMessage_MetaData, ARRAY_COUNT(NewProp_errorMessage_MetaData)) }; + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_errorCode = { UE4CodeGen_Private::EPropertyClass::Int, "errorCode", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordDisconnected_Parms, errorCode), METADATA_PARAMS(nullptr, 0) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorMessage, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_errorCode, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordDisconnected__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordDisconnected_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature() + { + struct _Script_DiscordRpc_eventDiscordConnected_Parms + { + FDiscordUserData joinRequest; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinRequest_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_joinRequest = { UE4CodeGen_Private::EPropertyClass::Struct, "joinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000008000182, 1, nullptr, STRUCT_OFFSET(_Script_DiscordRpc_eventDiscordConnected_Parms, joinRequest), Z_Construct_UScriptStruct_FDiscordUserData, METADATA_PARAMS(NewProp_joinRequest_MetaData, ARRAY_COUNT(NewProp_joinRequest_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinRequest, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, "DiscordConnected__DelegateSignature", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x00130000, sizeof(_Script_DiscordRpc_eventDiscordConnected_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + static UEnum* EDiscordJoinResponseCodes_StaticEnum() + { + static UEnum* Singleton = nullptr; + if (!Singleton) + { + Singleton = GetStaticEnum(Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("EDiscordJoinResponseCodes")); + } + return Singleton; + } + static FCompiledInDeferEnum Z_CompiledInDeferEnum_UEnum_EDiscordJoinResponseCodes(EDiscordJoinResponseCodes_StaticEnum, TEXT("/Script/DiscordRpc"), TEXT("EDiscordJoinResponseCodes"), false, nullptr, nullptr); + uint32 Get_Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes_CRC() { return 2532223064U; } + UEnum* Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes() + { +#if WITH_HOT_RELOAD + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UEnum* ReturnEnum = FindExistingEnumIfHotReloadOrDynamic(Outer, TEXT("EDiscordJoinResponseCodes"), 0, Get_Z_Construct_UEnum_DiscordRpc_EDiscordJoinResponseCodes_CRC(), false); +#else + static UEnum* ReturnEnum = nullptr; +#endif // WITH_HOT_RELOAD + if (!ReturnEnum) + { + static const UE4CodeGen_Private::FEnumeratorParam Enumerators[] = { + { "EDiscordJoinResponseCodes::DISCORD_REPLY_NO", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_NO }, + { "EDiscordJoinResponseCodes::DISCORD_REPLY_YES", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_YES }, + { "EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE", (int64)EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE }, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Enum_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "DISCORD_REPLY_IGNORE.DisplayName", "Ignore" }, + { "DISCORD_REPLY_NO.DisplayName", "No" }, + { "DISCORD_REPLY_YES.DisplayName", "Yes" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Valid response codes for Respond function" }, + }; +#endif + static const UE4CodeGen_Private::FEnumParams EnumParams = { + (UObject*(*)())Z_Construct_UPackage__Script_DiscordRpc, + UE4CodeGen_Private::EDynamicType::NotDynamic, + "EDiscordJoinResponseCodes", + RF_Public|RF_Transient|RF_MarkAsNative, + nullptr, + (uint8)UEnum::ECppForm::EnumClass, + "EDiscordJoinResponseCodes", + Enumerators, + ARRAY_COUNT(Enumerators), + METADATA_PARAMS(Enum_MetaDataParams, ARRAY_COUNT(Enum_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUEnum(ReturnEnum, EnumParams); + } + return ReturnEnum; + } +class UScriptStruct* FDiscordRichPresence::StaticStruct() +{ + static class UScriptStruct* Singleton = NULL; + if (!Singleton) + { + extern DISCORDRPC_API uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(); + Singleton = GetStaticStruct(Z_Construct_UScriptStruct_FDiscordRichPresence, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("DiscordRichPresence"), sizeof(FDiscordRichPresence), Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC()); + } + return Singleton; +} +static FCompiledInDeferStruct Z_CompiledInDeferStruct_UScriptStruct_FDiscordRichPresence(FDiscordRichPresence::StaticStruct, TEXT("/Script/DiscordRpc"), TEXT("DiscordRichPresence"), false, nullptr, nullptr); +static struct FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence +{ + FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence() + { + UScriptStruct::DeferCppStructOps(FName(TEXT("DiscordRichPresence")),new UScriptStruct::TCppStructOps); + } +} ScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordRichPresence; + UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence() + { +#if WITH_HOT_RELOAD + extern uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(); + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UScriptStruct* ReturnStruct = FindExistingStructIfHotReloadOrDynamic(Outer, TEXT("DiscordRichPresence"), sizeof(FDiscordRichPresence), Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC(), false); +#else + static UScriptStruct* ReturnStruct = nullptr; +#endif + if (!ReturnStruct) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Struct_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Rich presence data" }, + }; +#endif + auto NewStructOpsLambda = []() -> void* { return (UScriptStruct::ICppStructOps*)new UScriptStruct::TCppStructOps(); }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_instance_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + auto NewProp_instance_SetBit = [](void* Obj){ ((FDiscordRichPresence*)Obj)->instance = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_instance = { UE4CodeGen_Private::EPropertyClass::Bool, "instance", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(FDiscordRichPresence), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(NewProp_instance_MetaData, ARRAY_COUNT(NewProp_instance_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_spectateSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_spectateSecret = { UE4CodeGen_Private::EPropertyClass::Str, "spectateSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, spectateSecret), METADATA_PARAMS(NewProp_spectateSecret_MetaData, ARRAY_COUNT(NewProp_spectateSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_joinSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_joinSecret = { UE4CodeGen_Private::EPropertyClass::Str, "joinSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, joinSecret), METADATA_PARAMS(NewProp_joinSecret_MetaData, ARRAY_COUNT(NewProp_joinSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_matchSecret_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_matchSecret = { UE4CodeGen_Private::EPropertyClass::Str, "matchSecret", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, matchSecret), METADATA_PARAMS(NewProp_matchSecret_MetaData, ARRAY_COUNT(NewProp_matchSecret_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partyMax_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_partyMax = { UE4CodeGen_Private::EPropertyClass::Int, "partyMax", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partyMax), METADATA_PARAMS(NewProp_partyMax_MetaData, ARRAY_COUNT(NewProp_partyMax_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partySize_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_partySize = { UE4CodeGen_Private::EPropertyClass::Int, "partySize", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partySize), METADATA_PARAMS(NewProp_partySize_MetaData, ARRAY_COUNT(NewProp_partySize_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_partyId_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_partyId = { UE4CodeGen_Private::EPropertyClass::Str, "partyId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, partyId), METADATA_PARAMS(NewProp_partyId_MetaData, ARRAY_COUNT(NewProp_partyId_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_smallImageText_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_smallImageText = { UE4CodeGen_Private::EPropertyClass::Str, "smallImageText", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, smallImageText), METADATA_PARAMS(NewProp_smallImageText_MetaData, ARRAY_COUNT(NewProp_smallImageText_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_smallImageKey_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_smallImageKey = { UE4CodeGen_Private::EPropertyClass::Str, "smallImageKey", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, smallImageKey), METADATA_PARAMS(NewProp_smallImageKey_MetaData, ARRAY_COUNT(NewProp_smallImageKey_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_largeImageText_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_largeImageText = { UE4CodeGen_Private::EPropertyClass::Str, "largeImageText", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, largeImageText), METADATA_PARAMS(NewProp_largeImageText_MetaData, ARRAY_COUNT(NewProp_largeImageText_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_largeImageKey_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_largeImageKey = { UE4CodeGen_Private::EPropertyClass::Str, "largeImageKey", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, largeImageKey), METADATA_PARAMS(NewProp_largeImageKey_MetaData, ARRAY_COUNT(NewProp_largeImageKey_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_endTimestamp_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_endTimestamp = { UE4CodeGen_Private::EPropertyClass::Int, "endTimestamp", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, endTimestamp), METADATA_PARAMS(NewProp_endTimestamp_MetaData, ARRAY_COUNT(NewProp_endTimestamp_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_startTimestamp_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "todo, timestamps are 64bit, does that even matter?" }, + }; +#endif + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_startTimestamp = { UE4CodeGen_Private::EPropertyClass::Int, "startTimestamp", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, startTimestamp), METADATA_PARAMS(NewProp_startTimestamp_MetaData, ARRAY_COUNT(NewProp_startTimestamp_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_details_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_details = { UE4CodeGen_Private::EPropertyClass::Str, "details", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, details), METADATA_PARAMS(NewProp_details_MetaData, ARRAY_COUNT(NewProp_details_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_state_MetaData[] = { + { "Category", "DiscordRichPresence" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_state = { UE4CodeGen_Private::EPropertyClass::Str, "state", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(FDiscordRichPresence, state), METADATA_PARAMS(NewProp_state_MetaData, ARRAY_COUNT(NewProp_state_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_instance, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_spectateSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_joinSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_matchSecret, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partyMax, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partySize, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_partyId, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_smallImageText, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_smallImageKey, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_largeImageText, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_largeImageKey, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_endTimestamp, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_startTimestamp, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_details, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_state, + }; + static const UE4CodeGen_Private::FStructParams ReturnStructParams = { + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + nullptr, + &UE4CodeGen_Private::TNewCppStructOpsWrapper::NewCppStructOps, + "DiscordRichPresence", + RF_Public|RF_Transient|RF_MarkAsNative, + EStructFlags(0x00000001), + sizeof(FDiscordRichPresence), + alignof(FDiscordRichPresence), + PropPointers, ARRAY_COUNT(PropPointers), + METADATA_PARAMS(Struct_MetaDataParams, ARRAY_COUNT(Struct_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUScriptStruct(ReturnStruct, ReturnStructParams); + } + return ReturnStruct; + } + uint32 Get_Z_Construct_UScriptStruct_FDiscordRichPresence_CRC() { return 1613447826U; } +class UScriptStruct* FDiscordUserData::StaticStruct() +{ + static class UScriptStruct* Singleton = NULL; + if (!Singleton) + { + extern DISCORDRPC_API uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(); + Singleton = GetStaticStruct(Z_Construct_UScriptStruct_FDiscordUserData, Z_Construct_UPackage__Script_DiscordRpc(), TEXT("DiscordUserData"), sizeof(FDiscordUserData), Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC()); + } + return Singleton; +} +static FCompiledInDeferStruct Z_CompiledInDeferStruct_UScriptStruct_FDiscordUserData(FDiscordUserData::StaticStruct, TEXT("/Script/DiscordRpc"), TEXT("DiscordUserData"), false, nullptr, nullptr); +static struct FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData +{ + FScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData() + { + UScriptStruct::DeferCppStructOps(FName(TEXT("DiscordUserData")),new UScriptStruct::TCppStructOps); + } +} ScriptStruct_DiscordRpc_StaticRegisterNativesFDiscordUserData; + UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData() + { +#if WITH_HOT_RELOAD + extern uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(); + UPackage* Outer = Z_Construct_UPackage__Script_DiscordRpc(); + static UScriptStruct* ReturnStruct = FindExistingStructIfHotReloadOrDynamic(Outer, TEXT("DiscordUserData"), sizeof(FDiscordUserData), Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC(), false); +#else + static UScriptStruct* ReturnStruct = nullptr; +#endif + if (!ReturnStruct) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Struct_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + { "ToolTip", "Ask to join callback data" }, + }; +#endif + auto NewStructOpsLambda = []() -> void* { return (UScriptStruct::ICppStructOps*)new UScriptStruct::TCppStructOps(); }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_avatar_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_avatar = { UE4CodeGen_Private::EPropertyClass::Str, "avatar", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, avatar), METADATA_PARAMS(NewProp_avatar_MetaData, ARRAY_COUNT(NewProp_avatar_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_discriminator_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_discriminator = { UE4CodeGen_Private::EPropertyClass::Str, "discriminator", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, discriminator), METADATA_PARAMS(NewProp_discriminator_MetaData, ARRAY_COUNT(NewProp_discriminator_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_username_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_username = { UE4CodeGen_Private::EPropertyClass::Str, "username", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, username), METADATA_PARAMS(NewProp_username_MetaData, ARRAY_COUNT(NewProp_username_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_userId_MetaData[] = { + { "Category", "DiscordUserData" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_userId = { UE4CodeGen_Private::EPropertyClass::Str, "userId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, STRUCT_OFFSET(FDiscordUserData, userId), METADATA_PARAMS(NewProp_userId_MetaData, ARRAY_COUNT(NewProp_userId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_avatar, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_discriminator, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_username, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_userId, + }; + static const UE4CodeGen_Private::FStructParams ReturnStructParams = { + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + nullptr, + &UE4CodeGen_Private::TNewCppStructOpsWrapper::NewCppStructOps, + "DiscordUserData", + RF_Public|RF_Transient|RF_MarkAsNative, + EStructFlags(0x00000001), + sizeof(FDiscordUserData), + alignof(FDiscordUserData), + PropPointers, ARRAY_COUNT(PropPointers), + METADATA_PARAMS(Struct_MetaDataParams, ARRAY_COUNT(Struct_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUScriptStruct(ReturnStruct, ReturnStructParams); + } + return ReturnStruct; + } + uint32 Get_Z_Construct_UScriptStruct_FDiscordUserData_CRC() { return 636588304U; } + void UDiscordRpc::StaticRegisterNativesUDiscordRpc() + { + UClass* Class = UDiscordRpc::StaticClass(); + static const FNameNativePtrPair Funcs[] = { + { "ClearPresence", &UDiscordRpc::execClearPresence }, + { "Initialize", &UDiscordRpc::execInitialize }, + { "Respond", &UDiscordRpc::execRespond }, + { "RunCallbacks", &UDiscordRpc::execRunCallbacks }, + { "Shutdown", &UDiscordRpc::execShutdown }, + { "UpdatePresence", &UDiscordRpc::execUpdatePresence }, + }; + FNativeFunctionRegistrar::RegisterFunctions(Class, Funcs, ARRAY_COUNT(Funcs)); + } + UFunction* Z_Construct_UFunction_UDiscordRpc_ClearPresence() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Clear presence" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "ClearPresence", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Initialize() + { + struct DiscordRpc_eventInitialize_Parms + { + FString applicationId; + bool autoRegister; + FString optionalSteamId; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_optionalSteamId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_optionalSteamId = { UE4CodeGen_Private::EPropertyClass::Str, "optionalSteamId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventInitialize_Parms, optionalSteamId), METADATA_PARAMS(NewProp_optionalSteamId_MetaData, ARRAY_COUNT(NewProp_optionalSteamId_MetaData)) }; + auto NewProp_autoRegister_SetBit = [](void* Obj){ ((DiscordRpc_eventInitialize_Parms*)Obj)->autoRegister = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_autoRegister = { UE4CodeGen_Private::EPropertyClass::Bool, "autoRegister", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(DiscordRpc_eventInitialize_Parms), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(nullptr, 0) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_applicationId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_applicationId = { UE4CodeGen_Private::EPropertyClass::Str, "applicationId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventInitialize_Parms, applicationId), METADATA_PARAMS(NewProp_applicationId_MetaData, ARRAY_COUNT(NewProp_applicationId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_optionalSteamId, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_autoRegister, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_applicationId, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Initialize connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Initialize", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, sizeof(DiscordRpc_eventInitialize_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Respond() + { + struct DiscordRpc_eventRespond_Parms + { + FString userId; + int32 reply; + }; + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { + static const UE4CodeGen_Private::FUnsizedIntPropertyParams NewProp_reply = { UE4CodeGen_Private::EPropertyClass::Int, "reply", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventRespond_Parms, reply), METADATA_PARAMS(nullptr, 0) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_userId_MetaData[] = { + { "NativeConst", "" }, + }; +#endif + static const UE4CodeGen_Private::FStrPropertyParams NewProp_userId = { UE4CodeGen_Private::EPropertyClass::Str, "userId", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000080, 1, nullptr, STRUCT_OFFSET(DiscordRpc_eventRespond_Parms, userId), METADATA_PARAMS(NewProp_userId_MetaData, ARRAY_COUNT(NewProp_userId_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_reply, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_userId, + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Respond to join request" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Respond", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, sizeof(DiscordRpc_eventRespond_Parms), PropPointers, ARRAY_COUNT(PropPointers), 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_RunCallbacks() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Check for callbacks" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "RunCallbacks", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_Shutdown() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Shut down connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "Shutdown", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UFunction* Z_Construct_UFunction_UDiscordRpc_UpdatePresence() + { + static UFunction* ReturnFunction = nullptr; + if (!ReturnFunction) + { +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Function_MetaDataParams[] = { + { "Category", "Discord" }, + { "DisplayName", "Send presence" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FFunctionParams FuncParams = { (UObject*(*)())Z_Construct_UClass_UDiscordRpc, "UpdatePresence", RF_Public|RF_Transient|RF_MarkAsNative, nullptr, (EFunctionFlags)0x04020401, 0, nullptr, 0, 0, 0, METADATA_PARAMS(Function_MetaDataParams, ARRAY_COUNT(Function_MetaDataParams)) }; + UE4CodeGen_Private::ConstructUFunction(ReturnFunction, FuncParams); + } + return ReturnFunction; + } + UClass* Z_Construct_UClass_UDiscordRpc_NoRegister() + { + return UDiscordRpc::StaticClass(); + } + UClass* Z_Construct_UClass_UDiscordRpc() + { + static UClass* OuterClass = nullptr; + if (!OuterClass) + { + static UObject* (*const DependentSingletons[])() = { + (UObject* (*)())Z_Construct_UClass_UObject, + (UObject* (*)())Z_Construct_UPackage__Script_DiscordRpc, + }; + static const FClassFunctionLinkInfo FuncInfo[] = { + { &Z_Construct_UFunction_UDiscordRpc_ClearPresence, "ClearPresence" }, // 510145216 + { &Z_Construct_UFunction_UDiscordRpc_Initialize, "Initialize" }, // 1572649349 + { &Z_Construct_UFunction_UDiscordRpc_Respond, "Respond" }, // 4089312034 + { &Z_Construct_UFunction_UDiscordRpc_RunCallbacks, "RunCallbacks" }, // 2574395339 + { &Z_Construct_UFunction_UDiscordRpc_Shutdown, "Shutdown" }, // 2738986725 + { &Z_Construct_UFunction_UDiscordRpc_UpdatePresence, "UpdatePresence" }, // 2597121176 + }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam Class_MetaDataParams[] = { + { "BlueprintType", "true" }, + { "Category", "Discord" }, + { "DisplayName", "Discord RPC" }, + { "IncludePath", "DiscordRpcBlueprint.h" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_RichPresence_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "Rich presence info" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FStructPropertyParams NewProp_RichPresence = { UE4CodeGen_Private::EPropertyClass::Struct, "RichPresence", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000004, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, RichPresence), Z_Construct_UScriptStruct_FDiscordRichPresence, METADATA_PARAMS(NewProp_RichPresence_MetaData, ARRAY_COUNT(NewProp_RichPresence_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnJoinRequest_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord another user sends a join request" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnJoinRequest = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnJoinRequest", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnJoinRequest), Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoinRequest__DelegateSignature, METADATA_PARAMS(NewProp_OnJoinRequest_MetaData, ARRAY_COUNT(NewProp_OnJoinRequest_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnSpectate_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord user presses spectate" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnSpectate = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnSpectate", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnSpectate), Z_Construct_UDelegateFunction_DiscordRpc_DiscordSpectate__DelegateSignature, METADATA_PARAMS(NewProp_OnSpectate_MetaData, ARRAY_COUNT(NewProp_OnSpectate_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnJoin_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "When Discord user presses join" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnJoin = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnJoin", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnJoin), Z_Construct_UDelegateFunction_DiscordRpc_DiscordJoin__DelegateSignature, METADATA_PARAMS(NewProp_OnJoin_MetaData, ARRAY_COUNT(NewProp_OnJoin_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnErrored_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On error message" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnErrored = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnErrored", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnErrored), Z_Construct_UDelegateFunction_DiscordRpc_DiscordErrored__DelegateSignature, METADATA_PARAMS(NewProp_OnErrored_MetaData, ARRAY_COUNT(NewProp_OnErrored_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnDisconnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On disconnection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnDisconnected = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnDisconnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnDisconnected), Z_Construct_UDelegateFunction_DiscordRpc_DiscordDisconnected__DelegateSignature, METADATA_PARAMS(NewProp_OnDisconnected_MetaData, ARRAY_COUNT(NewProp_OnDisconnected_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_OnConnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "On connection" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + static const UE4CodeGen_Private::FMulticastDelegatePropertyParams NewProp_OnConnected = { UE4CodeGen_Private::EPropertyClass::MulticastDelegate, "OnConnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000010080000, 1, nullptr, STRUCT_OFFSET(UDiscordRpc, OnConnected), Z_Construct_UDelegateFunction_DiscordRpc_DiscordConnected__DelegateSignature, METADATA_PARAMS(NewProp_OnConnected_MetaData, ARRAY_COUNT(NewProp_OnConnected_MetaData)) }; +#if WITH_METADATA + static const UE4CodeGen_Private::FMetaDataPairParam NewProp_IsConnected_MetaData[] = { + { "Category", "Discord" }, + { "DisplayName", "Is Discord connected" }, + { "Keywords", "Discord rpc" }, + { "ModuleRelativePath", "Public/DiscordRpcBlueprint.h" }, + }; +#endif + auto NewProp_IsConnected_SetBit = [](void* Obj){ ((UDiscordRpc*)Obj)->IsConnected = 1; }; + static const UE4CodeGen_Private::FBoolPropertyParams NewProp_IsConnected = { UE4CodeGen_Private::EPropertyClass::Bool, "IsConnected", RF_Public|RF_Transient|RF_MarkAsNative, 0x0010000000000014, 1, nullptr, sizeof(bool), UE4CodeGen_Private::ENativeBool::Native, sizeof(UDiscordRpc), &UE4CodeGen_Private::TBoolSetBitWrapper::SetBit, METADATA_PARAMS(NewProp_IsConnected_MetaData, ARRAY_COUNT(NewProp_IsConnected_MetaData)) }; + static const UE4CodeGen_Private::FPropertyParamsBase* const PropPointers[] = { + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_RichPresence, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnJoinRequest, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnSpectate, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnJoin, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnErrored, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnDisconnected, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_OnConnected, + (const UE4CodeGen_Private::FPropertyParamsBase*)&NewProp_IsConnected, + }; + static const FCppClassTypeInfoStatic StaticCppClassTypeInfo = { + TCppClassTypeTraits::IsAbstract, + }; + static const UE4CodeGen_Private::FClassParams ClassParams = { + &UDiscordRpc::StaticClass, + DependentSingletons, ARRAY_COUNT(DependentSingletons), + 0x00900080u, + FuncInfo, ARRAY_COUNT(FuncInfo), + PropPointers, ARRAY_COUNT(PropPointers), + nullptr, + &StaticCppClassTypeInfo, + nullptr, 0, + METADATA_PARAMS(Class_MetaDataParams, ARRAY_COUNT(Class_MetaDataParams)) + }; + UE4CodeGen_Private::ConstructUClass(OuterClass, ClassParams); + } + return OuterClass; + } + IMPLEMENT_CLASS(UDiscordRpc, 1261885565); + static FCompiledInDefer Z_CompiledInDefer_UClass_UDiscordRpc(Z_Construct_UClass_UDiscordRpc, &UDiscordRpc::StaticClass, TEXT("/Script/DiscordRpc"), TEXT("UDiscordRpc"), false, nullptr, nullptr, nullptr); + DEFINE_VTABLE_PTR_HELPER_CTOR(UDiscordRpc); +PRAGMA_ENABLE_DEPRECATION_WARNINGS +#ifdef _MSC_VER +#pragma warning (pop) +#endif diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h new file mode 100644 index 0000000..c8c91ad --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcBlueprint.generated.h @@ -0,0 +1,299 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#include "ObjectMacros.h" +#include "ScriptMacros.h" + +PRAGMA_DISABLE_DEPRECATION_WARNINGS +struct FDiscordUserData; +#ifdef DISCORDRPC_DiscordRpcBlueprint_generated_h +#error "DiscordRpcBlueprint.generated.h already included, missing '#pragma once' in DiscordRpcBlueprint.h" +#endif +#define DISCORDRPC_DiscordRpcBlueprint_generated_h + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_54_GENERATED_BODY \ + friend DISCORDRPC_API class UScriptStruct* Z_Construct_UScriptStruct_FDiscordRichPresence(); \ + DISCORDRPC_API static class UScriptStruct* StaticStruct(); + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_15_GENERATED_BODY \ + friend DISCORDRPC_API class UScriptStruct* Z_Construct_UScriptStruct_FDiscordUserData(); \ + DISCORDRPC_API static class UScriptStruct* StaticStruct(); + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_45_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordJoinRequest_Parms \ +{ \ + FDiscordUserData joinRequest; \ +}; \ +static inline void FDiscordJoinRequest_DelegateWrapper(const FMulticastScriptDelegate& DiscordJoinRequest, FDiscordUserData const& joinRequest) \ +{ \ + _Script_DiscordRpc_eventDiscordJoinRequest_Parms Parms; \ + Parms.joinRequest=joinRequest; \ + DiscordJoinRequest.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_44_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordSpectate_Parms \ +{ \ + FString spectateSecret; \ +}; \ +static inline void FDiscordSpectate_DelegateWrapper(const FMulticastScriptDelegate& DiscordSpectate, const FString& spectateSecret) \ +{ \ + _Script_DiscordRpc_eventDiscordSpectate_Parms Parms; \ + Parms.spectateSecret=spectateSecret; \ + DiscordSpectate.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_43_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordJoin_Parms \ +{ \ + FString joinSecret; \ +}; \ +static inline void FDiscordJoin_DelegateWrapper(const FMulticastScriptDelegate& DiscordJoin, const FString& joinSecret) \ +{ \ + _Script_DiscordRpc_eventDiscordJoin_Parms Parms; \ + Parms.joinSecret=joinSecret; \ + DiscordJoin.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_42_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordErrored_Parms \ +{ \ + int32 errorCode; \ + FString errorMessage; \ +}; \ +static inline void FDiscordErrored_DelegateWrapper(const FMulticastScriptDelegate& DiscordErrored, int32 errorCode, const FString& errorMessage) \ +{ \ + _Script_DiscordRpc_eventDiscordErrored_Parms Parms; \ + Parms.errorCode=errorCode; \ + Parms.errorMessage=errorMessage; \ + DiscordErrored.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_41_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordDisconnected_Parms \ +{ \ + int32 errorCode; \ + FString errorMessage; \ +}; \ +static inline void FDiscordDisconnected_DelegateWrapper(const FMulticastScriptDelegate& DiscordDisconnected, int32 errorCode, const FString& errorMessage) \ +{ \ + _Script_DiscordRpc_eventDiscordDisconnected_Parms Parms; \ + Parms.errorCode=errorCode; \ + Parms.errorMessage=errorMessage; \ + DiscordDisconnected.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_40_DELEGATE \ +struct _Script_DiscordRpc_eventDiscordConnected_Parms \ +{ \ + FDiscordUserData joinRequest; \ +}; \ +static inline void FDiscordConnected_DelegateWrapper(const FMulticastScriptDelegate& DiscordConnected, FDiscordUserData const& joinRequest) \ +{ \ + _Script_DiscordRpc_eventDiscordConnected_Parms Parms; \ + Parms.joinRequest=joinRequest; \ + DiscordConnected.ProcessMulticastDelegate(&Parms); \ +} + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS \ + \ + DECLARE_FUNCTION(execRespond) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_userId); \ + P_GET_PROPERTY(UIntProperty,Z_Param_reply); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Respond(Z_Param_userId,Z_Param_reply); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execClearPresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->ClearPresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execUpdatePresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->UpdatePresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execRunCallbacks) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->RunCallbacks(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execShutdown) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Shutdown(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execInitialize) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_applicationId); \ + P_GET_UBOOL(Z_Param_autoRegister); \ + P_GET_PROPERTY(UStrProperty,Z_Param_optionalSteamId); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Initialize(Z_Param_applicationId,Z_Param_autoRegister,Z_Param_optionalSteamId); \ + P_NATIVE_END; \ + } + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS_NO_PURE_DECLS \ + \ + DECLARE_FUNCTION(execRespond) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_userId); \ + P_GET_PROPERTY(UIntProperty,Z_Param_reply); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Respond(Z_Param_userId,Z_Param_reply); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execClearPresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->ClearPresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execUpdatePresence) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->UpdatePresence(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execRunCallbacks) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->RunCallbacks(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execShutdown) \ + { \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Shutdown(); \ + P_NATIVE_END; \ + } \ + \ + DECLARE_FUNCTION(execInitialize) \ + { \ + P_GET_PROPERTY(UStrProperty,Z_Param_applicationId); \ + P_GET_UBOOL(Z_Param_autoRegister); \ + P_GET_PROPERTY(UStrProperty,Z_Param_optionalSteamId); \ + P_FINISH; \ + P_NATIVE_BEGIN; \ + P_THIS->Initialize(Z_Param_applicationId,Z_Param_autoRegister,Z_Param_optionalSteamId); \ + P_NATIVE_END; \ + } + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS_NO_PURE_DECLS \ +private: \ + static void StaticRegisterNativesUDiscordRpc(); \ + friend DISCORDRPC_API class UClass* Z_Construct_UClass_UDiscordRpc(); \ +public: \ + DECLARE_CLASS(UDiscordRpc, UObject, COMPILED_IN_FLAGS(0), 0, TEXT("/Script/DiscordRpc"), NO_API) \ + DECLARE_SERIALIZER(UDiscordRpc) \ + enum {IsIntrinsic=COMPILED_IN_INTRINSIC}; + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS \ +private: \ + static void StaticRegisterNativesUDiscordRpc(); \ + friend DISCORDRPC_API class UClass* Z_Construct_UClass_UDiscordRpc(); \ +public: \ + DECLARE_CLASS(UDiscordRpc, UObject, COMPILED_IN_FLAGS(0), 0, TEXT("/Script/DiscordRpc"), NO_API) \ + DECLARE_SERIALIZER(UDiscordRpc) \ + enum {IsIntrinsic=COMPILED_IN_INTRINSIC}; + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_STANDARD_CONSTRUCTORS \ + /** Standard constructor, called after all reflected properties have been initialized */ \ + NO_API UDiscordRpc(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ + DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UDiscordRpc) \ + DECLARE_VTABLE_PTR_HELPER_CTOR(NO_API, UDiscordRpc); \ +DEFINE_VTABLE_PTR_HELPER_CTOR_CALLER(UDiscordRpc); \ +private: \ + /** Private move- and copy-constructors, should never be used */ \ + NO_API UDiscordRpc(UDiscordRpc&&); \ + NO_API UDiscordRpc(const UDiscordRpc&); \ +public: + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_ENHANCED_CONSTRUCTORS \ + /** Standard constructor, called after all reflected properties have been initialized */ \ + NO_API UDiscordRpc(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ +private: \ + /** Private move- and copy-constructors, should never be used */ \ + NO_API UDiscordRpc(UDiscordRpc&&); \ + NO_API UDiscordRpc(const UDiscordRpc&); \ +public: \ + DECLARE_VTABLE_PTR_HELPER_CTOR(NO_API, UDiscordRpc); \ +DEFINE_VTABLE_PTR_HELPER_CTOR_CALLER(UDiscordRpc); \ + DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UDiscordRpc) + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_92_PROLOG +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_GENERATED_BODY_LEGACY \ +PRAGMA_DISABLE_DEPRECATION_WARNINGS \ +public: \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_STANDARD_CONSTRUCTORS \ +public: \ +PRAGMA_ENABLE_DEPRECATION_WARNINGS + + +#define MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_GENERATED_BODY \ +PRAGMA_DISABLE_DEPRECATION_WARNINGS \ +public: \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_PRIVATE_PROPERTY_OFFSET \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_RPC_WRAPPERS_NO_PURE_DECLS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_INCLASS_NO_PURE_DECLS \ + MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h_94_ENHANCED_CONSTRUCTORS \ +private: \ +PRAGMA_ENABLE_DEPRECATION_WARNINGS + + +#undef CURRENT_FILE_ID +#define CURRENT_FILE_ID MediocreMapper_Plugins_discordrpc_Source_DiscordRpc_Public_DiscordRpcBlueprint_h + + +#define FOREACH_ENUM_EDISCORDJOINRESPONSECODES(op) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_NO) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_YES) \ + op(EDiscordJoinResponseCodes::DISCORD_REPLY_IGNORE) +PRAGMA_ENABLE_DEPRECATION_WARNINGS diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcClasses.h b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcClasses.h new file mode 100644 index 0000000..8dee57e --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/DiscordRpcClasses.h @@ -0,0 +1,10 @@ +// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. +/*=========================================================================== + Generated code exported from UnrealHeaderTool. + DO NOT modify this manually! Edit the corresponding .h files instead! +===========================================================================*/ + +#pragma once + + + diff --git a/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/Timestamp b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/Timestamp new file mode 100644 index 0000000..b196b52 --- /dev/null +++ b/Plugins/discordrpc/Intermediate/Build/Win64/UE4Editor/Inc/DiscordRpc/Timestamp @@ -0,0 +1 @@ +E:\Documents\Unreal Projects\MediocreMapper\Plugins\discordrpc\Source\DiscordRpc\Public\DiscordRpcBlueprint.h \ No newline at end of file diff --git a/Plugins/discordrpc/Resources/Icon128.png b/Plugins/discordrpc/Resources/Icon128.png new file mode 100644 index 0000000..8b7f8e1 Binary files /dev/null and b/Plugins/discordrpc/Resources/Icon128.png differ diff --git a/Plugins/discordrpc/Resources/discord.png b/Plugins/discordrpc/Resources/discord.png new file mode 100644 index 0000000..8b7f8e1 Binary files /dev/null and b/Plugins/discordrpc/Resources/discord.png differ diff --git a/Plugins/discordrpc/Source/DiscordRpc/DiscordRpc.Build.cs b/Plugins/discordrpc/Source/DiscordRpc/DiscordRpc.Build.cs new file mode 100644 index 0000000..3678f98 --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/DiscordRpc.Build.cs @@ -0,0 +1,57 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.IO; + +public class DiscordRpc : ModuleRules +{ +#if WITH_FORWARDED_MODULE_RULES_CTOR + public DiscordRpc(ReadOnlyTargetRules Target) : base(Target) +#else + public DiscordRpc(TargetInfo Target) +#endif + { + Definitions.Add("DISCORD_DYNAMIC_LIB=1"); + + PublicIncludePaths.AddRange( + new string[] { + "DiscordRpc/Public" + } + ); + + PrivateIncludePaths.AddRange( + new string[] { + "DiscordRpc/Private" + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "DiscordRpcLibrary" + } + ); + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "Slate", + "SlateCore", + "Projects" + } + ); + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + + string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..", "Source", "ThirdParty", "DiscordRpcLibrary")); + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + } +} \ No newline at end of file diff --git a/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpc.cpp b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpc.cpp new file mode 100644 index 0000000..d539dab --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpc.cpp @@ -0,0 +1,76 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "DiscordRpcPrivatePCH.h" +#include "IPluginManager.h" +#include "ModuleManager.h" + +#define LOCTEXT_NAMESPACE "FDiscordRpcModule" + +void FDiscordRpcModule::StartupModule() +{ +#if !PLATFORM_LINUX +#if defined(DISCORD_DYNAMIC_LIB) + // Get the base directory of this plugin + FString BaseDir = IPluginManager::Get().FindPlugin("DiscordRpc")->GetBaseDir(); + const FString SDKDir = + FPaths::Combine(*BaseDir, TEXT("Source"), TEXT("ThirdParty"), TEXT("DiscordRpcLibrary")); +#if PLATFORM_WINDOWS + const FString LibName = TEXT("discord-rpc"); + const FString LibDir = FPaths::Combine(*SDKDir, TEXT("Win64")); + if (!LoadDependency(LibDir, LibName, DiscordRpcLibraryHandle)) { + FMessageDialog::Open( + EAppMsgType::Ok, + LOCTEXT(LOCTEXT_NAMESPACE, + "Failed to load DiscordRpc plugin. Plug-in will not be functional.")); + FreeDependency(DiscordRpcLibraryHandle); + } +#elif PLATFORM_MAC + const FString LibName = TEXT("libdiscord-rpc"); + const FString LibDir = FPaths::Combine(*SDKDir, TEXT("Mac")); + if (!LoadDependency(LibDir, LibName, DiscordRpcLibraryHandle)) { + FMessageDialog::Open( + EAppMsgType::Ok, + LOCTEXT(LOCTEXT_NAMESPACE, + "Failed to load DiscordRpc plugin. Plug-in will not be functional.")); + FreeDependency(DiscordRpcLibraryHandle); + } +#endif +#endif +#endif +} + +void FDiscordRpcModule::ShutdownModule() +{ + // Free the dll handle +#if !PLATFORM_LINUX +#if defined(DISCORD_DYNAMIC_LIB) + FreeDependency(DiscordRpcLibraryHandle); +#endif +#endif +} + +bool FDiscordRpcModule::LoadDependency(const FString& Dir, const FString& Name, void*& Handle) +{ + FString Lib = Name + TEXT(".") + FPlatformProcess::GetModuleExtension(); + FString Path = Dir.IsEmpty() ? *Lib : FPaths::Combine(*Dir, *Lib); + + Handle = FPlatformProcess::GetDllHandle(*Path); + + if (Handle == nullptr) { + return false; + } + + return true; +} + +void FDiscordRpcModule::FreeDependency(void*& Handle) +{ + if (Handle != nullptr) { + FPlatformProcess::FreeDllHandle(Handle); + Handle = nullptr; + } +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FDiscordRpcModule, DiscordRpc) \ No newline at end of file diff --git a/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp new file mode 100644 index 0000000..95388df --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp @@ -0,0 +1,171 @@ +#include "DiscordRpcPrivatePCH.h" +#include "DiscordRpcBlueprint.h" +#include "discord_rpc.h" + +DEFINE_LOG_CATEGORY(Discord) + +static UDiscordRpc* self = nullptr; + +static void ReadyHandler(const DiscordUser* connectedUser) +{ + FDiscordUserData ud; + ud.userId = ANSI_TO_TCHAR(connectedUser->userId); + ud.username = ANSI_TO_TCHAR(connectedUser->username); + ud.discriminator = ANSI_TO_TCHAR(connectedUser->discriminator); + ud.avatar = ANSI_TO_TCHAR(connectedUser->avatar); + UE_LOG(Discord, + Log, + TEXT("Discord connected to %s - %s#%s"), + *ud.userId, + *ud.username, + *ud.discriminator); + if (self) { + self->IsConnected = true; + self->OnConnected.Broadcast(ud); + } +} + +static void DisconnectHandler(int errorCode, const char* message) +{ + auto msg = FString(message); + UE_LOG(Discord, Log, TEXT("Discord disconnected (%d): %s"), errorCode, *msg); + if (self) { + self->IsConnected = false; + self->OnDisconnected.Broadcast(errorCode, msg); + } +} + +static void ErroredHandler(int errorCode, const char* message) +{ + auto msg = FString(message); + UE_LOG(Discord, Log, TEXT("Discord error (%d): %s"), errorCode, *msg); + if (self) { + self->OnErrored.Broadcast(errorCode, msg); + } +} + +static void JoinGameHandler(const char* joinSecret) +{ + auto secret = FString(joinSecret); + UE_LOG(Discord, Log, TEXT("Discord join %s"), *secret); + if (self) { + self->OnJoin.Broadcast(secret); + } +} + +static void SpectateGameHandler(const char* spectateSecret) +{ + auto secret = FString(spectateSecret); + UE_LOG(Discord, Log, TEXT("Discord spectate %s"), *secret); + if (self) { + self->OnSpectate.Broadcast(secret); + } +} + +static void JoinRequestHandler(const DiscordUser* request) +{ + FDiscordUserData ud; + ud.userId = ANSI_TO_TCHAR(request->userId); + ud.username = ANSI_TO_TCHAR(request->username); + ud.discriminator = ANSI_TO_TCHAR(request->discriminator); + ud.avatar = ANSI_TO_TCHAR(request->avatar); + UE_LOG(Discord, + Log, + TEXT("Discord join request from %s - %s#%s"), + *ud.userId, + *ud.username, + *ud.discriminator); + if (self) { + self->OnJoinRequest.Broadcast(ud); + } +} + +void UDiscordRpc::Initialize(const FString& applicationId, + bool autoRegister, + const FString& optionalSteamId) +{ + self = this; + IsConnected = false; + DiscordEventHandlers handlers{}; + handlers.ready = ReadyHandler; + handlers.disconnected = DisconnectHandler; + handlers.errored = ErroredHandler; + if (OnJoin.IsBound()) { + handlers.joinGame = JoinGameHandler; + } + if (OnSpectate.IsBound()) { + handlers.spectateGame = SpectateGameHandler; + } + if (OnJoinRequest.IsBound()) { + handlers.joinRequest = JoinRequestHandler; + } + auto appId = StringCast(*applicationId); + auto steamId = StringCast(*optionalSteamId); + Discord_Initialize( + (const char*)appId.Get(), &handlers, autoRegister, (const char*)steamId.Get()); +} + +void UDiscordRpc::Shutdown() +{ + Discord_Shutdown(); + self = nullptr; +} + +void UDiscordRpc::RunCallbacks() +{ + Discord_RunCallbacks(); +} + +void UDiscordRpc::UpdatePresence() +{ + DiscordRichPresence rp{}; + + auto state = StringCast(*RichPresence.state); + rp.state = state.Get(); + + auto details = StringCast(*RichPresence.details); + rp.details = details.Get(); + + auto largeImageKey = StringCast(*RichPresence.largeImageKey); + rp.largeImageKey = largeImageKey.Get(); + + auto largeImageText = StringCast(*RichPresence.largeImageText); + rp.largeImageText = largeImageText.Get(); + + auto smallImageKey = StringCast(*RichPresence.smallImageKey); + rp.smallImageKey = smallImageKey.Get(); + + auto smallImageText = StringCast(*RichPresence.smallImageText); + rp.smallImageText = smallImageText.Get(); + + auto partyId = StringCast(*RichPresence.partyId); + rp.partyId = partyId.Get(); + + auto matchSecret = StringCast(*RichPresence.matchSecret); + rp.matchSecret = matchSecret.Get(); + + auto joinSecret = StringCast(*RichPresence.joinSecret); + rp.joinSecret = joinSecret.Get(); + + auto spectateSecret = StringCast(*RichPresence.spectateSecret); + rp.spectateSecret = spectateSecret.Get(); + rp.startTimestamp = RichPresence.startTimestamp; + rp.endTimestamp = RichPresence.endTimestamp; + rp.partySize = RichPresence.partySize; + rp.partyMax = RichPresence.partyMax; + rp.instance = RichPresence.instance; + + Discord_UpdatePresence(&rp); +} + +void UDiscordRpc::ClearPresence() +{ + Discord_ClearPresence(); +} + +void UDiscordRpc::Respond(const FString& userId, int reply) +{ + UE_LOG(Discord, Log, TEXT("Responding %d to join request from %s"), reply, *userId); + FTCHARToUTF8 utf8_userid(*userId); + Discord_Respond(utf8_userid.Get(), reply); +} diff --git a/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h new file mode 100644 index 0000000..1166801 --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h @@ -0,0 +1,2 @@ +#include "Core.h" +#include "DiscordRpc.h" \ No newline at end of file diff --git a/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpc.h b/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpc.h new file mode 100644 index 0000000..727833b --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpc.h @@ -0,0 +1,20 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "ModuleManager.h" + +class FDiscordRpcModule : public IModuleInterface { +public: + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; + +private: + /** Handle to the test dll we will load */ + void* DiscordRpcLibraryHandle; + + /** StartupModule is covered with defines, these functions are the place to put breakpoints */ + static bool LoadDependency(const FString& Dir, const FString& Name, void*& Handle); + static void FreeDependency(void*& Handle); +}; \ No newline at end of file diff --git a/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h b/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h new file mode 100644 index 0000000..17e2f9b --- /dev/null +++ b/Plugins/discordrpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h @@ -0,0 +1,169 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Engine.h" +#include "DiscordRpcBlueprint.generated.h" + +// unreal's header tool hates clang-format +// clang-format off + +/** +* Ask to join callback data +*/ +USTRUCT(BlueprintType) +struct FDiscordUserData { + GENERATED_USTRUCT_BODY() + + UPROPERTY(BlueprintReadOnly) + FString userId; + UPROPERTY(BlueprintReadOnly) + FString username; + UPROPERTY(BlueprintReadOnly) + FString discriminator; + UPROPERTY(BlueprintReadOnly) + FString avatar; +}; + +/** +* Valid response codes for Respond function +*/ +UENUM(BlueprintType) +enum class EDiscordJoinResponseCodes : uint8 +{ + DISCORD_REPLY_NO UMETA(DisplayName="No"), + DISCORD_REPLY_YES UMETA(DisplayName="Yes"), + DISCORD_REPLY_IGNORE UMETA(DisplayName="Ignore") +}; + +DECLARE_LOG_CATEGORY_EXTERN(Discord, Log, All); + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordConnected, const FDiscordUserData&, joinRequest); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDiscordDisconnected, int, errorCode, const FString&, errorMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDiscordErrored, int, errorCode, const FString&, errorMessage); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordJoin, const FString&, joinSecret); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordSpectate, const FString&, spectateSecret); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordJoinRequest, const FDiscordUserData&, joinRequest); + +// clang-format on + +/** + * Rich presence data + */ +USTRUCT(BlueprintType) +struct FDiscordRichPresence { + GENERATED_USTRUCT_BODY() + + UPROPERTY(BlueprintReadWrite) + FString state; + UPROPERTY(BlueprintReadWrite) + FString details; + // todo, timestamps are 64bit, does that even matter? + UPROPERTY(BlueprintReadWrite) + int startTimestamp; + UPROPERTY(BlueprintReadWrite) + int endTimestamp; + UPROPERTY(BlueprintReadWrite) + FString largeImageKey; + UPROPERTY(BlueprintReadWrite) + FString largeImageText; + UPROPERTY(BlueprintReadWrite) + FString smallImageKey; + UPROPERTY(BlueprintReadWrite) + FString smallImageText; + UPROPERTY(BlueprintReadWrite) + FString partyId; + UPROPERTY(BlueprintReadWrite) + int partySize; + UPROPERTY(BlueprintReadWrite) + int partyMax; + UPROPERTY(BlueprintReadWrite) + FString matchSecret; + UPROPERTY(BlueprintReadWrite) + FString joinSecret; + UPROPERTY(BlueprintReadWrite) + FString spectateSecret; + UPROPERTY(BlueprintReadWrite) + bool instance; +}; + +/** + * + */ +UCLASS(BlueprintType, meta = (DisplayName = "Discord RPC"), Category = "Discord") +class DISCORDRPC_API UDiscordRpc : public UObject { + GENERATED_BODY() + +public: + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Initialize connection", Keywords = "Discord rpc"), + Category = "Discord") + void Initialize(const FString& applicationId, + bool autoRegister, + const FString& optionalSteamId); + + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Shut down connection", Keywords = "Discord rpc"), + Category = "Discord") + void Shutdown(); + + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Check for callbacks", Keywords = "Discord rpc"), + Category = "Discord") + void RunCallbacks(); + + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Send presence", Keywords = "Discord rpc"), + Category = "Discord") + void UpdatePresence(); + + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Clear presence", Keywords = "Discord rpc"), + Category = "Discord") + void ClearPresence(); + + UFUNCTION(BlueprintCallable, + meta = (DisplayName = "Respond to join request", Keywords = "Discord rpc"), + Category = "Discord") + void Respond(const FString& userId, int reply); + + UPROPERTY(BlueprintReadOnly, + meta = (DisplayName = "Is Discord connected", Keywords = "Discord rpc"), + Category = "Discord") + bool IsConnected; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "On connection", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordConnected OnConnected; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "On disconnection", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordDisconnected OnDisconnected; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "On error message", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordErrored OnErrored; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "When Discord user presses join", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordJoin OnJoin; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "When Discord user presses spectate", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordSpectate OnSpectate; + + UPROPERTY(BlueprintAssignable, + meta = (DisplayName = "When Discord another user sends a join request", + Keywords = "Discord rpc"), + Category = "Discord") + FDiscordJoinRequest OnJoinRequest; + + UPROPERTY(BlueprintReadWrite, + meta = (DisplayName = "Rich presence info", Keywords = "Discord rpc"), + Category = "Discord") + FDiscordRichPresence RichPresence; +}; diff --git a/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs new file mode 100644 index 0000000..8591b15 --- /dev/null +++ b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs @@ -0,0 +1,59 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using System.IO; +using UnrealBuildTool; + +public class DiscordRpcLibrary : ModuleRules +{ +#if WITH_FORWARDED_MODULE_RULES_CTOR + public DiscordRpcLibrary(ReadOnlyTargetRules Target) : base(Target) +#else + public DiscordRpcLibrary(TargetInfo Target) +#endif + { + Type = ModuleType.External; + Definitions.Add("DISCORD_DYNAMIC_LIB=1"); + + string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..", "ThirdParty", "DiscordRpcLibrary")); + + if (Target.Platform == UnrealTargetPlatform.Win64) + { + string lib = Path.Combine(BaseDirectory, "Win64"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "discord-rpc.lib")); + + // Dynamic + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "discord-rpc.dll"))); + PublicDelayLoadDLLs.Add("discord-rpc.dll"); + } + else if (Target.Platform == UnrealTargetPlatform.Linux) + { + string lib = Path.Combine(BaseDirectory, "Linux", "x86_64-unknown-linux-gnu"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.so")); + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.so"))); + } + else if (Target.Platform == UnrealTargetPlatform.Mac) + { + string lib = Path.Combine(BaseDirectory, "Mac"); + + // Include headers + PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); + + // Add the import library + PublicLibraryPaths.Add(lib); + PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.dylib")); + RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.dylib"))); + } + } +} \ No newline at end of file diff --git a/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_register.h b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_register.h new file mode 100644 index 0000000..4c16b68 --- /dev/null +++ b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_register.h @@ -0,0 +1,26 @@ +#pragma once + +#if defined(DISCORD_DYNAMIC_LIB) +# if defined(_WIN32) +# if defined(DISCORD_BUILDING_SDK) +# define DISCORD_EXPORT __declspec(dllexport) +# else +# define DISCORD_EXPORT __declspec(dllimport) +# endif +# else +# define DISCORD_EXPORT __attribute__((visibility("default"))) +# endif +#else +# define DISCORD_EXPORT +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +DISCORD_EXPORT void Discord_Register(const char* applicationId, const char* command); +DISCORD_EXPORT void Discord_RegisterSteamGame(const char* applicationId, const char* steamId); + +#ifdef __cplusplus +} +#endif diff --git a/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h new file mode 100644 index 0000000..3e1441e --- /dev/null +++ b/Plugins/discordrpc/Source/ThirdParty/DiscordRpcLibrary/Include/discord_rpc.h @@ -0,0 +1,87 @@ +#pragma once +#include + +// clang-format off + +#if defined(DISCORD_DYNAMIC_LIB) +# if defined(_WIN32) +# if defined(DISCORD_BUILDING_SDK) +# define DISCORD_EXPORT __declspec(dllexport) +# else +# define DISCORD_EXPORT __declspec(dllimport) +# endif +# else +# define DISCORD_EXPORT __attribute__((visibility("default"))) +# endif +#else +# define DISCORD_EXPORT +#endif + +// clang-format on + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct DiscordRichPresence { + const char* state; /* max 128 bytes */ + const char* details; /* max 128 bytes */ + int64_t startTimestamp; + int64_t endTimestamp; + const char* largeImageKey; /* max 32 bytes */ + const char* largeImageText; /* max 128 bytes */ + const char* smallImageKey; /* max 32 bytes */ + const char* smallImageText; /* max 128 bytes */ + const char* partyId; /* max 128 bytes */ + int partySize; + int partyMax; + const char* matchSecret; /* max 128 bytes */ + const char* joinSecret; /* max 128 bytes */ + const char* spectateSecret; /* max 128 bytes */ + int8_t instance; +} DiscordRichPresence; + +typedef struct DiscordUser { + const char* userId; + const char* username; + const char* discriminator; + const char* avatar; +} DiscordUser; + +typedef struct DiscordEventHandlers { + void (*ready)(const DiscordUser* request); + void (*disconnected)(int errorCode, const char* message); + void (*errored)(int errorCode, const char* message); + void (*joinGame)(const char* joinSecret); + void (*spectateGame)(const char* spectateSecret); + void (*joinRequest)(const DiscordUser* request); +} DiscordEventHandlers; + +#define DISCORD_REPLY_NO 0 +#define DISCORD_REPLY_YES 1 +#define DISCORD_REPLY_IGNORE 2 + +DISCORD_EXPORT void Discord_Initialize(const char* applicationId, + DiscordEventHandlers* handlers, + int autoRegister, + const char* optionalSteamId); +DISCORD_EXPORT void Discord_Shutdown(void); + +/* checks for incoming messages, dispatches callbacks */ +DISCORD_EXPORT void Discord_RunCallbacks(void); + +/* If you disable the lib starting its own io thread, you'll need to call this from your own */ +#ifdef DISCORD_DISABLE_IO_THREAD +DISCORD_EXPORT void Discord_UpdateConnection(void); +#endif + +DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* presence); +DISCORD_EXPORT void Discord_ClearPresence(void); + +DISCORD_EXPORT void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply); + +DISCORD_EXPORT void Discord_UpdateHandlers(DiscordEventHandlers* handlers); + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/Plugins/eXiSoundVis/.gitattributes b/Plugins/eXiSoundVis/.gitattributes new file mode 100644 index 0000000..bdb0cab --- /dev/null +++ b/Plugins/eXiSoundVis/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/Plugins/eXiSoundVis/.gitignore b/Plugins/eXiSoundVis/.gitignore new file mode 100644 index 0000000..9c84d7f --- /dev/null +++ b/Plugins/eXiSoundVis/.gitignore @@ -0,0 +1,49 @@ +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +/Binaries +/Intermediate diff --git a/Plugins/eXiSoundVis/Readme.md b/Plugins/eXiSoundVis/Readme.md new file mode 100644 index 0000000..6821336 --- /dev/null +++ b/Plugins/eXiSoundVis/Readme.md @@ -0,0 +1,123 @@ +[![](http://imgur.com/DWGECXG.gif)](https://www.youtube.com/watch?v=N4eA68BEpak) +**Note:** The image above is an animated GIF, so there's some quality lost. Please see the [YouTube video](https://www.youtube.com/watch?v=N4eA68BEpak) for higher quality visualization of Disclosure's You and Me. + +This is an Unreal Engine 4 plugin that loads `.ogg` files at runtime and analyzes them to get the frequency spectrum to control gameplay, visualization and more. + + +Feature list and pictures of available nodes: +--------------------------------------------- + +* Load `.ogg` file from HDD +* Load sound names and file paths from HDD to display list of sound +* Get frequency spectrum of a loaded Sound +* Get specific frequency values by using the calculated frequency spectrum +* Start/Pause/Resume/Stop your Sound and Frequency Calculation through the build in Player + +![](http://puu.sh/opY1K/16c2b7b3c5.jpg) +![](http://puu.sh/opYtT/ed734b2396.png) +![](http://puu.sh/opYPr/e850f7baf0.jpg) +![](http://puu.sh/oq0nd/c72fb3d48e.jpg) + +Installation +------------- +Unzip the package into the Plugins directory of your game. +To add it as an engine plugin you will need to unzip the module into the plugin directory under where you installed UE4. + + +**1.** Download the ZIP File. + +**2.** Create a `Plugins` folder in your game or engine directory and extract the plugin into it. It should look something like this: + +![](http://puu.sh/oqMnc/f1f3292bc0.png) + +**3.** Open your project (and/or regenerate the Visual Studio files to have the plugin in your solution) and enable it in the plugin section: + +![](http://puu.sh/oqM0q/9a07b082eb.png) + +**4.** To use the Plugin, add the `SoundVisComponent` to the Actor of your choice, which comes with the plugin: + +![](http://puu.sh/oqMuE/10892c5bc2.png) + +**5.** Load a sound via its **ABSOLUTE** path (only `.ogg` files). The Component has a `Delegate | OnFileLoadCompleted`, which gets called and passes the complete `USoundWave` Reference, once the process is over (ASYNC)!: + +![](http://puu.sh/oqN7E/72273737df.jpg) + +**5.1** NEVER CLOSE THE PROJECT WHILE LOADING A SOUND! + +**6.** Use the Calculate Frequency Spectrum function after you loaded a sound to get an `Array of Frequency Values`, which represents the Frequencies from 0 to ~22000hz: + +![](http://puu.sh/oqNpa/8a3b11650c.jpg) + +**6.1** THIS ONLY WORKS WITH LOADED AND DECOMPRESSED .ogg FILES! + +**7.** Since this only analyzes one small segment of the Sound and we don't want ugly `Delay-Loops`, use these functions to Start/Pause/Resume/Stop the whole sound (will also play it!) + +![](http://puu.sh/opYPr/e850f7baf0.jpg) + +**7.1** The analyzed Frequency Spectrum will be returned via a second `Delegate | OnFrequencySpectrumCalculated`, which also comes with the Component. + +![](http://puu.sh/opYVk/aaf6479271.jpg) + +**8.** Now you can use the different frequency functions to get the values (for example if you want to get the values for bass, use 20 to 60 for SubBass and 60 to 250 for Bass. You can look up more on the internet. + +![](http://puu.sh/opYtT/ed734b2396.png) + +**11.** You can find all functions available by going to the SoundVis category. They are explained in the [`SoundVisComponent.h`](https://github.com/eXifreXi/eXiSoundVis/blob/4.11/Source/eXiSoundVis/Public/SoundVisComponent.h) if you don't know how to use them: + +![](http://puu.sh/oqNUm/317177f03d.png) + +When cooking, make sure to add the plugin to your projects dependencies! + +![](http://i.imgur.com/fh8VB1T.png) + + +Example project +--------------- + + +- 4.16 (No idea if properly commented or not and rather ugly, but maybe it helps!): http://www.cedric-neukirchen.net/Downloads/SoundVisDemo.7z + +License +------------- +By using this plugin you accept the CC-BY 4.0 license and + +The MIT License (MIT) + +Copyright (c) 2015 Cedric Neukirchen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Contact +------------- +If you have any Questions, Comments, Bug reports or feature requests for this plugin, +or you wish to contact me you can: + +email me - cedric.neukirchen@gmx.de + +contact me on the forum - Username: eXi + +contact me on the Discord Unreal-Slackers Server - Username: cedric_exi + + +Credits +-------------- +n00854180t - Helping a lot to get the loading of the .ogg file running + +moss - Helping to understand wave files diff --git a/Plugins/eXiSoundVis/Resources/Icon128.png b/Plugins/eXiSoundVis/Resources/Icon128.png new file mode 100644 index 0000000..2c16eb3 Binary files /dev/null and b/Plugins/eXiSoundVis/Resources/Icon128.png differ diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/AudioDecompressWorker.cpp b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/AudioDecompressWorker.cpp new file mode 100644 index 0000000..ee4590d --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/AudioDecompressWorker.cpp @@ -0,0 +1,128 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "eXiSoundVisPrivatePCH.h" + +#include "AudioDecompressWorker.h" +#include "SoundVisComponent.h" + +#include "AudioDevice.h" +#include "Developer/TargetPlatform/Public/Interfaces/IAudioFormat.h" + +FAudioDecompressWorker* FAudioDecompressWorker::Runnable = NULL; +int32 FAudioDecompressWorker::ThreadCounter = 0; + +FAudioDecompressWorker::FAudioDecompressWorker(class USoundWave* InSoundWaveRef) + : SoundWaveRef(InSoundWaveRef) + , AudioInfo(NULL) + , Thread(NULL) +{ + if (GEngine && GEngine->GetMainAudioDevice()) + { + AudioInfo = GEngine->GetMainAudioDevice()->CreateCompressedAudioInfo(SoundWaveRef); + } + + // Higher overall ThreadCounter to avoid duplicated names + FAudioDecompressWorker::ThreadCounter++; + + Thread = FRunnableThread::Create(this, *FString::Printf(TEXT("FAudioDecompressWorker%d"), FAudioDecompressWorker::ThreadCounter), 0, EThreadPriority::TPri_Normal); +} + +FAudioDecompressWorker::~FAudioDecompressWorker() +{ + delete Thread; + Thread = NULL; +} + +FAudioDecompressWorker* FAudioDecompressWorker::InitializeWorker(class USoundWave* InSoundWaveRef) +{ + Runnable = new FAudioDecompressWorker(InSoundWaveRef); + + return Runnable; +} + +void FAudioDecompressWorker::ShutdownWorker() +{ + if (Runnable) + { + Runnable->EnsureCompletion(); + delete Runnable; + Runnable = NULL; + } +} + +bool FAudioDecompressWorker::Init() +{ + // Make sure the Worker is marked is not finished + bIsFinished = false; + + return true; +} + +uint32 FAudioDecompressWorker::Run() +{ + if (!SoundWaveRef) + { + return 0; + } + + if (AudioInfo != NULL) + { + FSoundQualityInfo QualityInfo = { 0 }; + + // Parse the audio header for the relevant information + if (!(SoundWaveRef->ResourceData)) + { + return 0; + } + + if (AudioInfo->ReadCompressedInfo(SoundWaveRef->ResourceData, SoundWaveRef->ResourceSize, &QualityInfo)) + { + FScopeCycleCounterUObject WaveObject(SoundWaveRef); + + // Extract the data + SoundWaveRef->SampleRate = QualityInfo.SampleRate; + SoundWaveRef->NumChannels = QualityInfo.NumChannels; + + if (QualityInfo.Duration > 0.0f) + { + SoundWaveRef->Duration = QualityInfo.Duration; + } + + const uint32 PCMBufferSize = SoundWaveRef->Duration * SoundWaveRef->SampleRate * SoundWaveRef->NumChannels; + + SoundWaveRef->CachedRealtimeFirstBuffer = new uint8[PCMBufferSize * 2]; + + AudioInfo->SeekToTime(0.0f); + AudioInfo->ReadCompressedData(SoundWaveRef->CachedRealtimeFirstBuffer, false, PCMBufferSize * 2); + } + else if (SoundWaveRef->DecompressionType == DTYPE_RealTime || SoundWaveRef->DecompressionType == DTYPE_Native) + { + SoundWaveRef->RemoveAudioResource(); + } + + delete AudioInfo; + } + + return 0; +} + +void FAudioDecompressWorker::Stop() +{ + StopTaskCounter.Increment(); +} + +void FAudioDecompressWorker::Exit() +{ + // Make sure to mark Thread as finished + bIsFinished = true; +} + +void FAudioDecompressWorker::EnsureCompletion() +{ + Stop(); + + if (Thread != NULL) { + + Thread->WaitForCompletion(); + } +} diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/SoundVisComponent.cpp b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/SoundVisComponent.cpp new file mode 100644 index 0000000..2462a82 --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/SoundVisComponent.cpp @@ -0,0 +1,656 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "eXiSoundVisPrivatePCH.h" + +#include "SoundVisComponent.h" + +#include "Sound/SoundWave.h" +#include "AudioDevice.h" +#include "Runtime/Engine/Public/VorbisAudioInfo.h" +#include "Developer/TargetPlatform/Public/Interfaces/IAudioFormat.h" + +/// De-/Constructors + +USoundVisComponent::USoundVisComponent() +{ + AudioComponent = CreateDefaultSubobject(FName("AudioComponent")); + + PrimaryComponentTick.bCanEverTick = true; +} + +USoundVisComponent::~USoundVisComponent() +{ +} + +void USoundVisComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction * ThisTickFunction) +{ + UGameViewportClient* Viewport = GetWorld()->GetGameViewport(); + + if (bSoundPaused && bSoundPausedByBackgroundWindow) + { + if (Viewport->Viewport->IsForegroundWindow()) + { + PrintLog(TEXT("Window is in foreground. Resuming!")); + + BP_ResumeCalculatingFrequencySpectrum(); + + bSoundPausedByBackgroundWindow = false; + } + } +} + +/// Functions to load Data from the HardDrive + +void USoundVisComponent::LoadSoundFileFromHD(const FString& InFilePath) +{ + // Create new SoundWave Object + CompressedSoundWaveRef = NewObject(USoundWave::StaticClass()); + + // Make sure the SoundWave Object is Valid + if (!CompressedSoundWaveRef) { + + PrintError(TEXT("Failed to create new SoundWave Object!")); + return; + } + + // If true, the Sound was successfully loaded + bool bLoaded = false; + + // TArray that holds the binary and encoded Sound data + TArray RawFile; + + // Load file into RawFile Array + bLoaded = FFileHelper::LoadFileToArray(RawFile, InFilePath.GetCharArray().GetData()); + + if (bLoaded) + { + // Fill the SoundData into the SoundWave Object + if (RawFile.Num() > 0) { + + bLoaded = FillSoundWaveInfo(CompressedSoundWaveRef, &RawFile); + } + else { + + PrintError(TEXT("RawFile Array is empty! Seams like Sound couldn't be loaded correctly.")); + + bLoaded = false; + } + + // Get Pointer to the Compressed OGG Data + FByteBulkData* BulkData = &CompressedSoundWaveRef->CompressedFormatData.GetFormat(FName("OGG")); + + // Set the Lock of the BulkData to ReadWrite + BulkData->Lock(LOCK_READ_WRITE); + + // Copy compressed RawFile Data to the Address of the OGG Data of the SW File + FMemory::Memmove(BulkData->Realloc(RawFile.Num()), RawFile.GetData(), RawFile.Num()); + + // Unlock the BulkData again + BulkData->Unlock(); + } + + if (!bLoaded) { + + PrintError(TEXT("Something went wrong while loading the Sound Data!")); + return; + } + + // Fill the PCMSampleBuffer + GetPCMDataFromFile(CompressedSoundWaveRef); +} + +bool USoundVisComponent::FillSoundWaveInfo(USoundWave* InSoundWave, TArray* InRawFile) +{ + // Info Structs + FSoundQualityInfo SoundQualityInfo; + FVorbisAudioInfo VorbisAudioInfo; + + // Save the Info into SoundQualityInfo + if (!VorbisAudioInfo.ReadCompressedInfo(InRawFile->GetData(), InRawFile->Num(), &SoundQualityInfo)) + { + return false; + } + + // Fill in all the Data we have + InSoundWave->DecompressionType = EDecompressionType::DTYPE_RealTime; + InSoundWave->SoundGroup = ESoundGroup::SOUNDGROUP_Default; + InSoundWave->NumChannels = SoundQualityInfo.NumChannels; + InSoundWave->Duration = SoundQualityInfo.Duration; + InSoundWave->RawPCMDataSize = SoundQualityInfo.SampleDataSize; + InSoundWave->SampleRate = SoundQualityInfo.SampleRate; + + return true; +} + +/// Function to decompress the compressed Data that comes with the .ogg file + +void USoundVisComponent::GetPCMDataFromFile(USoundWave* InSoundWave) +{ + if (InSoundWave == nullptr) { + + PrintError(TEXT("Passed SoundWave pointer is a nullptr!")); + return; + } + + if (InSoundWave->NumChannels < 1 || InSoundWave->NumChannels > 2) { + + PrintError(TEXT("SoundWave Object has not the right amount of Channels. Plugin only supports 1 or 2!")); + return; + } + + if (GEngine) + { + // Get a Pointer to the Main Audio Device + FAudioDevice* AudioDevice = GEngine->GetMainAudioDevice(); + + if (AudioDevice) { + + InSoundWave->InitAudioResource(AudioDevice->GetRuntimeFormat(InSoundWave)); + + PrintLog(TEXT("Creating new DecompressWorker.")); + + // Creates a new DecompressWorker and starts it + InitNewDecompressTask(InSoundWave); + } + else { + + PrintError(TEXT("Couldn't get a valid Pointer to the Main AudioDevice!")); + return; + } + } +} + +void USoundVisComponent::CalculateFrequencySpectrum(USoundWave* InSoundWaveRef, const float InStartTime, const float InDuration, TArray& OutFrequencies) +{ + // Clear the Array before continuing + OutFrequencies.Empty(); + + const int32 NumChannels = InSoundWaveRef->NumChannels; + const int32 SampleRate = InSoundWaveRef->SampleRate; + + // Make sure the Number of Channels is correct + if (NumChannels > 0 && NumChannels <= 2) + { + // Check if we actually have a Buffer to work with + if (InSoundWaveRef->CachedRealtimeFirstBuffer) + { + // The first sample is just the StartTime * SampleRate + int32 FirstSample = SampleRate * InStartTime; + + // The last sample is the SampleRate times (StartTime plus the Duration) + int32 LastSample = SampleRate * (InStartTime + InDuration); + + // Get Maximum amount of samples in this Sound + const int32 SampleCount = InSoundWaveRef->RawPCMDataSize / (2 * NumChannels); + + // An early check if we can create a Sample window + FirstSample = FMath::Min(SampleCount, FirstSample); + LastSample = FMath::Min(SampleCount, LastSample); + + // Actual amount of samples we gonna read + int32 SamplesToRead = LastSample - FirstSample; + + if (SamplesToRead < 0) { + + PrintError(TEXT("Number of SamplesToRead is < 0!")); + return; + } + + // Shift the window enough so that we get a PowerOfTwo. FFT works better with that + int32 PoT = 2; + + while (SamplesToRead > PoT) { + PoT *= 2; + } + + // Now we have a good PowerOfTwo to work with + SamplesToRead = PoT; + + // Create two 2-dim Arrays for complex numbers | Buffer and Output + kiss_fft_cpx* Buffer[2] = { 0 }; + kiss_fft_cpx* Output[2] = { 0 }; + + // Create 1-dim Array with one slot for SamplesToRead + int32 Dims[1] = { SamplesToRead }; + + kiss_fftnd_cfg STF = kiss_fftnd_alloc(Dims, 1, 0, nullptr, nullptr); + + int16* SamplePtr = reinterpret_cast(InSoundWaveRef->CachedRealtimeFirstBuffer); + + // Allocate space in the Buffer and Output Arrays for all the data that FFT returns + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + Buffer[ChannelIndex] = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx) * SamplesToRead); + Output[ChannelIndex] = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx) * SamplesToRead); + } + + // Shift our SamplePointer to the Current "FirstSample" + SamplePtr += FirstSample * NumChannels; + + for (int32 SampleIndex = 0; SampleIndex < SamplesToRead; SampleIndex++) + { + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + // Make sure the Point is Valid and we don't go out of bounds + if (SamplePtr != NULL && (SampleIndex + FirstSample < SampleCount)) + { + // Use Window function to get a better result for the Data (Hann Window) + Buffer[ChannelIndex][SampleIndex].r = GetFFTInValue(*SamplePtr, SampleIndex, SamplesToRead); + Buffer[ChannelIndex][SampleIndex].i = 0.f; + } + else + { + // Use Window function to get a better result for the Data (Hann Window) + Buffer[ChannelIndex][SampleIndex].r = 0.f; + Buffer[ChannelIndex][SampleIndex].i = 0.f; + } + + // Take the next Sample + SamplePtr++; + } + } + + // Now that the Buffer is filled, use the FFT + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + if (Buffer[ChannelIndex]) + { + kiss_fftnd(STF, Buffer[ChannelIndex], Output[ChannelIndex]); + } + } + + OutFrequencies.AddZeroed(SamplesToRead); + + for (int32 SampleIndex = 0; SampleIndex < SamplesToRead; ++SampleIndex) + { + float ChannelSum = 0.0f; + + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + if (Output[ChannelIndex]) + { + // With this we get the actual Frequency value for the frequencies from 0hz to ~22000hz + ChannelSum += FMath::Sqrt(FMath::Square(Output[ChannelIndex][SampleIndex].r) + FMath::Square(Output[ChannelIndex][SampleIndex].i)); + } + } + + if (bNormalizeOutputToDb) + { + OutFrequencies[SampleIndex] = FMath::LogX(10, ChannelSum / NumChannels) * 10; + } + else + { + OutFrequencies[SampleIndex] = ChannelSum / NumChannels; + } + } + + // Make sure to free up the FFT stuff + KISS_FFT_FREE(STF); + + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + KISS_FFT_FREE(Buffer[ChannelIndex]); + KISS_FFT_FREE(Output[ChannelIndex]); + } + } + else { + PrintError(TEXT("InSoundVisData.PCMData is a nullptr!")); + } + } + else { + PrintError(TEXT("Number of Channels is < 0!")); + } +} + +float USoundVisComponent::GetFFTInValue(const int16 InSampleValue, const int16 InSampleIndex, const int16 InSampleCount) +{ + float FFTValue = InSampleValue; + + // Apply the Hann window + FFTValue *= 0.5f * (1 - FMath::Cos(2 * PI * InSampleIndex / (InSampleCount - 1))); + + return FFTValue; +} + +void USoundVisComponent::InitNewDecompressTask(USoundWave* InSoundWaveRef) +{ + // Do we already have a valid Runnable? If not, create a new one + if (FAudioDecompressWorker::Runnable == NULL) + { + // Start Timer that watches the DecompressWorker State + GetWorld()->GetTimerManager().ClearTimer(AudioDecompressTimer); + GetWorld()->GetTimerManager().SetTimer(AudioDecompressTimer, this, &USoundVisComponent::Notify_SoundDecompressed, 0.1f, true); + + // Init new Worker and pass the SoundWaveRef to decompress it + FAudioDecompressWorker::Runnable->InitializeWorker(InSoundWaveRef); + } + else if(FAudioDecompressWorker::Runnable->IsFinished()) + { + // The Worker is finished and still valid, shut it down! + FAudioDecompressWorker::ShutdownWorker(); + + // Start Timer that watches the DecompressWorker State + GetWorld()->GetTimerManager().ClearTimer(AudioDecompressTimer); + GetWorld()->GetTimerManager().SetTimer(AudioDecompressTimer, this, &USoundVisComponent::Notify_SoundDecompressed, 0.1f, true); + + // Init new Worker and pass the SoundWaveRef to decompress it + FAudioDecompressWorker::Runnable->InitializeWorker(InSoundWaveRef); + } + else { + PrintLog(TEXT("Worker not finished!")); + } +} + +void USoundVisComponent::Notify_SoundDecompressed() +{ + // If the Worker finished.. + if (FAudioDecompressWorker::Runnable->IsFinished()) + { + // ..clear the timer and.. + GetWorld()->GetTimerManager().ClearTimer(AudioDecompressTimer); + + //..broadcast the result to the Blueprint + OnFileLoadCompleted.Broadcast(FAudioDecompressWorker::Runnable->GetSoundWaveRef()); + + PrintLog(TEXT("Worker finished!")); + } + else { + PrintLog(TEXT("Worker is working!")); + } +} + +void USoundVisComponent::HandleFrequencySpectrumCalculation() +{ + // Reference to the Client Viewport + UGameViewportClient* Viewport = GetWorld()->GetGameViewport(); + + // If the Window is not in the foreground, make sure to pause everything, so it won't get async! + if (!Viewport->Viewport->IsForegroundWindow() && bPauseWhenWindowInBackground) + { + PrintLog(TEXT("Window is not in foreground. Pausing!")); + + BP_PauseCalculatingFrequencySpectrum(); + + bSoundPausedByBackgroundWindow = true; + } + + // Only proceed if we are not over the duration, or stopped/pause calculating + if (CurrentSoundData && GetWorld()->GetTimerManager().GetTimerElapsed(SoundPlayerTimer) <= CurrentSoundData->Duration && bSoundPlaying) + { + // Dummy Array to Store the Frequencies in + TArray OutFrequencies; + + // Let our Function Calculate the Frequency Spectrum + CalculateFrequencySpectrum(CurrentSoundData, GetWorld()->GetTimerManager().GetTimerElapsed(SoundPlayerTimer), CurrentSegmentLength, OutFrequencies); + + // Now that this is done, call the Delegate, so the Blueprint can work with it + OnFrequencySpectrumCalculated.Broadcast(OutFrequencies); + + // Start this function again after a short delay + FrequencySpectrumTimerDelegate.BindUFunction(this, FName("HandleFrequencySpectrumCalculation")); + GetWorld()->GetTimerManager().SetTimer(FrequencySpectrumTimer, FrequencySpectrumTimerDelegate, 0.01f, false); + } + else + { + GetWorld()->GetTimerManager().ClearTimer(FrequencySpectrumTimer); + } +} + + +/// Blueprint Versions of the File Data Functions + +void USoundVisComponent::BP_LoadSoundFileFromHD(const FString InFilePath) +{ + LoadSoundFileFromHD(InFilePath); +} + +void USoundVisComponent::BP_LoadAllSoundFileNamesFromHD(bool& bLoaded, const FString InDirectoryPath, const bool bInAbsolutePath, const FString InFileExtension, TArray& OutSoundFileNamesWithPath, TArray& OutSoundFileNamesWithoutPath) +{ + FString FinalPath = InDirectoryPath; + + if (!bInAbsolutePath) + { + FinalPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()) + InDirectoryPath; + } + + TArray DirectoriesToSkip; + + IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + FLocalTimestampDirectoryVisitor Visitor(PlatformFile, DirectoriesToSkip, DirectoriesToSkip, false); + PlatformFile.IterateDirectory(*FinalPath, Visitor); + + for (TMap::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt) + { + const FString FilePath = TimestampIt.Key(); + FString FileName = FPaths::GetCleanFilename(FilePath); + + bool bShouldAddFile = true; + + if (!InFileExtension.IsEmpty()) + { + if (!(FPaths::GetExtension(FileName, false).Equals(InFileExtension, ESearchCase::IgnoreCase))) + { + bShouldAddFile = false; + } + } + + if (bShouldAddFile) + { + OutSoundFileNamesWithPath.Add(FilePath); + + FileName.FString::Split(FString("."), &FileName, nullptr, ESearchCase::IgnoreCase); + + OutSoundFileNamesWithoutPath.Add(FileName); + } + } + + bLoaded = true; +} + +/// Blueprint Versions of the Analyze Functions + +void USoundVisComponent::BP_CalculateFrequencySpectrum(USoundWave* InSoundWaveRef, const float InStartTime, const float InDuration, TArray& OutFrequencies) +{ + CalculateFrequencySpectrum(InSoundWaveRef, InStartTime, InDuration, OutFrequencies); +} + +void USoundVisComponent::BP_StartCalculatingFrequencySpectrum(USoundWave* InSoundWaveRef, const float InSegmentLength) +{ + // When the Sound Ref is NULL, better not start analyzing + if (InSoundWaveRef == nullptr) { + + PrintError(TEXT("SoundWaveRef is a nullptr. Please load a Sound first!")); + return; + } + + // Make sure we are not already playing something + if (!bSoundPlaying) + { + // If we pause, make sure to stop the Player first + if (GetWorld()->GetTimerManager().IsTimerPaused(SoundPlayerTimer)) + { + BP_StopCalculatingFrequencySpectrum(); + } + + // Save the Current SoundVisData + CurrentSoundData = InSoundWaveRef; + + // And the Current SegmentLength + CurrentSegmentLength = InSegmentLength; + + // Set the Sound and Play it + AudioComponent->SetSound(InSoundWaveRef); + AudioComponent->Play(); + + // Mark Sound as playing + bSoundPlaying = true; + + // Start Timer that is way too long, so we can use it as some kind of AudioPlayer Timer + GetWorld()->GetTimerManager().SetTimer(SoundPlayerTimer, 99999.f, false); + + // Start the Calculation Loop + HandleFrequencySpectrumCalculation(); + } + else { + PrintWarning(TEXT("AudioComponent is already Playing. Please stop it first!")); + } +} + +void USoundVisComponent::BP_PauseCalculatingFrequencySpectrum() +{ + // We can only pause, if we are playing + if (bSoundPlaying && !bSoundPaused) + { + // Stop the Audio Component + AudioComponent->Stop(); + + // Mark sound as being paused + bSoundPaused = true; + + // Pause the timer + GetWorld()->GetTimerManager().PauseTimer(SoundPlayerTimer); + + // Start the tick, so we can check when the Player is back in the game + SetComponentTickEnabled(true); + } + else { + PrintWarning(TEXT("You can't pause something, that is not playing!")); + } +} + +void USoundVisComponent::BP_StopCalculatingFrequencySpectrum() +{ + // If we are playing the Sound, or it's paused, stop it + if (bSoundPlaying || bSoundPaused) + { + // Stop the AudioComponent + AudioComponent->Stop(); + + // Mark Sound as not playing or paused + bSoundPaused = false; + bSoundPlaying = false; + bSoundPausedByBackgroundWindow = false; + + // Clear the timer + GetWorld()->GetTimerManager().ClearTimer(SoundPlayerTimer); + + // Clear Current SoundVisData + CurrentSoundData = nullptr; + + // Clear CurrentSegmentLength + CurrentSegmentLength = 0.0f; + + // Stop the Tick Function + SetComponentTickEnabled(false); + } + else { + PrintWarning(TEXT("You can't stop something, that is not playing or paused!")); + } +} + +void USoundVisComponent::BP_ResumeCalculatingFrequencySpectrum() +{ + if (bSoundPlaying && bSoundPaused) + { + // Start the Sound at the Point where we left it + AudioComponent->Play(GetWorld()->GetTimerManager().GetTimerElapsed(SoundPlayerTimer)); + + // Mark sound as no longer paused + bSoundPaused = false; + + // UnPause the Timer again + GetWorld()->GetTimerManager().UnPauseTimer(SoundPlayerTimer); + + // And start the Calculation again + HandleFrequencySpectrumCalculation(); + + // Stop the Tick Function + SetComponentTickEnabled(false); + } + else { + PrintWarning(TEXT("AudioComponent is Playing or not paused!")); + } +} + +bool USoundVisComponent::IsPlayerPlaying() +{ + return (bSoundPlaying && !bSoundPaused); +} + +bool USoundVisComponent::IsPlayerPaused() +{ + UWorld* World = GetWorld(); + + if (World) + { + return (bSoundPlaying && bSoundPaused); + } + + return false; +} + +float USoundVisComponent::GetCurrentPlayBackTime() +{ + UWorld* World = GetWorld(); + + if (World) + { + return World->GetTimerManager().GetTimerElapsed(SoundPlayerTimer); + } + + return 0.0f; +} + +/// Frequency Data Functions + +void USoundVisComponent::BP_GetSpecificFrequencyValue(USoundWave* InSoundWave, TArray InFrequencies, int32 InWantedFrequency, float& OutFrequencyValue) +{ + if (InSoundWave && InFrequencies.Num() > 0 && (int32)(InWantedFrequency * InFrequencies.Num() * 2 / InSoundWave->SampleRate) < InFrequencies.Num()) + { + OutFrequencyValue = InFrequencies[(int32)(InWantedFrequency * InFrequencies.Num() * 2 / InSoundWave->SampleRate)]; + } +} + +void USoundVisComponent::BP_GetAverageSubBassValue(USoundWave* InSoundWave, TArray InFrequencies, float& OutAverageSubBass) +{ + BP_GetAverageFrequencyValueInRange(InSoundWave, InFrequencies, 20, 60, OutAverageSubBass); +} + +void USoundVisComponent::BP_GetAverageBassValue(USoundWave* InSoundWave, TArray InFrequencies, float& OutAverageBass) +{ + if (InSoundWave) + { + BP_GetAverageFrequencyValueInRange(InSoundWave, InFrequencies, 60, 250, OutAverageBass); + } +} + +void USoundVisComponent::BP_GetAverageFrequencyValueInRange(USoundWave* InSoundWave, TArray InFrequencies, int32 InStartFrequence, int32 InEndFrequence, float& OutAverageFrequency) +{ + // Init the Return Value + OutAverageFrequency = 0.0f; + + if (InSoundWave == nullptr) + return; + + if (InStartFrequence >= InEndFrequence || InStartFrequence < 0 || InEndFrequence > 22000) + return; + + int32 FStart = (int32)(InStartFrequence * InFrequencies.Num() * 2 / InSoundWave->SampleRate); + int32 FEnd = (int32)(InEndFrequence * InFrequencies.Num() * 2 / InSoundWave->SampleRate); + + if (FStart < 0 || FEnd >= InFrequencies.Num()) + return; + + int32 NumberOfFrequencies = 0; + + float ValueSum = 0.0f; + + for (int i = FStart; i <= FEnd; i++) + { + NumberOfFrequencies++; + + ValueSum += InFrequencies[i]; + } + + OutAverageFrequency = ValueSum / NumberOfFrequencies; +} \ No newline at end of file diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVis.cpp b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVis.cpp new file mode 100644 index 0000000..35f3725 --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVis.cpp @@ -0,0 +1,17 @@ +#include "eXiSoundVisPrivatePCH.h" + +// Log Category +DEFINE_LOG_CATEGORY(LogeXiSoundVis); + +void FeXiSoundVisModule::StartupModule() +{ + // This code will execute after your module is loaded into memory (but after global variables are initialized, of course.) +} + +void FeXiSoundVisModule::ShutdownModule() +{ + // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, + // we call this function before unloading the module. +} + +IMPLEMENT_MODULE(FeXiSoundVisModule, eXiSoundVis) \ No newline at end of file diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVisPrivatePCH.h b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVisPrivatePCH.h new file mode 100644 index 0000000..788893c --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Private/eXiSoundVisPrivatePCH.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Engine.h" +#include "eXiSoundVis.h" + +// KISS Headers, that we need for the decompression part +#include "ThirdParty/Kiss_FFT/kiss_fft129/kiss_fft.h" +#include "ThirdParty/Kiss_FFT/kiss_fft129/tools/kiss_fftnd.h" + +// Log Category +DECLARE_LOG_CATEGORY_EXTERN(LogeXiSoundVis, Log, All); + +// Short Defines to faster debug +#define PrintLog(TextToLog) if(bShowLogDebug) UE_LOG(LogeXiSoundVis, Log, TextToLog) +#define PrintWarning(TextToLog) if(bShowWarningDebug) UE_LOG(LogeXiSoundVis, Warning, TextToLog) +#define PrintError(TextToLog) if(bShowErrorDebug) UE_LOG(LogeXiSoundVis, Error, TextToLog) \ No newline at end of file diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/AudioDecompressWorker.h b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/AudioDecompressWorker.h new file mode 100644 index 0000000..bdd4b56 --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/AudioDecompressWorker.h @@ -0,0 +1,73 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "AudioDecompress.h" + +//#include "AudioDecompressWorker.generated.h" + +class FAudioDecompressWorker : public FRunnable +{ + /// VARIABLES /// + +public: + + // Singleton Instance, can access the Thread any time via static accessors + static FAudioDecompressWorker* Runnable; + + // Thread to run the worker FRunnable on + FRunnableThread* Thread; + +private: + + // Stop this thread? Uses Thread Safe Counter + FThreadSafeCounter StopTaskCounter; + + // Bool to check if the thread is running + bool bIsFinished; + + // Counter for the ThreadNames + static int32 ThreadCounter; + +protected: + + // Pointer to SoundWave Object we want to Decompress + class USoundWave* SoundWaveRef; + + // Some Compressed Audio Information + ICompressedAudioInfo* AudioInfo; + + /// FUNCTIONS /// + +public: + + // Constructor for my De-Compressor + FAudioDecompressWorker(class USoundWave* InSoundWaveRef); + ~FAudioDecompressWorker(); + + // Custom Init function + static FAudioDecompressWorker* InitializeWorker(class USoundWave* InSoundWaveRef); + + // Custom Shutdown function + static void ShutdownWorker(); + + // Start FRunnable Interface + virtual bool Init(); + virtual uint32 Run(); + virtual void Stop(); + virtual void Exit(); + // End FRunnable Interface + + // Make sure Thread completed + void EnsureCompletion(); + + /// GETTER / SETTER + + class USoundWave* GetSoundWaveRef() const { + return SoundWaveRef; + } + + bool IsFinished() const { + return bIsFinished; + } +}; \ No newline at end of file diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/SoundVisComponent.h b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/SoundVisComponent.h new file mode 100644 index 0000000..089ec7f --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/SoundVisComponent.h @@ -0,0 +1,305 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "Components/ActorComponent.h" + +#include "AudioDecompress.h" + +// Workers, to have an Async Decompress worker +#include "Runtime/Core/Public/Async/AsyncWork.h" + +#include "AudioDecompressWorker.h" + +#include "SoundVisComponent.generated.h" + +USTRUCT(BlueprintType, Blueprintable) +struct FSoundVisData +{ + GENERATED_USTRUCT_BODY() + + UPROPERTY(BlueprintReadOnly, Category = "eXiSoundVis | Sounds") + class USoundWave* SoundWaveRef; + + TSharedPtr PCMData; + + ~FSoundVisData() + { + SoundWaveRef = nullptr; + PCMData.Reset(); + } +}; + +// Delegate that passes FSoundVisData +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFileLoadCompleted, USoundWave*, SoundWaveRef); + +// Delegate used by the Worker +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWorkerFinished, USoundWave*, SoundWaveRef); + +// Delegate that passes FrequencyValues +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFrequencySpectrumCalculated, const TArray&, OutFrequencies); + +UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent), meta=(DisplayName = "SoundVisComponent") ) +class EXISOUNDVIS_API USoundVisComponent : public UActorComponent +{ + GENERATED_BODY() + + /// VARIABLES /// + +private: + + // Reference to the SoundWave we are decompressing + USoundWave* CompressedSoundWaveRef; + + /// Blueprint Exposed Variables + +public: + + // Audio Component to Play our Audio with + UPROPERTY(BlueprintReadOnly, Category = "SoundVis | Sound Player") + class UAudioComponent* AudioComponent; + + // TimerHandle for the SoundPlayer, that only exists to check how long a Sound is running + UPROPERTY(BlueprintReadOnly, Category = "SoundVis | Frequency Spectrum") + FTimerHandle SoundPlayerTimer; + + UPROPERTY(BlueprintReadOnly, Category = "SoundVis | Sound Player") + bool bSoundPlaying; + + UPROPERTY(BlueprintReadOnly, Category = "SoundVis | Sound Player") + bool bSoundPaused; + + UPROPERTY(BlueprintReadOnly, Category = "SoundVis | Sound Player") + bool bSoundPausedByBackgroundWindow = false; + + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "SoundVis | Sound Player") + bool bPauseWhenWindowInBackground = true; + + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "SoundVis | Sound Player") + bool bNormalizeOutputToDb = false; + + /// Delegates + + // Blueprint Delegate that gets Broadcasted when the File is loaded completely + UPROPERTY(BlueprintAssignable) + FFileLoadCompleted OnFileLoadCompleted; + + // Blueprint Delegate that gets Broadcasted each time the Frequency Spectrum is calculated + UPROPERTY(BlueprintAssignable) + FFrequencySpectrumCalculated OnFrequencySpectrumCalculated; + + /// Debug + + UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category = "SoundVis | Debugging") + bool bShowLogDebug; + + UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category = "SoundVis | Debugging") + bool bShowWarningDebug; + + UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category = "SoundVis | Debugging") + bool bShowErrorDebug; + +private: + + // The CurrentSoundData is only valid if the AudioPlayer is paused or running! + USoundWave* CurrentSoundData; + + // The CurrentSegmentLength is only valid if the AudioPlayer is pause or running + float CurrentSegmentLength; + + // Timer and Delegate for the DecompressWorker + FTimerHandle AudioDecompressTimer; + + // Timer and Delegate for the auto calculation of the spectrum + FTimerHandle FrequencySpectrumTimer; + FTimerDelegate FrequencySpectrumTimerDelegate; + + /// FUNCTIONS /// + +public: + + /// De-/Constructors + + // Sets default values for this component's properties + USoundVisComponent(); + + // Cleans up stuff + ~USoundVisComponent(); + + /// Overrides + + // Tick called each frame + virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + + /// Functions to load Data from the HardDrive + + // Function to load a sound file from the HD + void LoadSoundFileFromHD(const FString& InFilePath); + + // Function to fill in the RawFile sound data into the USoundWave object + bool FillSoundWaveInfo(class USoundWave* InSoundWave, TArray* InRawFile); + + /// Function to decompress the compressed Data that comes with the .ogg file + + void GetPCMDataFromFile(class USoundWave* InSoundWave); + + /// Function to calculate the frequency spectrum + + void CalculateFrequencySpectrum(USoundWave* InSoundWaveRef, const float InStartTime, const float InDuration, TArray& OutFrequencies); + + /// Helper Functions + + // Function used to get a better value for the FFT. Uses Hann Window + float GetFFTInValue(const int16 InSampleValue, const int16 InSampleIndex, const int16 InSampleCount); + + // Function to Start a new DecompressTask + void InitNewDecompressTask(USoundWave* InSoundWaveRef); + + // DEBUG Test function to check if Task can call stuff in here + void Notify_SoundDecompressed(); + + // Function that is looped to handle the calculation of the FrequencySpectrum + UFUNCTION() + void HandleFrequencySpectrumCalculation(); + + /// Blueprint Versions of the File Data Functions + + /** + * Will load a file (currently .ogg) from your Hard-Drive and save it in a USoundWave variable + * + * @param InFilePath Absolute path to the File. E.g.: "C:/Sounds/File.ogg" + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Load Sound File"), Category = "SoundVis | SoundFile") + void BP_LoadSoundFileFromHD(const FString InFilePath); + + /** + * Will get an Array of Names of the Found SoundFiles + * + * @param InDirectoryPath Path to the Directory in which the Files are (absolute/relative) + * @param bInAbsolutePath Tells if the DirectoryPath is absolute (C:/..) or relative to the GameDirectory + * @param InFileExtension This is the Extension the Function should look for. For the Plugin it should be .ogg + * @param OutSoundFileNamesWithPath The Array of found SoundFileNames (full Path/Name.Extension) + * @param OutSoundFileNamesWithoutPath The Array of found SoundFileNames (only Name.Extension) + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Load Sound File Names"), Category = "SoundVis | SoundFile") + void BP_LoadAllSoundFileNamesFromHD(bool& bLoaded, const FString InDirectoryPath, const bool bInAbsolutePath, const FString InFileExtension, TArray& OutSoundFileNamesWithPath, TArray& OutSoundFileNamesWithoutPath); + + /** + * Will call the CalculateFrequencySpectrum function from BP Side + * + * @param InSoundWave SoundWave that gets analyzed + * @param InStartTime The StartPoint of the TimeWindow we want to analyze + * @param InDuration The length of the TimeWindow we want to analyze + * @param OutFrequencies Array of float values for x Frequencies from 0 to 22000 + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Calculate Freq Spectrum"), Category = "SoundVis | Frequency Spectrum") + void BP_CalculateFrequencySpectrum(USoundWave* InSoundWaveRef, const float InStartTime, const float InDuration, TArray& OutFrequencies); + + /** + * Will play the passed USoundWave and also start calculating the FrequencySpectrum (loops over the InSegmentLength sized parts) + * + * @param InSoundWaveRef SoundWave that gets started and analyzed + * @param InSegmentLength Length of the SoundWave segment that should get analyzed + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Start Calculate Freq Spectrum"), Category = "SoundVis | Frequency Spectrum") + void BP_StartCalculatingFrequencySpectrum(USoundWave* InSoundWaveRef, const float InSegmentLength); + + /** + * If playing, pauses the current playing USoundWave and FrequencySpectrum calculation + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Pause Calculate Freq Spectrum"), Category = "SoundVis | Frequency Spectrum") + void BP_PauseCalculatingFrequencySpectrum(); + + /** + * If playing or paused, stops the current USoundWave and FrequencySpectrum calculation + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Stop Calculate Freq Spectrum"), Category = "SoundVis | Frequency Spectrum") + void BP_StopCalculatingFrequencySpectrum(); + + /** + * If paused, resumes the current USoundWave and FrequencySpectrum calculation + * + */ + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Resume Calculate Freq Spectrum"), Category = "SoundVis | Frequency Spectrum") + void BP_ResumeCalculatingFrequencySpectrum(); + + /// Sound Player Information + + /** + * Returns if the Player is currently playing or not + * + * @return True if playing + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Is Player Playing"), Category = "SoundVis | SoundPlayer") + bool IsPlayerPlaying(); + + /** + * Returns if the Player is currently paused or not + * + * @return True if paused + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Is Player Paused"), Category = "SoundVis | SoundPlayer") + bool IsPlayerPaused(); + + /** + * Return the current PlayBack Time of the Sound Player Timer + * + * @return Current PlayBack Time + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Get Current Playback Time"), Category = "SoundVis | SoundPlayer") + float GetCurrentPlayBackTime(); + + /// Frequency Data Functions + + /** + * This function will return the value of a specific frequency. It's needs a Frequency Array from the "BP_CalculateFrequencySpectrum" function and the matching SoundWave + * + * @param InSoundWave SoundWave to get specific data from (SampleRate) + * @param InFrequencies Array of float values for different frequencies from 0 to 22000. Can be get by using the "BP_CalculateFrequencySpectrum" function + * @param InWantedFrequency The Frequency of which you want the value of + * @param OutFrequencyValue Float value of the requested frequency + * + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Get Freq Value"), Category = "SoundVis | Frequency Values") + static void BP_GetSpecificFrequencyValue(USoundWave* InSoundWave, TArray InFrequencies, int32 InWantedFrequency, float& OutFrequencyValue); + + /** + * This function will return the average value for SubBass (20 to 60hz) + * + * @param InSoundWave SoundWave to get specific data from (SampleRate) + * @param InFrequencies Array of float values for different frequencies from 0 to 22000. Can be get by using the "BP_CalculateFrequencySpectrum" function + * @param OutAverageSubBass Average value of the frequencies from 20 to 60 + * + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Get Average Subbass Value"), Category = "SoundVis | Frequency Values") + static void BP_GetAverageSubBassValue(USoundWave* InSoundWave, TArray InFrequencies, float& OutAverageSubBass); + + /** + * This function will return the average value for Bass (60 to 250hz) + * + * @param InSoundWave SoundWave to get specific data from (SampleRate) + * @param InFrequencies Array of float values for different frequencies from 0 to 22000. Can be get by using the "BP_CalculateFrequencySpectrum" function + * @param OutAverageBass Average value of the frequencies from 60 to 250 + * + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Get Average Bass Value"), Category = "SoundVis | Frequency Values") + static void BP_GetAverageBassValue(USoundWave* InSoundWave, TArray InFrequencies, float& OutAverageBass); + + /** + * This function will return the average value for a given frequency interval e.g.: 20 to 60 (SubBass) + * + * @param InSoundWave SoundWave to get specific data from (SampleRate) + * @param InFrequencies Array of float values for different frequencies from 0 to 22000. Can be get by using the "BP_CalculateFrequencySpectrum" function + * @param InStartFrequency Start Frequency of the Frequency interval + * @param InEndFrequency End Frequency of the Frequency interval + * @param OutAverageFrequency Average value of the requested frequency interval + * + */ + UFUNCTION(BlueprintPure, meta = (DisplayName = "Get Average Freq Value In Range"), Category = "SoundVis | Frequency Values") + static void BP_GetAverageFrequencyValueInRange(USoundWave* InSoundWave, TArray InFrequencies, int32 InStartFrequence, int32 InEndFrequence, float& OutAverageFrequency); +}; diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/eXiSoundVis.h b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/eXiSoundVis.h new file mode 100644 index 0000000..ae84116 --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/Public/eXiSoundVis.h @@ -0,0 +1,12 @@ +#pragma once + +#include "ModuleManager.h" + +class FeXiSoundVisModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; \ No newline at end of file diff --git a/Plugins/eXiSoundVis/Source/eXiSoundVis/eXiSoundVis.Build.cs b/Plugins/eXiSoundVis/Source/eXiSoundVis/eXiSoundVis.Build.cs new file mode 100644 index 0000000..1e85bda --- /dev/null +++ b/Plugins/eXiSoundVis/Source/eXiSoundVis/eXiSoundVis.Build.cs @@ -0,0 +1,17 @@ +using UnrealBuildTool; +using System.IO; + +public class eXiSoundVis : ModuleRules +{ + public eXiSoundVis(ReadOnlyTargetRules Target) : base(Target) + { + PrivateIncludePaths.AddRange(new string[] { "eXiSoundVis/Private" }); + PublicIncludePaths.AddRange(new string[] { "eXiSoundVis/Public" }); + + PublicDependencyModuleNames.AddRange(new string[] { "Engine", "Core", "CoreUObject", "InputCore", "RHI", "Kiss_FFT" }); + + //PublicAdditionalLibraries.Add("legacy_stdio_definitions.lib"); + + PublicDependencyModuleNames.Add("Kiss_FFT"); + } +} \ No newline at end of file diff --git a/Plugins/eXiSoundVis/eXiSoundVis.uplugin b/Plugins/eXiSoundVis/eXiSoundVis.uplugin new file mode 100644 index 0000000..8339740 --- /dev/null +++ b/Plugins/eXiSoundVis/eXiSoundVis.uplugin @@ -0,0 +1,18 @@ +{ + "FileVersion": 3, + "FriendlyName": "eXi's Sound Visualization Plugin", + "Version": 1, + "VersionName": "1.0", + "Description": "This plugin allows you to load .ogg files dynamically from the user's hard drive and then anaylize it. Analyzing it, will return a frequency spectrum for the given Samples. The spectrum can then be used in your project to control all kinds of things.", + "Category": "eXi.Sound", + "CreatedBy": "Cedric 'eXi' Neukirchen", + + "Modules": + [ + { + "Name" : "eXiSoundVis", + "Type" : "Runtime", + "LoadingPhase" : "PreDefault" + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..b03a866 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Fork of a fork of a 3D beatsaber song editor +![alt text](https://i.imgur.com/zimA0I6.png) +This is a fork of [EditSaberEnhanced by permissionBRICK](https://github.com/permissionBRICK/EditSaberEnhanced) which is a fork of [EditSaber by Ikeiwa](https://github.com/Ikeiwa/EditSaber). Previously assisting with EditSaberEnhanced, I made this mediocre thing as a set of feature additions on EditSaberEnanced. + +## Features not included from EditSaberEnhanced + * Preview event on \[V] + * Drag select with \[N]/\[L] + * Option to disabled ghost event block + +## Big changes and stuff that doesn't really fit too well with the below stuff. In otherwords, things I wanted to be at the top. + * Editor supports ChromaToggle. A mod by Skykiwi, which offers up to 5 colors to be used in a map. [Discord Link for further details](https://discord.gg/xwrWzfj) + * Settings are now persistent and are saved between editor closing/new map loading. + * Variable BPM support with 3 decimals of accuracy. This is not compatible with the the "ModdedEditSaber" Variable BPM Editor. + * Vision block detector now built into editor. If vision block exceeds 5% of the map, the editor will begin complaining. + * Editor will complain upon placement of 2-wide center walls, or 3 wide walls. + * Audio is no longer muted on window focus lost + * Discord Rich Presence support. + +## Map Selection Menu Changes + * Songs from in-game-downloader are now filtered out. + * Map selection screen now offers configuration for autosaves + * Favorites added to Map Selection screen. Favorite maps are indicated by a cat and are automatically put at the top. Newly created songs are automatically favorited. + * Guide by Awfulnaut now linked on the map selection page for starting mappers. + * Reset song folder button now changed to clear settings. + * One Saber Mode option now present in menu. + * Note jump speed now editable from menu. + * Map copying to other difficulties. + +## Editing Menu Changes + * Song and Note volume sliders on menu + * New lighting panel on the right side \[Still uses tab to open] + * Old lighting panel replaced with Error Checker \[Open with shift+tab] + * Statistics panel added and opened from Error Checker + * Timestamp added in top right, showing position in song. + * Progress Timer in bottom right, showing approximate total time spent on song. + +## Error Checker +Min Time and Max Time specifies time of effect from a note. + * Double Same direction checker (Intended for streams) + * Time to look for a double same direction hit after each hit. + * Vision Block Detector + * Time vision blocks are detected after an eye-height level block. + + +## Hotkey additions and control changes + * WASD for lighting controls + * Alt + WASD to edit hovered events + * Alt + scrollwheel to change hovered laser speeds + * Ctrl + Z for undo (undoes anything) + * Walls are now placed with two left clicks + * Shift + scroll for direction changes removed + * shift + middle click to quick delete + * Delete deletes all selected blocks + * Arrow keys can move events + * Notes now take priority over walls when deleting + * Ctrl + click to select large sections + * Middle mouse swaps red/blue for events + * Ctrl + F to swap between normal, negative width and negative length walls + +## ChromaToggle Controls + * 1 - Red + * 2 - Blue + * Q - Magenta + * E - Green + * R - Grey + +## Statistics Panel + Offers the following data about your map, with defining tooltips and value suggestions + * Note Count + * Notes Per Second + * Bomb Count + * Wall Count + * Lighting Count + * Red/Blue Ratio + * Vision Block Percentage + * Aggressive Vision Block Percentage + * % usage of each row. + + and uhhh some other stuff I probably forgot. I can't wait to make 50 commits to the repo just to update this h\*cking readme. + +## Future plans +Overhaul box select. +Metronome +Hitsounds only on one color +Bad pattern detection +Timing Track +Lightmap Integration +Bookmarks for collaborations \ No newline at end of file diff --git a/Source/MediocreMapper.Target.cs b/Source/MediocreMapper.Target.cs new file mode 100644 index 0000000..d876564 --- /dev/null +++ b/Source/MediocreMapper.Target.cs @@ -0,0 +1,14 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class MediocreMapperTarget : TargetRules +{ + public MediocreMapperTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + + ExtraModuleNames.AddRange( new string[] { "MediocreMapper" } ); + } +} diff --git a/Source/MediocreMapper/BPFileIO.cpp b/Source/MediocreMapper/BPFileIO.cpp new file mode 100644 index 0000000..be80430 --- /dev/null +++ b/Source/MediocreMapper/BPFileIO.cpp @@ -0,0 +1,111 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "BPFileIO.h" + +bool UBPFileIO::VerifyOrCreateDirectory(const FString & TestDir) +{ + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + + // Directory Exists? + if (!PlatformFile.DirectoryExists(*TestDir)) + { + PlatformFile.CreateDirectory(*TestDir); + + if (!PlatformFile.DirectoryExists(*TestDir)) + { + return false; + } + } + return true; +} + +bool UBPFileIO::VerifyDirectory(const FString & TestDir) +{ + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + + // Directory Exists? + if (!PlatformFile.DirectoryExists(*TestDir)) + { + return false; + } + return true; +} + +TArray UBPFileIO::FindAllDirectories(const FString & TestDir) +{ + TArray result; + IFileManager& FileManager = IFileManager::Get(); + FString FinalPath = TestDir + "/*"; + + FileManager.FindFiles(result, *FinalPath, false, true); + return result; +} + +TArray UBPFileIO::FindAllFiles(const FString & TestDir) +{ + TArray result; + IFileManager& FileManager = IFileManager::Get(); + FString FinalPath = TestDir + "/*"; + + FileManager.FindFiles(result, *FinalPath, true, false); + return result; +} + +bool UBPFileIO::VerifyFile(const FString & TestFile) +{ + if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*TestFile)) + { + return true; + } + return false; +} + +bool UBPFileIO::RenameOrMoveFile(const FString & InputFile, const FString & OutputFile) +{ + if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*InputFile)) + { + return false; + } + + if (!FPlatformFileManager::Get().GetPlatformFile().MoveFile(*OutputFile, *InputFile)) + { + return false; + } + + return true; +} + +bool UBPFileIO::CopyFile(const FString & File, const FString& OutputDirectory, const FString& newName) +{ + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + + if (PlatformFile.FileExists(*File)) + { + if (PlatformFile.DirectoryExists(*OutputDirectory)) + { + PlatformFile.CopyFile(*FString(OutputDirectory + "/" + newName), *File); + return true; + } + } + return false; +} + +bool UBPFileIO::DeleteFile(const FString & File) +{ + if (!FPlatformFileManager::Get().GetPlatformFile().DeleteFile(*File)) + { + return false; + } + + return true; +} + +bool UBPFileIO::DeleteDirectory(const FString & Directory) +{ + if (!FPlatformFileManager::Get().GetPlatformFile().DeleteDirectory(*Directory)) + { + return false; + } + + return true; +} diff --git a/Source/MediocreMapper/BPFileIO.h b/Source/MediocreMapper/BPFileIO.h new file mode 100644 index 0000000..cc18aa8 --- /dev/null +++ b/Source/MediocreMapper/BPFileIO.h @@ -0,0 +1,46 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "PlatformFilemanager.h" +#include "GenericPlatformFile.h" +#include "FileManager.h" +#include "BPFileIO.generated.h" + +/** + * + */ +UCLASS() +class MEDIOCREMAPPER_API UBPFileIO : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool VerifyOrCreateDirectory(const FString& TestDir); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool VerifyDirectory(const FString& TestDir); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static TArray FindAllDirectories(const FString& TestDir); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static TArray FindAllFiles(const FString& TestDir); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool VerifyFile(const FString& TestFile); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool RenameOrMoveFile(const FString& InputFile, const FString& OutputFile); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool CopyFile(const FString& File, const FString& OutputDirectory, const FString& newName); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool DeleteFile(const FString& File); + + UFUNCTION(BlueprintCallable, Category = "File IO") + static bool DeleteDirectory(const FString& Directory); +}; diff --git a/Source/MediocreMapper/BP_BPMChange.cpp b/Source/MediocreMapper/BP_BPMChange.cpp new file mode 100644 index 0000000..a9fcb07 --- /dev/null +++ b/Source/MediocreMapper/BP_BPMChange.cpp @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "BP_BPMChange.h" + + +// Sets default values +ABP_BPMChange::ABP_BPMChange() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void ABP_BPMChange::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void ABP_BPMChange::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + diff --git a/Source/MediocreMapper/BP_BPMChange.h b/Source/MediocreMapper/BP_BPMChange.h new file mode 100644 index 0000000..02071c0 --- /dev/null +++ b/Source/MediocreMapper/BP_BPMChange.h @@ -0,0 +1,28 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "BP_BPMChange.generated.h" + +UCLASS() +class MEDIOCREMAPPER_API ABP_BPMChange : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + ABP_BPMChange(); + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + // Called every frame + virtual void Tick(float DeltaTime) override; + + + +}; diff --git a/Source/MediocreMapper/BeatSaberEditor.cpp b/Source/MediocreMapper/BeatSaberEditor.cpp new file mode 100644 index 0000000..3d76552 --- /dev/null +++ b/Source/MediocreMapper/BeatSaberEditor.cpp @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "BeatSaberEditor.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, MediocreMapper, "MediocreMapper" ); diff --git a/Source/MediocreMapper/BeatSaberEditor.h b/Source/MediocreMapper/BeatSaberEditor.h new file mode 100644 index 0000000..90aad9e --- /dev/null +++ b/Source/MediocreMapper/BeatSaberEditor.h @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" + diff --git a/Source/MediocreMapper/MediocreMapper.Build.cs b/Source/MediocreMapper/MediocreMapper.Build.cs new file mode 100644 index 0000000..bee3453 --- /dev/null +++ b/Source/MediocreMapper/MediocreMapper.Build.cs @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; + +public class MediocreMapper : ModuleRules +{ + public MediocreMapper(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ProceduralMeshComponent" }); + + PrivateDependencyModuleNames.AddRange(new string[] { }); + + // Uncomment if you are using Slate UI + // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + // Uncomment if you are using online features + // PrivateDependencyModuleNames.Add("OnlineSubsystem"); + + // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true + PrivateDependencyModuleNames.AddRange(new string[] { "Kiss_FFT" }); + PublicDependencyModuleNames.Add("Kiss_FFT"); + } +} diff --git a/Source/MediocreMapper/RenderWaveform.cpp b/Source/MediocreMapper/RenderWaveform.cpp new file mode 100644 index 0000000..4c79ec7 --- /dev/null +++ b/Source/MediocreMapper/RenderWaveform.cpp @@ -0,0 +1,288 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "RenderWaveform.h" + +// KISS Headers, that we need for the decompression part +#include "ThirdParty/Kiss_FFT/kiss_fft129/kiss_fft.h" +#include "ThirdParty/Kiss_FFT/kiss_fft129/tools/kiss_fftnd.h" + +bool bNormalizeOutputToDb = false; +bool bShowLogDebug = false; +bool bShowWarningDebug = false; +bool bShowErrorDebug = false; + +// Log Category +DECLARE_LOG_CATEGORY_EXTERN(LogRenderWave, Log, All); + +// Short Defines to faster debug +#define PrintLog(TextToLog) if(bShowLogDebug) UE_LOG(LogRenderWave, Log, TextToLog) +#define PrintWarning(TextToLog) if(bShowWarningDebug) UE_LOG(LogRenderWave, Warning, TextToLog) +#define PrintError(TextToLog) if(bShowErrorDebug) UE_LOG(LogRenderWave, Error, TextToLog) + +#include "Sound/SoundWave.h" +#include "AudioDevice.h" +#include "Runtime/Engine/Public/VorbisAudioInfo.h" +#include "Developer/TargetPlatform/Public/Interfaces/IAudioFormat.h" + +DEFINE_LOG_CATEGORY(LogRenderWave); + +float GetFFTInValue(const int16 InSampleValue, const int16 InSampleIndex, const int16 InSampleCount) +{ + float FFTValue = InSampleValue; + + // Apply the Hann window + FFTValue *= 0.5f * (1 - FMath::Cos(2 * PI * InSampleIndex / (InSampleCount - 1))); + + return FFTValue; +} + +void CalculateFrequencySpectrum(USoundWave* InSoundWaveRef, const float InStartTime, const float InDuration, TArray& OutFrequencies) +{ + // Clear the Array before continuing + OutFrequencies.Empty(); + + const int32 NumChannels = InSoundWaveRef->NumChannels; + const int32 SampleRate = InSoundWaveRef->SampleRate; + + // Make sure the Number of Channels is correct + if (NumChannels > 0 && NumChannels <= 2) + { + // Check if we actually have a Buffer to work with + if (InSoundWaveRef->CachedRealtimeFirstBuffer) + { + // The first sample is just the StartTime * SampleRate + int32 FirstSample = SampleRate * InStartTime; + + // The last sample is the SampleRate times (StartTime plus the Duration) + int32 LastSample = SampleRate * (InStartTime + InDuration); + + // Get Maximum amount of samples in this Sound + const int32 SampleCount = InSoundWaveRef->RawPCMDataSize / (2 * NumChannels); + + // An early check if we can create a Sample window + FirstSample = FMath::Min(SampleCount, FirstSample); + LastSample = FMath::Min(SampleCount, LastSample); + + // Actual amount of samples we gonna read + int32 SamplesToRead = LastSample - FirstSample; + + if (SamplesToRead < 0) { + + PrintError(TEXT("Number of SamplesToRead is < 0!")); + return; + } + + // Shift the window enough so that we get a PowerOfTwo. FFT works better with that + int32 PoT = 2; + + while (SamplesToRead > PoT) { + PoT *= 2; + } + + // Now we have a good PowerOfTwo to work with + SamplesToRead = PoT; + + // Create two 2-dim Arrays for complex numbers | Buffer and Output + kiss_fft_cpx* Buffer[2] = {0}; + kiss_fft_cpx* Output[2] = {0}; + + // Create 1-dim Array with one slot for SamplesToRead + int32 Dims[1] = {SamplesToRead}; + + // alloc once and forget, should probably move to a init/deinit func + static kiss_fftnd_cfg STF = kiss_fftnd_alloc(Dims, 1, 0, nullptr, nullptr); + + int16* SamplePtr = reinterpret_cast(InSoundWaveRef->CachedRealtimeFirstBuffer); + + // Allocate space in the Buffer and Output Arrays for all the data that FFT returns + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + Buffer[ChannelIndex] = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx) * SamplesToRead); + Output[ChannelIndex] = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx) * SamplesToRead); + } + + // Shift our SamplePointer to the Current "FirstSample" + SamplePtr += FirstSample * NumChannels; + + float precomputeMultiplier = 2.f * PI / (SamplesToRead - 1); + + for (int32 SampleIndex = 0; SampleIndex < SamplesToRead; SampleIndex++) + { + float rMult = 0.f; + if (SamplePtr != NULL && (SampleIndex + FirstSample < SampleCount)) + { + rMult = 0.5f * (1.f - FMath::Cos(precomputeMultiplier * SampleIndex)); + } + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + // Make sure the Point is Valid and we don't go out of bounds + if (SamplePtr != NULL && (SampleIndex + FirstSample < SampleCount)) + { + // Use Window function to get a better result for the Data (Hann Window) + Buffer[ChannelIndex][SampleIndex].r = rMult * (*SamplePtr); + } + else + { + Buffer[ChannelIndex][SampleIndex].r = 0.f; + } + Buffer[ChannelIndex][SampleIndex].i = 0.f; + + // Take the next Sample + SamplePtr++; + } + } + + // Now that the Buffer is filled, use the FFT + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++) + { + if (Buffer[ChannelIndex]) + { + kiss_fftnd(STF, Buffer[ChannelIndex], Output[ChannelIndex]); + } + } + + OutFrequencies.AddZeroed(SamplesToRead); + + for (int32 SampleIndex = 0; SampleIndex < SamplesToRead; ++SampleIndex) + { + float ChannelSum = 0.0f; + + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + if (Output[ChannelIndex]) + { + // With this we get the actual Frequency value for the frequencies from 0hz to ~22000hz + ChannelSum += FMath::Sqrt(FMath::Square(Output[ChannelIndex][SampleIndex].r) + FMath::Square(Output[ChannelIndex][SampleIndex].i)); + } + } + + if (bNormalizeOutputToDb) + { + OutFrequencies[SampleIndex] = FMath::LogX(10, ChannelSum / NumChannels) * 10; + } else + { + OutFrequencies[SampleIndex] = ChannelSum / NumChannels; + } + } + + // Make sure to free up the FFT stuff + // KISS_FFT_FREE(STF); + + for (int32 ChannelIndex = 0; ChannelIndex < NumChannels; ++ChannelIndex) + { + KISS_FFT_FREE(Buffer[ChannelIndex]); + KISS_FFT_FREE(Output[ChannelIndex]); + } + } else { + PrintError(TEXT("InSoundVisData.PCMData is a nullptr!")); + } + } else { + PrintError(TEXT("Number of Channels is < 0!")); + } +} + +void URenderWaveform::BP_RenderWaveform(USoundWave* InSoundWaveRef, UProceduralMeshComponent* Mesh, float InSongPosition, int SizeX){ + if (!IsValid(InSoundWaveRef)){ + return; + } + if (!IsValid(Mesh)){ + return; + } + + int nbVert = Mesh->GetProcMeshSection(0)->ProcVertexBuffer.Num(); + bool valid; + + TArray Vertices; + TArray Normals; + TArray UV0; + TArray VertexColors; + TArray Tangents; + + Vertices.AddDefaulted(nbVert); + Normals.Init(FVector(0.0f, 0.0f, 1.0f), nbVert); + UV0.AddDefaulted(nbVert); + VertexColors.AddDefaulted(nbVert); + Tangents.Init(FProcMeshTangent(1.0f, 0.0f, 0.0f), nbVert); + + for (size_t i = 0; i < 320; ++i){ + float duration = (1 / 64.f); + float startTime = duration * i + InSongPosition; + + valid = true; + if (startTime < 0.0f || startTime >= InSoundWaveRef->Duration || startTime + duration >= InSoundWaveRef->Duration) { + valid = false; + } + + TArray results; + + if (valid) CalculateFrequencySpectrum(InSoundWaveRef, startTime, duration, results); + + for (size_t j = 0; j < 64; ++j){ + float height; + + if (valid) height = results[j * 8.f] / 50000.f; + else height = 0; + + Vertices[To1D(i, j, SizeX)] = FVector(i, j, height); + VertexColors[To1D(i, j, SizeX)] = FLinearColor(height, 0.0f, 0.0f); + } + } + + Mesh->UpdateMeshSection_LinearColor(0, Vertices, Normals, UV0, VertexColors, Tangents); + + return; +} + +void URenderWaveform::BP_GenerateSpectrogramMesh(UProceduralMeshComponent* Mesh, int SizeX, int SizeY) +{ + if (!IsValid(Mesh) || SizeX <= 0 || SizeY <= 0) { + return; + } + + TArray Vertices; + TArray Faces; + TArray Normals; + TArray UV0; + TArray VertexColors; + TArray Tangents; + + Vertices.AddDefaulted(SizeX * SizeY); + Normals.AddDefaulted(SizeX * SizeY); + UV0.AddDefaulted(SizeX * SizeY); + VertexColors.AddDefaulted(SizeX * SizeY); + Tangents.AddDefaulted(SizeX * SizeY); + Faces.AddZeroed((SizeX - 1) * (SizeY - 1) * 6); + + for (int j = 0; j < SizeY; ++j) + { + for (int i = 0; i < SizeX; ++i) + { + Vertices[To1D(i, j, SizeX)] = FVector(i,j, 0.0f); + Normals[To1D(i, j, SizeX)] = FVector(0.0f, 0.0f, 1.0f); + UV0[To1D(i, j, SizeX)] = FVector2D(0.0f, 0.0f); + VertexColors[To1D(i, j, SizeX)] = FLinearColor(0.0f, 0.0f, 0.0f); + Tangents[To1D(i, j, SizeX)] = FProcMeshTangent(1.0f, 0.0f, 0.0f); + } + } + + for (int j = 0; j < SizeY - 1; ++j) + { + for (int i = 0; i < SizeX - 1; ++i) + { + Faces[To1D(i, j, SizeX - 1) * 6] = To1D(i, j, SizeX); + Faces[To1D(i, j, SizeX - 1) * 6 + 1] = To1D(i, j + 1, SizeX); + Faces[To1D(i, j, SizeX - 1) * 6 + 2] = To1D(i + 1, j, SizeX); + + Faces[To1D(i, j, SizeX - 1) * 6 + 3] = To1D(i + 1, j, SizeX); + Faces[To1D(i, j, SizeX - 1) * 6 + 4] = To1D(i, j + 1, SizeX); + Faces[To1D(i, j, SizeX - 1) * 6 + 5] = To1D(i + 1, j + 1, SizeX); + } + } + + Mesh->CreateMeshSection_LinearColor(0, Vertices, Faces, Normals, UV0, VertexColors, Tangents, false); +} + +int URenderWaveform::To1D(int x, int y, int sizeX) +{ + return (sizeX * y) + x; +} diff --git a/Source/MediocreMapper/RenderWaveform.h b/Source/MediocreMapper/RenderWaveform.h new file mode 100644 index 0000000..52c4bf2 --- /dev/null +++ b/Source/MediocreMapper/RenderWaveform.h @@ -0,0 +1,32 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" + +#include "Sound/SoundWave.h" +#include "Engine/CanvasRenderTarget2D.h" +#include "Engine/Canvas.h" +#include "ProceduralMeshComponent.h" + +#include "RenderWaveform.generated.h" + +/** + * + */ +UCLASS() +class MEDIOCREMAPPER_API URenderWaveform : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + + public: + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Render Spectrogram"), Category = "Render Spectrogram") + static void BP_RenderWaveform(USoundWave* InSoundWaveRef, UProceduralMeshComponent* Mesh, float InSongPosition, int SizeX); + + UFUNCTION(BlueprintCallable, meta = (DisplayName = "Generate Spectrogram Mesh"), Category = "Render Spectrogram") + static void BP_GenerateSpectrogramMesh(UProceduralMeshComponent* Mesh, int SizeX, int SizeY); + + private: + static int To1D(int x, int y, int sizeX); +}; diff --git a/Source/MediocreMapperEditor.Target.cs b/Source/MediocreMapperEditor.Target.cs new file mode 100644 index 0000000..e99f286 --- /dev/null +++ b/Source/MediocreMapperEditor.Target.cs @@ -0,0 +1,14 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class MediocreMapperEditorTarget : TargetRules +{ + public MediocreMapperEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + + ExtraModuleNames.AddRange( new string[] { "MediocreMapper" } ); + } +} diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000..3d89285 Binary files /dev/null and b/icon.ico differ diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..24a13c3 Binary files /dev/null and b/logo.png differ