commit 2dade82a59a619b65e706729b4d65fe7d76aaa4f Author: Kingsmedia Date: Tue May 17 16:25:58 2022 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..917aee4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,78 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Rider +.idea/ + +# 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/* +Plugins/*/Binaries/* +Plugins/Developer/ + +# 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/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* \ No newline at end of file diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000..76b9535 --- /dev/null +++ b/Config/DefaultEditor.ini @@ -0,0 +1,9 @@ +[UnrealEd.SimpleMap] +SimpleMapName=/Game/FirstPerson/Maps/FirstPersonExampleMap + +[EditoronlyBP] +bAllowClassAndBlueprintPinMatching=true +bReplaceBlueprintWithClass= true +bDontLoadBlueprintOutsideEditor= true +bBlueprintIsNotBlueprintType= true + diff --git a/Config/DefaultEditorPerProjectUserSettings.ini b/Config/DefaultEditorPerProjectUserSettings.ini new file mode 100644 index 0000000..220a551 --- /dev/null +++ b/Config/DefaultEditorPerProjectUserSettings.ini @@ -0,0 +1,2 @@ +[ContentBrowser] +ContentBrowserTab1.SelectedPaths=/Game/FirstPerson \ No newline at end of file diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000..415ddb1 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,74 @@ +[/Script/Engine.CollisionProfile] ++Profiles=(Name="Projectile",CollisionEnabled=QueryOnly,ObjectTypeName="Projectile",CustomResponses=,HelpMessage="Preset for projectiles",bCanModify=True) ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="Projectile",DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False) ++EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore))) + +[/Script/EngineSettings.GameMapsSettings] +EditorStartupMap=/Game/Maps/GameStartupMap.GameStartupMap +LocalMapOptions= +TransitionMap=/Game/Maps/TransitionMap.TransitionMap +bUseSplitscreen=True +TwoPlayerSplitscreenLayout=Horizontal +ThreePlayerSplitscreenLayout=FavorTop +GameInstanceClass=/Script/Engine.GameInstance +GameDefaultMap=/Game/Maps/GameStartupMap.GameStartupMap +ServerDefaultMap=/Engine/Maps/Entry +GlobalDefaultGameMode=/Script/OSS.OSSGameMode +GlobalDefaultServerGameMode=None + +[/Script/IOSRuntimeSettings.IOSRuntimeSettings] +MinimumiOSVersion=IOS_14 + +[/Script/Engine.RendererSettings] +r.ReflectionMethod=1 +r.GenerateMeshDistanceFields=True +r.DynamicGlobalIlluminationMethod=1 +r.Mobile.EnableNoPrecomputedLightingCSMShader=1 + + +r.Shadow.Virtual.Enable=1 + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 + +[/Script/Engine.Engine] ++ActiveGameNameRedirects=(OldGameName="TP_FirstPerson",NewGameName="/Script/OSS") ++ActiveGameNameRedirects=(OldGameName="/Script/TP_FirstPerson",NewGameName="/Script/OSS") ++ActiveClassRedirects=(OldClassName="TP_FirstPersonProjectile",NewClassName="OSSProjectile") ++ActiveClassRedirects=(OldClassName="TP_FirstPersonGameMode",NewClassName="OSSGameMode") ++ActiveClassRedirects=(OldClassName="TP_FirstPersonCharacter",NewClassName="OSSCharacter") + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=2800C2FA4ECB3186389145944B0147C9 +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + +[/Script/Engine.GameEngine] ++NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") + +[OnlineSubsystem] +DefaultPlatformService=Steam + +[OnlineSubsystemSteam] +bEnabled=true +SteamDevAppId=480 +bInitServerOnClient=true + +[/Script/OnlineSubsystemSteam.SteamNetDriver] +NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection" + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000..32ca57a --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,104 @@ +[ProjectSettings] +ProjectID=(A=1823396784,B=1298598689,C=1743498150,D=-2048051708) +ProjectName=First Person Template + +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=8CD17AFD486906BE51BF8690D93FADFF + +[/Script/Engine.GameSession] +MaxPlayers=100 + +[/Script/UnrealEd.ProjectPackagingSettings] +Build=IfProjectHasCode +BuildConfiguration=PPBC_Development +BuildTarget= +LaunchOnTarget= +StagingDirectory=(Path="C:/UEProjects/OSS/Build") +FullRebuild=False +ForDistribution=False +IncludeDebugFiles=False +BlueprintNativizationMethod=Disabled +bIncludeNativizedAssetsInProjectGeneration=False +bExcludeMonolithicEngineHeadersInNativizedCode=False +UsePakFile=True +bUseIoStore=True +bUseZenStore=False +bMakeBinaryConfig=False +bGenerateChunks=False +bGenerateNoChunks=False +bChunkHardReferencesOnly=False +bForceOneChunkPerFile=False +MaxChunkSize=0 +bBuildHttpChunkInstallData=False +HttpChunkInstallDataDirectory=(Path="") +bCompressed=True +PackageCompressionFormat=Oodle +bForceUseProjectCompressionFormatIgnoreHardwareOverride=False +PackageAdditionalCompressionOptions= +PackageCompressionMethod=Kraken +PackageCompressionLevel_DebugDevelopment=4 +PackageCompressionLevel_TestShipping=5 +PackageCompressionLevel_Distribution=7 +PackageCompressionMinBytesSaved=1024 +PackageCompressionMinPercentSaved=5 +bPackageCompressionEnableDDC=False +PackageCompressionMinSizeToConsiderDDC=0 +HttpChunkInstallDataVersion= +IncludePrerequisites=True +IncludeAppLocalPrerequisites=False +bShareMaterialShaderCode=True +bDeterministicShaderCodeOrder=False +bSharedMaterialNativeLibraries=True +ApplocalPrerequisitesDirectory=(Path="") +IncludeCrashReporter=False +InternationalizationPreset=English +-CulturesToStage=en ++CulturesToStage=en +LocalizationTargetCatchAllChunkId=0 +bCookAll=False +bCookMapsOnly=False +bSkipEditorContent=False +bSkipMovies=False +-IniKeyBlacklist=KeyStorePassword +-IniKeyBlacklist=KeyPassword +-IniKeyBlacklist=rsa.privateexp +-IniKeyBlacklist=rsa.modulus +-IniKeyBlacklist=rsa.publicexp +-IniKeyBlacklist=aes.key +-IniKeyBlacklist=SigningPublicExponent +-IniKeyBlacklist=SigningModulus +-IniKeyBlacklist=SigningPrivateExponent +-IniKeyBlacklist=EncryptionKey +-IniKeyBlacklist=DevCenterUsername +-IniKeyBlacklist=DevCenterPassword +-IniKeyBlacklist=IOSTeamID +-IniKeyBlacklist=SigningCertificate +-IniKeyBlacklist=MobileProvision +-IniKeyBlacklist=IniKeyBlacklist +-IniKeyBlacklist=IniSectionBlacklist ++IniKeyBlacklist=KeyStorePassword ++IniKeyBlacklist=KeyPassword ++IniKeyBlacklist=rsa.privateexp ++IniKeyBlacklist=rsa.modulus ++IniKeyBlacklist=rsa.publicexp ++IniKeyBlacklist=aes.key ++IniKeyBlacklist=SigningPublicExponent ++IniKeyBlacklist=SigningModulus ++IniKeyBlacklist=SigningPrivateExponent ++IniKeyBlacklist=EncryptionKey ++IniKeyBlacklist=DevCenterUsername ++IniKeyBlacklist=DevCenterPassword ++IniKeyBlacklist=IOSTeamID ++IniKeyBlacklist=SigningCertificate ++IniKeyBlacklist=MobileProvision ++IniKeyBlacklist=IniKeyBlacklist ++IniKeyBlacklist=IniSectionBlacklist +-IniSectionBlacklist=HordeStorageServers ++IniSectionBlacklist=HordeStorageServers ++MapsToCook=(FilePath="/Game/Maps/GameStartupMap") ++MapsToCook=(FilePath="/Game/Maps/TransitionMap") ++MapsToCook=(FilePath="/Game/Maps/BlasterMap") +PerPlatformBuildConfig=() +PerPlatformTargetFlavorName=(("Android", "Android_ASTC")) +PerPlatformBuildTarget=() + diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..e3eceb2 --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,124 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Touch",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_FaceButton1",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_FaceButton2",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_IndexPointing",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_ThumbUp",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_ThumbRest",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_FaceButton1",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_FaceButton2",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_IndexPointing",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_ThumbUp",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_ThumbRest",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Left_ThumbPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Left_IndexPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Left_MiddlePinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Left_RingPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Left_PinkPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Right_ThumbPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Right_IndexPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Right_MiddlePinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Right_RingPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusHand_Right_PinkPinchStrength",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 ++ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar) ++ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom) ++ActionMappings=(ActionName="PrimaryAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftMouseButton) ++ActionMappings=(ActionName="PrimaryAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_RightTrigger) ++AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=W) ++AxisMappings=(AxisName="Move Forward / Backward",Scale=-1.000000,Key=S) ++AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=Up) ++AxisMappings=(AxisName="Move Forward / Backward",Scale=-1.000000,Key=Down) ++AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=Gamepad_LeftY) ++AxisMappings=(AxisName="Move Right / Left",Scale=-1.000000,Key=A) ++AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=D) ++AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=Gamepad_LeftX) ++AxisMappings=(AxisName="Turn Right / Left Gamepad",Scale=1.000000,Key=Gamepad_RightX) ++AxisMappings=(AxisName="Turn Right / Left Gamepad",Scale=-1.000000,Key=Left) ++AxisMappings=(AxisName="Turn Right / Left Gamepad",Scale=1.000000,Key=Right) ++AxisMappings=(AxisName="Turn Right / Left Mouse",Scale=1.000000,Key=MouseX) ++AxisMappings=(AxisName="Look Up / Down Gamepad",Scale=1.000000,Key=Gamepad_RightY) ++AxisMappings=(AxisName="Look Up / Down Mouse",Scale=-1.000000,Key=MouseY) +DefaultPlayerInputClass=/Script/Engine.PlayerInput +DefaultInputComponentClass=/Script/Engine.InputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/Config/HoloLens/HoloLensEngine.ini b/Config/HoloLens/HoloLensEngine.ini new file mode 100644 index 0000000..7b8b53f --- /dev/null +++ b/Config/HoloLens/HoloLensEngine.ini @@ -0,0 +1,31 @@ + + +[/Script/HoloLensPlatformEditor.HoloLensTargetSettings] +bBuildForEmulation=False +bBuildForDevice=True +bUseNameForLogo=True +bBuildForRetailWindowsStore=False +bAutoIncrementVersion=False +bShouldCreateAppInstaller=False +AppInstallerInstallationURL= +HoursBetweenUpdateChecks=0 +bEnablePIXProfiling=False +TileBackgroundColor=(B=64,G=0,R=0,A=255) +SplashScreenBackgroundColor=(B=64,G=0,R=0,A=255) ++PerCultureResources=(CultureId="",Strings=(PackageDisplayName="",PublisherDisplayName="",PackageDescription="",ApplicationDisplayName="",ApplicationDescription=""),Images=()) +TargetDeviceFamily=Windows.Holographic +MinimumPlatformVersion= +MaximumPlatformVersionTested=10.0.18362.0 +MaxTrianglesPerCubicMeter=500.000000 +SpatialMeshingVolumeSize=20.000000 +CompilerVersion=Default +Windows10SDKVersion=10.0.18362.0 ++CapabilityList=internetClientServer ++CapabilityList=privateNetworkClientServer ++Uap2CapabilityList=spatialPerception +bSetDefaultCapabilities=False +SpatializationPlugin= +ReverbPlugin= +OcclusionPlugin= +SoundCueCookQualityIndex=-1 + diff --git a/Content/Blueprints/BP_BlasterGameMode.uasset b/Content/Blueprints/BP_BlasterGameMode.uasset new file mode 100644 index 0000000..0a73732 Binary files /dev/null and b/Content/Blueprints/BP_BlasterGameMode.uasset differ diff --git a/Content/Blueprints/BP_LobbyGameMode.uasset b/Content/Blueprints/BP_LobbyGameMode.uasset new file mode 100644 index 0000000..ff3b187 Binary files /dev/null and b/Content/Blueprints/BP_LobbyGameMode.uasset differ diff --git a/Content/Blueprints/BP_ThirdPersonCharacter.uasset b/Content/Blueprints/BP_ThirdPersonCharacter.uasset new file mode 100644 index 0000000..3d0052c Binary files /dev/null and b/Content/Blueprints/BP_ThirdPersonCharacter.uasset differ diff --git a/Content/Characters/Mannequins/Animations/ABP_Manny.uasset b/Content/Characters/Mannequins/Animations/ABP_Manny.uasset new file mode 100644 index 0000000..25d04f0 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/ABP_Manny.uasset differ diff --git a/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset b/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset new file mode 100644 index 0000000..98ff9f3 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset b/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset new file mode 100644 index 0000000..8eb2b05 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset new file mode 100644 index 0000000..29f41e9 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset new file mode 100644 index 0000000..c63ed58 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset new file mode 100644 index 0000000..ce60833 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset new file mode 100644 index 0000000..5416475 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset new file mode 100644 index 0000000..7f0b707 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset new file mode 100644 index 0000000..f0013ef Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset b/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset new file mode 100644 index 0000000..dd9cb4a Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset b/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset new file mode 100644 index 0000000..0f36a97 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset b/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset new file mode 100644 index 0000000..44c15db Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset b/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset new file mode 100644 index 0000000..510126d Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset b/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset new file mode 100644 index 0000000..2c4a8e7 Binary files /dev/null and b/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset b/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset new file mode 100644 index 0000000..18a90f8 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset b/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset new file mode 100644 index 0000000..7eabed7 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset b/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset new file mode 100644 index 0000000..658b578 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset b/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset new file mode 100644 index 0000000..28c8267 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset b/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset new file mode 100644 index 0000000..a8905ed Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset b/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset new file mode 100644 index 0000000..0c797f9 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset b/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset new file mode 100644 index 0000000..d83936b Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset b/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset new file mode 100644 index 0000000..5ff72a5 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset b/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset new file mode 100644 index 0000000..edcc292 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset differ diff --git a/Content/Characters/Mannequins/Materials/M_Mannequin.uasset b/Content/Characters/Mannequins/Materials/M_Mannequin.uasset new file mode 100644 index 0000000..9ae96ec Binary files /dev/null and b/Content/Characters/Mannequins/Materials/M_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset b/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset new file mode 100644 index 0000000..5d82e00 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset b/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset new file mode 100644 index 0000000..8a0c267 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset b/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset new file mode 100644 index 0000000..3c6177e Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset b/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset new file mode 100644 index 0000000..d0dafdf Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset new file mode 100644 index 0000000..d8f1d53 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset new file mode 100644 index 0000000..5e06618 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset b/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset new file mode 100644 index 0000000..60a8181 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset b/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset new file mode 100644 index 0000000..89edb4c Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset new file mode 100644 index 0000000..6fc28a9 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset new file mode 100644 index 0000000..552688c Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset new file mode 100644 index 0000000..ecf2b04 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset b/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset new file mode 100644 index 0000000..88777ba Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset b/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset new file mode 100644 index 0000000..beb57c6 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset new file mode 100644 index 0000000..b9daf8a Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset new file mode 100644 index 0000000..d9143da Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset new file mode 100644 index 0000000..e3ad612 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset new file mode 100644 index 0000000..bb87fbd Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset new file mode 100644 index 0000000..248303a Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset new file mode 100644 index 0000000..ff54c12 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset new file mode 100644 index 0000000..4c9173e Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset new file mode 100644 index 0000000..c8120a2 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset new file mode 100644 index 0000000..b0db2b3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset new file mode 100644 index 0000000..6861ec7 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset new file mode 100644 index 0000000..6f7b836 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset new file mode 100644 index 0000000..cb7301f Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset new file mode 100644 index 0000000..08003a1 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset new file mode 100644 index 0000000..e3c6583 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset new file mode 100644 index 0000000..2967fed Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset new file mode 100644 index 0000000..eb64b4a Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset new file mode 100644 index 0000000..61b71ac Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset new file mode 100644 index 0000000..00ac326 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset new file mode 100644 index 0000000..9f83f7e Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset new file mode 100644 index 0000000..2d472be Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset new file mode 100644 index 0000000..f1f66de Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset new file mode 100644 index 0000000..116157f Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset new file mode 100644 index 0000000..65ef30d Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset new file mode 100644 index 0000000..2233d7e Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset new file mode 100644 index 0000000..f7c9bd8 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset new file mode 100644 index 0000000..71944b4 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset new file mode 100644 index 0000000..e542f68 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset new file mode 100644 index 0000000..1a19e07 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset new file mode 100644 index 0000000..3afe5d3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset new file mode 100644 index 0000000..ac48576 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset new file mode 100644 index 0000000..91cbdfe Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset new file mode 100644 index 0000000..840ef95 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset new file mode 100644 index 0000000..7ed962c Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset new file mode 100644 index 0000000..56ab7ae Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset new file mode 100644 index 0000000..9c29f27 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset new file mode 100644 index 0000000..9ae54c3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset new file mode 100644 index 0000000..3abe558 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset new file mode 100644 index 0000000..a08fa53 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset new file mode 100644 index 0000000..5522a14 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset new file mode 100644 index 0000000..59b34b1 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset new file mode 100644 index 0000000..1a04a03 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset new file mode 100644 index 0000000..ec1b72c Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset new file mode 100644 index 0000000..c1fd355 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset new file mode 100644 index 0000000..aa0b6cf Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset new file mode 100644 index 0000000..e63e32e Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset new file mode 100644 index 0000000..5f8d5ef Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset new file mode 100644 index 0000000..f3492ce Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset new file mode 100644 index 0000000..b04f7e3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset new file mode 100644 index 0000000..1209be8 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset new file mode 100644 index 0000000..82ccbd3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset new file mode 100644 index 0000000..48a756b Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset new file mode 100644 index 0000000..e034a03 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset new file mode 100644 index 0000000..35195f7 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset new file mode 100644 index 0000000..b12e384 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset new file mode 100644 index 0000000..e1c9ed3 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset new file mode 100644 index 0000000..0e0c116 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset b/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset new file mode 100644 index 0000000..eceda12 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset new file mode 100644 index 0000000..2807d27 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset new file mode 100644 index 0000000..270ab26 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset new file mode 100644 index 0000000..a148038 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset new file mode 100644 index 0000000..ec6af7d Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset new file mode 100644 index 0000000..0c7c051 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset new file mode 100644 index 0000000..e4bf9d7 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset new file mode 100644 index 0000000..e936aeb Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset new file mode 100644 index 0000000..7574c0f Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset new file mode 100644 index 0000000..d5c7560 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset new file mode 100644 index 0000000..d92db8b Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset new file mode 100644 index 0000000..8f73b0b Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset new file mode 100644 index 0000000..e847d53 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset new file mode 100644 index 0000000..da95dd9 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset new file mode 100644 index 0000000..76dec67 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset new file mode 100644 index 0000000..80a7b3d Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset new file mode 100644 index 0000000..3c308a7 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset new file mode 100644 index 0000000..83f3bba Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset new file mode 100644 index 0000000..56edd5f Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset new file mode 100644 index 0000000..30d96fd Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset new file mode 100644 index 0000000..d2bfe5c Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset new file mode 100644 index 0000000..b989620 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset new file mode 100644 index 0000000..d690622 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset new file mode 100644 index 0000000..acc6a70 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset new file mode 100644 index 0000000..4e43572 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset new file mode 100644 index 0000000..d3476ba Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset new file mode 100644 index 0000000..3a61bee Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset new file mode 100644 index 0000000..b57c447 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset new file mode 100644 index 0000000..e050b4a Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset b/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset new file mode 100644 index 0000000..ef37240 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset differ diff --git a/Content/GameMode/BP_LobbyGameMode.uasset b/Content/GameMode/BP_LobbyGameMode.uasset new file mode 100644 index 0000000..80371b5 Binary files /dev/null and b/Content/GameMode/BP_LobbyGameMode.uasset differ diff --git a/Content/Maps/BlasterMap.umap b/Content/Maps/BlasterMap.umap new file mode 100644 index 0000000..ade159c Binary files /dev/null and b/Content/Maps/BlasterMap.umap differ diff --git a/Content/Maps/GameStartupMap.umap b/Content/Maps/GameStartupMap.umap new file mode 100644 index 0000000..3760421 Binary files /dev/null and b/Content/Maps/GameStartupMap.umap differ diff --git a/Content/Maps/Lobby.umap b/Content/Maps/Lobby.umap new file mode 100644 index 0000000..eb45dee Binary files /dev/null and b/Content/Maps/Lobby.umap differ diff --git a/Content/Maps/TransitionMap.umap b/Content/Maps/TransitionMap.umap new file mode 100644 index 0000000..2ba38b6 Binary files /dev/null and b/Content/Maps/TransitionMap.umap differ diff --git a/OSS.uproject b/OSS.uproject new file mode 100644 index 0000000..41e4303 --- /dev/null +++ b/OSS.uproject @@ -0,0 +1,38 @@ +{ + "FileVersion": 3, + "EngineAssociation": "5.0", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "OSS", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine" + ] + } + ], + "Plugins": [ + { + "Name": "ModelingToolsEditorMode", + "Enabled": true, + "TargetAllowList": [ + "Editor" + ] + }, + { + "Name": "Bridge", + "Enabled": true, + "SupportedTargetPlatforms": [ + "Win64", + "Mac", + "Linux" + ] + }, + { + "Name": "OnlineSubsystemSteam", + "Enabled": true + } + ] +} \ No newline at end of file diff --git a/Plugins/MultiplayerSessions/Content/WBP_Menu.uasset b/Plugins/MultiplayerSessions/Content/WBP_Menu.uasset new file mode 100644 index 0000000..9e3b7aa Binary files /dev/null and b/Plugins/MultiplayerSessions/Content/WBP_Menu.uasset differ diff --git a/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin b/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin new file mode 100644 index 0000000..28507ca --- /dev/null +++ b/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin @@ -0,0 +1,34 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.0", + "FriendlyName": "MultiplayerSessions", + "Description": "A plugin for handling online multiplayer sessions", + "Category": "Other", + "CreatedBy": "Stephen Ulibarri", + "CreatedByURL": "", + "DocsURL": "", + "MarketplaceURL": "", + "SupportURL": "", + "CanContainContent": true, + "IsBetaVersion": false, + "IsExperimentalVersion": false, + "Installed": false, + "Modules": [ + { + "Name": "MultiplayerSessions", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ], + "Plugins": [ + { + "Name": "OnlineSubsystem", + "Enabled": true + }, + { + "Name": "OnlineSubsystemSteam", + "Enabled": true + } + ] +} \ No newline at end of file diff --git a/Plugins/MultiplayerSessions/Resources/Icon128.png b/Plugins/MultiplayerSessions/Resources/Icon128.png new file mode 100644 index 0000000..1231d4a Binary files /dev/null and b/Plugins/MultiplayerSessions/Resources/Icon128.png differ diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs new file mode 100644 index 0000000..e67c4b6 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs @@ -0,0 +1,58 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class MultiplayerSessions : ModuleRules +{ + public MultiplayerSessions(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "OnlineSubsystem", + "OnlineSubsystemSteam", + "UMG", + "Slate", + "SlateCore" + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + "Slate", + "SlateCore", + // ... add private dependencies that you statically link with here ... + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp new file mode 100644 index 0000000..f9117e3 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp @@ -0,0 +1,182 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Menu.h" +#include "Components/Button.h" +#include "MultiplayerSessionsSubsystem.h" +#include "OnlineSessionSettings.h" +#include "OnlineSubsystem.h" + +void UMenu::MenuSetup(int32 NumberOfPublicConnections, FString TypeOfMatch, FString LobbyPath) +{ + PathToLobby = FString::Printf(TEXT("%s?listen"), *LobbyPath); + NumPublicConnections = NumberOfPublicConnections; + MatchType = TypeOfMatch; + AddToViewport(); + SetVisibility(ESlateVisibility::Visible); + bIsFocusable = true; + + UWorld* World = GetWorld(); + if (World) + { + APlayerController* PlayerController = World->GetFirstPlayerController(); + if (PlayerController) + { + FInputModeUIOnly InputModeData; + InputModeData.SetWidgetToFocus(TakeWidget()); + InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); + PlayerController->SetInputMode(InputModeData); + PlayerController->SetShowMouseCursor(true); + } + } + + UGameInstance* GameInstance = GetGameInstance(); + if (GameInstance) + { + MultiplayerSessionsSubsystem = GameInstance->GetSubsystem(); + } + + if (MultiplayerSessionsSubsystem) + { + MultiplayerSessionsSubsystem->MultiplayerOnCreateSessionComplete.AddDynamic(this, &ThisClass::OnCreateSession); + MultiplayerSessionsSubsystem->MultiplayerOnFindSessionsComplete.AddUObject(this, &ThisClass::OnFindSessions); + MultiplayerSessionsSubsystem->MultiplayerOnJoinSessionComplete.AddUObject(this, &ThisClass::OnJoinSession); + MultiplayerSessionsSubsystem->MultiplayerOnDestroySessionComplete.AddDynamic(this, &ThisClass::OnDestroySession); + MultiplayerSessionsSubsystem->MultiplayerOnStartSessionComplete.AddDynamic(this, &ThisClass::OnStartSession); + } +} + +bool UMenu::Initialize() +{ + if (!Super::Initialize()) + { + return false; + } + + if (HostButton) + { + HostButton->OnClicked.AddDynamic(this, &ThisClass::HostButtonClicked); + } + if (JoinButton) + { + JoinButton->OnClicked.AddDynamic(this, &ThisClass::JoinButtonClicked); + } + + return true; +} + +void UMenu::OnLevelRemovedFromWorld(ULevel* InLevel, UWorld* InWorld) +{ + MenuTearDown(); + Super::OnLevelRemovedFromWorld(InLevel, InWorld); +} + +void UMenu::OnCreateSession(bool bWasSuccessful) +{ + if (bWasSuccessful) + { + UWorld* World = GetWorld(); + if (World) + { + World->ServerTravel(PathToLobby); + } + } + else + { + if (GEngine) + { + GEngine->AddOnScreenDebugMessage( + -1, + 15.f, + FColor::Red, + FString(TEXT("Failed to create session!")) + ); + } + HostButton->SetIsEnabled(true); + } +} + +void UMenu::OnFindSessions(const TArray& SessionResults, bool bWasSuccessful) +{ + if (MultiplayerSessionsSubsystem == nullptr) + { + return; + } + + for (auto Result : SessionResults) + { + FString SettingsValue; + Result.Session.SessionSettings.Get(FName("MatchType"), SettingsValue); + if (SettingsValue == MatchType) + { + MultiplayerSessionsSubsystem->JoinSession(Result); + return; + } + } + if (!bWasSuccessful || SessionResults.Num() == 0) + { + JoinButton->SetIsEnabled(true); + } +} + +void UMenu::OnJoinSession(EOnJoinSessionCompleteResult::Type Result) +{ + IOnlineSubsystem* Subsystem = IOnlineSubsystem::Get(); + if (Subsystem) + { + IOnlineSessionPtr SessionInterface = Subsystem->GetSessionInterface(); + if (SessionInterface.IsValid()) + { + FString Address; + SessionInterface->GetResolvedConnectString(NAME_GameSession, Address); + + APlayerController* PlayerController = GetGameInstance()->GetFirstLocalPlayerController(); + if (PlayerController) + { + PlayerController->ClientTravel(Address, ETravelType::TRAVEL_Absolute); + } + } + } +} + +void UMenu::OnDestroySession(bool bWasSuccessful) +{ +} + +void UMenu::OnStartSession(bool bWasSuccessful) +{ +} + +void UMenu::HostButtonClicked() +{ + HostButton->SetIsEnabled(false); + if (MultiplayerSessionsSubsystem) + { + MultiplayerSessionsSubsystem->CreateSession(NumPublicConnections, MatchType); + } +} + +void UMenu::JoinButtonClicked() +{ + JoinButton->SetIsEnabled(false); + if (MultiplayerSessionsSubsystem) + { + MultiplayerSessionsSubsystem->FindSessions(10000); + } +} + +void UMenu::MenuTearDown() +{ + RemoveFromParent(); + UWorld* World = GetWorld(); + if (World) + { + APlayerController* PlayerController = World->GetFirstPlayerController(); + if (PlayerController) + { + FInputModeGameOnly InputModeData; + PlayerController->SetInputMode(InputModeData); + PlayerController->SetShowMouseCursor(false); + } + } +} diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessions.cpp b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessions.cpp new file mode 100644 index 0000000..42c4b08 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessions.cpp @@ -0,0 +1,20 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "MultiplayerSessions.h" + +#define LOCTEXT_NAMESPACE "FMultiplayerSessionsModule" + +void FMultiplayerSessionsModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module +} + +void FMultiplayerSessionsModule::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(FMultiplayerSessionsModule, MultiplayerSessions) \ No newline at end of file diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp new file mode 100644 index 0000000..2009cb1 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp @@ -0,0 +1,178 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MultiplayerSessionsSubsystem.h" +#include "OnlineSubsystem.h" +#include "OnlineSessionSettings.h" + +UMultiplayerSessionsSubsystem::UMultiplayerSessionsSubsystem(): + CreateSessionCompleteDelegate(FOnCreateSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnCreateSessionComplete)), + FindSessionsCompleteDelegate(FOnFindSessionsCompleteDelegate::CreateUObject(this, &ThisClass::OnFindSessionsComplete)), + JoinSessionCompleteDelegate(FOnJoinSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnJoinSessionComplete)), + DestroySessionCompleteDelegate(FOnDestroySessionCompleteDelegate::CreateUObject(this, &ThisClass::OnDestroySessionComplete)), + StartSessionCompleteDelegate(FOnStartSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnStartSessionComplete)) +{ + IOnlineSubsystem* Subsystem = IOnlineSubsystem::Get(); + if (Subsystem) + { + SessionInterface = Subsystem->GetSessionInterface(); + } +} + +void UMultiplayerSessionsSubsystem::CreateSession(int32 NumPublicConnections, FString MatchType) +{ + if (!SessionInterface.IsValid()) + { + return; + } + + auto ExistingSession = SessionInterface->GetNamedSession(NAME_GameSession); + if (ExistingSession != nullptr) + { + bCreateSessionOnDestroy = true; + LastNumPublicConnections = NumPublicConnections; + LastMatchType = MatchType; + + DestroySession(); + } + + // Store the delegate in a FDelegateHandle so we can later remove it from the delegate list + CreateSessionCompleteDelegateHandle = SessionInterface->AddOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegate); + + LastSessionSettings = MakeShareable(new FOnlineSessionSettings()); + LastSessionSettings->bIsLANMatch = IOnlineSubsystem::Get()->GetSubsystemName() == "NULL" ? true : false; + LastSessionSettings->NumPublicConnections = NumPublicConnections; + LastSessionSettings->bAllowJoinInProgress = true; + LastSessionSettings->bAllowJoinViaPresence = true; + LastSessionSettings->bShouldAdvertise = true; + LastSessionSettings->bUsesPresence = true; + LastSessionSettings->Set(FName("MatchType"), MatchType, EOnlineDataAdvertisementType::ViaOnlineServiceAndPing); + LastSessionSettings->BuildUniqueId = 1; + LastSessionSettings->bUseLobbiesIfAvailable = true; + + const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController(); + if (!SessionInterface->CreateSession(*LocalPlayer->GetPreferredUniqueNetId(), NAME_GameSession, *LastSessionSettings)) + { + SessionInterface->ClearOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegateHandle); + + // Broadcast our own custom delegate + MultiplayerOnCreateSessionComplete.Broadcast(false); + } +} + +void UMultiplayerSessionsSubsystem::FindSessions(int32 MaxSearchResults) +{ + if (!SessionInterface.IsValid()) + { + return; + } + + FindSessionsCompleteDelegateHandle = SessionInterface->AddOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegate); + + LastSessionSearch = MakeShareable(new FOnlineSessionSearch()); + LastSessionSearch->MaxSearchResults = MaxSearchResults; + LastSessionSearch->bIsLanQuery = IOnlineSubsystem::Get()->GetSubsystemName() == "NULL" ? true : false; + LastSessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals); + + const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController(); + if (!SessionInterface->FindSessions(*LocalPlayer->GetPreferredUniqueNetId(), LastSessionSearch.ToSharedRef())) + { + SessionInterface->ClearOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegateHandle); + + MultiplayerOnFindSessionsComplete.Broadcast(TArray(), false); + } +} + +void UMultiplayerSessionsSubsystem::JoinSession(const FOnlineSessionSearchResult& SessionResult) +{ + if (!SessionInterface.IsValid()) + { + MultiplayerOnJoinSessionComplete.Broadcast(EOnJoinSessionCompleteResult::UnknownError); + return; + } + + JoinSessionCompleteDelegateHandle = SessionInterface->AddOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegate); + + const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController(); + if (!SessionInterface->JoinSession(*LocalPlayer->GetPreferredUniqueNetId(), NAME_GameSession, SessionResult)) + { + SessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegateHandle); + + MultiplayerOnJoinSessionComplete.Broadcast(EOnJoinSessionCompleteResult::UnknownError); + } +} + +void UMultiplayerSessionsSubsystem::DestroySession() +{ + if (!SessionInterface.IsValid()) + { + MultiplayerOnDestroySessionComplete.Broadcast(false); + return; + } + + DestroySessionCompleteDelegateHandle = SessionInterface->AddOnDestroySessionCompleteDelegate_Handle(DestroySessionCompleteDelegate); + + if (!SessionInterface->DestroySession(NAME_GameSession)) + { + SessionInterface->ClearOnDestroySessionCompleteDelegate_Handle(DestroySessionCompleteDelegateHandle); + MultiplayerOnDestroySessionComplete.Broadcast(false); + } +} + +void UMultiplayerSessionsSubsystem::StartSession() +{ +} + +void UMultiplayerSessionsSubsystem::OnCreateSessionComplete(FName SessionName, bool bWasSuccessful) +{ + if (SessionInterface) + { + SessionInterface->ClearOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegateHandle); + } + + MultiplayerOnCreateSessionComplete.Broadcast(bWasSuccessful); +} + +void UMultiplayerSessionsSubsystem::OnFindSessionsComplete(bool bWasSuccessful) +{ + if (SessionInterface) + { + SessionInterface->ClearOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegateHandle); + } + + if (LastSessionSearch->SearchResults.Num() <= 0) + { + MultiplayerOnFindSessionsComplete.Broadcast(TArray(), false); + return; + } + + MultiplayerOnFindSessionsComplete.Broadcast(LastSessionSearch->SearchResults, bWasSuccessful); +} + +void UMultiplayerSessionsSubsystem::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result) +{ + if (SessionInterface) + { + SessionInterface->ClearOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegateHandle); + } + + MultiplayerOnJoinSessionComplete.Broadcast(Result); +} + +void UMultiplayerSessionsSubsystem::OnDestroySessionComplete(FName SessionName, bool bWasSuccessful) +{ + if (SessionInterface) + { + SessionInterface->ClearOnDestroySessionCompleteDelegate_Handle(DestroySessionCompleteDelegateHandle); + } + if (bWasSuccessful && bCreateSessionOnDestroy) + { + bCreateSessionOnDestroy = false; + CreateSession(LastNumPublicConnections, LastMatchType); + } + MultiplayerOnDestroySessionComplete.Broadcast(bWasSuccessful); +} + +void UMultiplayerSessionsSubsystem::OnStartSessionComplete(FName SessionName, bool bWasSuccessful) +{ +} diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h new file mode 100644 index 0000000..2e796ec --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h @@ -0,0 +1,60 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "Interfaces/OnlineSessionInterface.h" +#include "Menu.generated.h" + +/** + * + */ +UCLASS() +class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget +{ + GENERATED_BODY() +public: + UFUNCTION(BlueprintCallable) + void MenuSetup(int32 NumberOfPublicConnections = 4, FString TypeOfMatch = FString(TEXT("FreeForAll")), FString LobbyPath = FString(TEXT("/Game/ThirdPersonCPP/Maps/Lobby"))); + +protected: + + virtual bool Initialize() override; + virtual void OnLevelRemovedFromWorld(ULevel* InLevel, UWorld* InWorld) override; + + // + // Callbacks for the custom delegates on the MultiplayerSessionsSubsystem + // + UFUNCTION() + void OnCreateSession(bool bWasSuccessful); + void OnFindSessions(const TArray& SessionResults, bool bWasSuccessful); + void OnJoinSession(EOnJoinSessionCompleteResult::Type Result); + UFUNCTION() + void OnDestroySession(bool bWasSuccessful); + UFUNCTION() + void OnStartSession(bool bWasSuccessful); + +private: + + UPROPERTY(meta = (BindWidget)) + class UButton* HostButton; + + UPROPERTY(meta = (BindWidget)) + UButton* JoinButton; + + UFUNCTION() + void HostButtonClicked(); + + UFUNCTION() + void JoinButtonClicked(); + + void MenuTearDown(); + + // The subsystem designed to handle all online session functionality + class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem; + + int32 NumPublicConnections{4}; + FString MatchType{TEXT("FreeForAll")}; + FString PathToLobby{TEXT("")}; +}; diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessions.h b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessions.h new file mode 100644 index 0000000..c32ff38 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessions.h @@ -0,0 +1,15 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Modules/ModuleManager.h" + +class FMultiplayerSessionsModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h new file mode 100644 index 0000000..fedff49 --- /dev/null +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h @@ -0,0 +1,83 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Subsystems/GameInstanceSubsystem.h" +#include "Interfaces/OnlineSessionInterface.h" + +#include "MultiplayerSessionsSubsystem.generated.h" + +// +// Delcaring our own custom delegates for the Menu class to bind callbacks to +// +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnCreateSessionComplete, bool, bWasSuccessful); +DECLARE_MULTICAST_DELEGATE_TwoParams(FMultiplayerOnFindSessionsComplete, const TArray& SessionResults, bool bWasSuccessful); +DECLARE_MULTICAST_DELEGATE_OneParam(FMultiplayerOnJoinSessionComplete, EOnJoinSessionCompleteResult::Type Result); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnDestroySessionComplete, bool, bWasSuccessful); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnStartSessionComplete, bool, bWasSuccessful); + +/** + * + */ +UCLASS() +class MULTIPLAYERSESSIONS_API UMultiplayerSessionsSubsystem : public UGameInstanceSubsystem +{ + GENERATED_BODY() +public: + UMultiplayerSessionsSubsystem(); + + // + // To handle session functionality. The Menu class will call these + // + void CreateSession(int32 NumPublicConnections, FString MatchType); + void FindSessions(int32 MaxSearchResults); + void JoinSession(const FOnlineSessionSearchResult& SessionResult); + void DestroySession(); + void StartSession(); + + // + // Our own custom delegates for the Menu class to bind callbacks to + // + FMultiplayerOnCreateSessionComplete MultiplayerOnCreateSessionComplete; + FMultiplayerOnFindSessionsComplete MultiplayerOnFindSessionsComplete; + FMultiplayerOnJoinSessionComplete MultiplayerOnJoinSessionComplete; + FMultiplayerOnDestroySessionComplete MultiplayerOnDestroySessionComplete; + FMultiplayerOnStartSessionComplete MultiplayerOnStartSessionComplete; + +protected: + + // + // Internal callbacks for the delegates we'll add to the Online Session Interface delegate list. + // Thise don't need to be called outside this class. + // + void OnCreateSessionComplete(FName SessionName, bool bWasSuccessful); + void OnFindSessionsComplete(bool bWasSuccessful); + void OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result); + void OnDestroySessionComplete(FName SessionName, bool bWasSuccessful); + void OnStartSessionComplete(FName SessionName, bool bWasSuccessful); + +private: + IOnlineSessionPtr SessionInterface; + TSharedPtr LastSessionSettings; + TSharedPtr LastSessionSearch; + + // + // To add to the Online Session Interface delegate list. + // We'll bind our MultiplayerSessionsSubsystem internal callbacks to these. + // + FOnCreateSessionCompleteDelegate CreateSessionCompleteDelegate; + FDelegateHandle CreateSessionCompleteDelegateHandle; + FOnFindSessionsCompleteDelegate FindSessionsCompleteDelegate; + FDelegateHandle FindSessionsCompleteDelegateHandle; + FOnJoinSessionCompleteDelegate JoinSessionCompleteDelegate; + FDelegateHandle JoinSessionCompleteDelegateHandle; + FOnDestroySessionCompleteDelegate DestroySessionCompleteDelegate; + FDelegateHandle DestroySessionCompleteDelegateHandle; + FOnStartSessionCompleteDelegate StartSessionCompleteDelegate; + FDelegateHandle StartSessionCompleteDelegateHandle; + + bool bCreateSessionOnDestroy{ false }; + int32 LastNumPublicConnections; + FString LastMatchType; +}; diff --git a/Source/OSS.Target.cs b/Source/OSS.Target.cs new file mode 100644 index 0000000..7d24b16 --- /dev/null +++ b/Source/OSS.Target.cs @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class OSSTarget : TargetRules +{ + public OSSTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + DefaultBuildSettings = BuildSettingsVersion.V2; + ExtraModuleNames.Add("OSS"); + } +} diff --git a/Source/OSS/BlasterGameMode.cpp b/Source/OSS/BlasterGameMode.cpp new file mode 100644 index 0000000..40ab26a --- /dev/null +++ b/Source/OSS/BlasterGameMode.cpp @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "BlasterGameMode.h" + +namespace MatchState +{ + const FName Cooldown = FName("Cooldown"); +} + +void ABlasterGameMode::BeginPlay() +{ + Super::BeginPlay(); +} + +void ABlasterGameMode::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + + UE_LOG(LogTemp, Warning, TEXT("Countdown: %f"), MatchTime - GetWorld()->GetTimeSeconds()); + + if (MatchTime - GetWorld()->GetTimeSeconds() <= 0.f) + { + RestartGame(); + } +} diff --git a/Source/OSS/BlasterGameMode.h b/Source/OSS/BlasterGameMode.h new file mode 100644 index 0000000..18e4449 --- /dev/null +++ b/Source/OSS/BlasterGameMode.h @@ -0,0 +1,31 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameMode.h" +#include "BlasterGameMode.generated.h" + +namespace MatchState +{ + extern OSS_API const FName Cooldown; // Match duration has been reached. Display winner and begin cooldown timer +} + +/** + * + */ +UCLASS() +class OSS_API ABlasterGameMode : public AGameMode +{ + GENERATED_BODY() + +public: + virtual void Tick(float DeltaTime) override; + + UPROPERTY(EditDefaultsOnly) + float MatchTime = 30.f; + +protected: + virtual void BeginPlay() override; + +}; diff --git a/Source/OSS/LobbyGameMode.cpp b/Source/OSS/LobbyGameMode.cpp new file mode 100644 index 0000000..ac8cfd2 --- /dev/null +++ b/Source/OSS/LobbyGameMode.cpp @@ -0,0 +1,21 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "LobbyGameMode.h" +#include "GameFramework/GameStateBase.h" + +void ALobbyGameMode::PostLogin(APlayerController* NewPlayer) +{ + Super::PostLogin(NewPlayer); + + int32 NumberOfPlayers = GameState.Get()->PlayerArray.Num(); + if (NumberOfPlayers == 2) + { + UWorld* World = GetWorld(); + if (World) + { + bUseSeamlessTravel = true; + World->ServerTravel(FString("/Game/Maps/BlasterMap?listen")); + } + } +} diff --git a/Source/OSS/LobbyGameMode.h b/Source/OSS/LobbyGameMode.h new file mode 100644 index 0000000..a855fb6 --- /dev/null +++ b/Source/OSS/LobbyGameMode.h @@ -0,0 +1,21 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameMode.h" +#include "LobbyGameMode.generated.h" + +/** + * + */ +UCLASS() +class OSS_API ALobbyGameMode : public AGameMode +{ + GENERATED_BODY() + +public: + + virtual void PostLogin(APlayerController* NewPlayer) override; + +}; diff --git a/Source/OSS/OSS.Build.cs b/Source/OSS/OSS.Build.cs new file mode 100644 index 0000000..7f5d550 --- /dev/null +++ b/Source/OSS/OSS.Build.cs @@ -0,0 +1,13 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class OSS : ModuleRules +{ + public OSS(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" }); + } +} diff --git a/Source/OSS/OSS.cpp b/Source/OSS/OSS.cpp new file mode 100644 index 0000000..a873946 --- /dev/null +++ b/Source/OSS/OSS.cpp @@ -0,0 +1,7 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "OSS.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, OSS, "OSS" ); + \ No newline at end of file diff --git a/Source/OSS/OSS.h b/Source/OSS/OSS.h new file mode 100644 index 0000000..ddbf2e2 --- /dev/null +++ b/Source/OSS/OSS.h @@ -0,0 +1,5 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" diff --git a/Source/OSS/OSSCharacter.cpp b/Source/OSS/OSSCharacter.cpp new file mode 100644 index 0000000..9cda329 --- /dev/null +++ b/Source/OSS/OSSCharacter.cpp @@ -0,0 +1,148 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "OSSCharacter.h" +#include "Animation/AnimInstance.h" +#include "Camera/CameraComponent.h" +#include "Components/CapsuleComponent.h" +#include "Components/InputComponent.h" +#include "GameFramework/InputSettings.h" + + +////////////////////////////////////////////////////////////////////////// +// AOSSCharacter + +AOSSCharacter::AOSSCharacter() +{ + // Set size for collision capsule + GetCapsuleComponent()->InitCapsuleSize(55.f, 96.0f); + + // set our turn rates for input + TurnRateGamepad = 45.f; + + // Create a CameraComponent + FirstPersonCameraComponent = CreateDefaultSubobject(TEXT("FirstPersonCamera")); + FirstPersonCameraComponent->SetupAttachment(GetCapsuleComponent()); + FirstPersonCameraComponent->SetRelativeLocation(FVector(-39.56f, 1.75f, 64.f)); // Position the camera + FirstPersonCameraComponent->bUsePawnControlRotation = true; + + // Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn) + Mesh1P = CreateDefaultSubobject(TEXT("CharacterMesh1P")); + Mesh1P->SetOnlyOwnerSee(true); + Mesh1P->SetupAttachment(FirstPersonCameraComponent); + Mesh1P->bCastDynamicShadow = false; + Mesh1P->CastShadow = false; + Mesh1P->SetRelativeRotation(FRotator(1.9f, -19.19f, 5.2f)); + Mesh1P->SetRelativeLocation(FVector(-0.5f, -4.4f, -155.7f)); + +} + +void AOSSCharacter::BeginPlay() +{ + // Call the base class + Super::BeginPlay(); + +} + +//////////////////////////////////////////////////////////////////////////// Input + +void AOSSCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) +{ + // Set up gameplay key bindings + check(PlayerInputComponent); + + // Bind jump events + PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump); + PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping); + + // Bind fire event + PlayerInputComponent->BindAction("PrimaryAction", IE_Pressed, this, &AOSSCharacter::OnPrimaryAction); + + // Enable touchscreen input + EnableTouchscreenMovement(PlayerInputComponent); + + // Bind movement events + PlayerInputComponent->BindAxis("Move Forward / Backward", this, &AOSSCharacter::MoveForward); + PlayerInputComponent->BindAxis("Move Right / Left", this, &AOSSCharacter::MoveRight); + + // We have 2 versions of the rotation bindings to handle different kinds of devices differently + // "Mouse" versions handle devices that provide an absolute delta, such as a mouse. + // "Gamepad" versions are for devices that we choose to treat as a rate of change, such as an analog joystick + PlayerInputComponent->BindAxis("Turn Right / Left Mouse", this, &APawn::AddControllerYawInput); + PlayerInputComponent->BindAxis("Look Up / Down Mouse", this, &APawn::AddControllerPitchInput); + PlayerInputComponent->BindAxis("Turn Right / Left Gamepad", this, &AOSSCharacter::TurnAtRate); + PlayerInputComponent->BindAxis("Look Up / Down Gamepad", this, &AOSSCharacter::LookUpAtRate); +} + +void AOSSCharacter::OnPrimaryAction() +{ + // Trigger the OnItemUsed Event + OnUseItem.Broadcast(); +} + +void AOSSCharacter::BeginTouch(const ETouchIndex::Type FingerIndex, const FVector Location) +{ + if (TouchItem.bIsPressed == true) + { + return; + } + if ((FingerIndex == TouchItem.FingerIndex) && (TouchItem.bMoved == false)) + { + OnPrimaryAction(); + } + TouchItem.bIsPressed = true; + TouchItem.FingerIndex = FingerIndex; + TouchItem.Location = Location; + TouchItem.bMoved = false; +} + +void AOSSCharacter::EndTouch(const ETouchIndex::Type FingerIndex, const FVector Location) +{ + if (TouchItem.bIsPressed == false) + { + return; + } + TouchItem.bIsPressed = false; +} + +void AOSSCharacter::MoveForward(float Value) +{ + if (Value != 0.0f) + { + // add movement in that direction + AddMovementInput(GetActorForwardVector(), Value); + } +} + +void AOSSCharacter::MoveRight(float Value) +{ + if (Value != 0.0f) + { + // add movement in that direction + AddMovementInput(GetActorRightVector(), Value); + } +} + +void AOSSCharacter::TurnAtRate(float Rate) +{ + // calculate delta for this frame from the rate information + AddControllerYawInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds()); +} + +void AOSSCharacter::LookUpAtRate(float Rate) +{ + // calculate delta for this frame from the rate information + AddControllerPitchInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds()); +} + +bool AOSSCharacter::EnableTouchscreenMovement(class UInputComponent* PlayerInputComponent) +{ + if (FPlatformMisc::SupportsTouchInput() || GetDefault()->bUseMouseForTouch) + { + PlayerInputComponent->BindTouch(EInputEvent::IE_Pressed, this, &AOSSCharacter::BeginTouch); + PlayerInputComponent->BindTouch(EInputEvent::IE_Released, this, &AOSSCharacter::EndTouch); + + return true; + } + + return false; +} diff --git a/Source/OSS/OSSCharacter.h b/Source/OSS/OSSCharacter.h new file mode 100644 index 0000000..f065023 --- /dev/null +++ b/Source/OSS/OSSCharacter.h @@ -0,0 +1,103 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Character.h" +#include "OSSCharacter.generated.h" + +class UInputComponent; +class USkeletalMeshComponent; +class USceneComponent; +class UCameraComponent; +class UAnimMontage; +class USoundBase; + +// Declaration of the delegate that will be called when the Primary Action is triggered +// It is declared as dynamic so it can be accessed also in Blueprints +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnUseItem); + +UCLASS(config=Game) +class AOSSCharacter : public ACharacter +{ + GENERATED_BODY() + + /** Pawn mesh: 1st person view (arms; seen only by self) */ + UPROPERTY(VisibleDefaultsOnly, Category=Mesh) + USkeletalMeshComponent* Mesh1P; + + /** First person camera */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true")) + UCameraComponent* FirstPersonCameraComponent; + +public: + AOSSCharacter(); + +protected: + virtual void BeginPlay(); + +public: + /** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera) + float TurnRateGamepad; + + /** Delegate to whom anyone can subscribe to receive this event */ + UPROPERTY(BlueprintAssignable, Category = "Interaction") + FOnUseItem OnUseItem; +protected: + + /** Fires a projectile. */ + void OnPrimaryAction(); + + /** Handles moving forward/backward */ + void MoveForward(float Val); + + /** Handles strafing movement, left and right */ + void MoveRight(float Val); + + /** + * Called via input to turn at a given rate. + * @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate + */ + void TurnAtRate(float Rate); + + /** + * Called via input to turn look up/down at a given rate. + * @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate + */ + void LookUpAtRate(float Rate); + + struct TouchData + { + TouchData() { bIsPressed = false;Location=FVector::ZeroVector;} + bool bIsPressed; + ETouchIndex::Type FingerIndex; + FVector Location; + bool bMoved; + }; + void BeginTouch(const ETouchIndex::Type FingerIndex, const FVector Location); + void EndTouch(const ETouchIndex::Type FingerIndex, const FVector Location); + void TouchUpdate(const ETouchIndex::Type FingerIndex, const FVector Location); + TouchData TouchItem; + +protected: + // APawn interface + virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override; + // End of APawn interface + + /* + * Configures input for touchscreen devices if there is a valid touch interface for doing so + * + * @param InputComponent The input component pointer to bind controls to + * @returns true if touch controls were enabled. + */ + bool EnableTouchscreenMovement(UInputComponent* InputComponent); + +public: + /** Returns Mesh1P subobject **/ + USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; } + /** Returns FirstPersonCameraComponent subobject **/ + UCameraComponent* GetFirstPersonCameraComponent() const { return FirstPersonCameraComponent; } + +}; + diff --git a/Source/OSSEditor.Target.cs b/Source/OSSEditor.Target.cs new file mode 100644 index 0000000..7e09050 --- /dev/null +++ b/Source/OSSEditor.Target.cs @@ -0,0 +1,14 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class OSSEditorTarget : TargetRules +{ + public OSSEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V2; + ExtraModuleNames.Add("OSS"); + } +}