├── MultiplayerRacer ├── .gitignore ├── 2017-07-01_11-01-36.png ├── Config │ ├── DefaultEditor.ini │ ├── DefaultEditorPerProjectUserSettings.ini │ ├── DefaultEngine.ini │ ├── DefaultGame.ini │ └── DefaultInput.ini ├── Content │ ├── Geometry │ │ └── Meshes │ │ │ ├── 1M_Cube.uasset │ │ │ ├── 1M_Cube_Chamfer.uasset │ │ │ ├── CubeMaterial.uasset │ │ │ └── TemplateFloor.uasset │ ├── VehicleAdv │ │ ├── ArenaMesh │ │ │ ├── BumpWave.uasset │ │ │ ├── BumpWaveSmall.uasset │ │ │ ├── BumpWedge.uasset │ │ │ ├── CubeMaterial.uasset │ │ │ ├── LoopBig.uasset │ │ │ ├── LoopSmall.uasset │ │ │ ├── RampLarge.uasset │ │ │ ├── RampTwist.uasset │ │ │ ├── RoadSegment_01.uasset │ │ │ ├── StraightFull.uasset │ │ │ ├── StraightHalf.uasset │ │ │ ├── StraightQuarter.uasset │ │ │ ├── Turn_45.uasset │ │ │ ├── Turn_90.uasset │ │ │ ├── Turn_90Large.uasset │ │ │ ├── pole.uasset │ │ │ └── turn_22andhalf.uasset │ │ ├── Materials │ │ │ ├── Fixed_Template_Master.uasset │ │ │ ├── Landscape.uasset │ │ │ ├── MasterGrid.uasset │ │ │ ├── MasterSolidColor.uasset │ │ │ └── MaterialInstances │ │ │ │ ├── BlackGrid.uasset │ │ │ │ ├── LandscapeNoHole.uasset │ │ │ │ ├── RedGrid.uasset │ │ │ │ ├── SolidOrange.uasset │ │ │ │ ├── SolidRed.uasset │ │ │ │ └── Template_BaseBlue.uasset │ │ ├── PhysicsMaterials │ │ │ ├── NonSlippery.uasset │ │ │ └── Slippery.uasset │ │ ├── Sound │ │ │ ├── Engine_Loop_Cue.uasset │ │ │ ├── Engine_Speed_01_Loop.uasset │ │ │ ├── Engine_Speed_02_Loop.uasset │ │ │ ├── Engine_Speed_03_Loop.uasset │ │ │ ├── Engine_Speed_04_Loop.uasset │ │ │ ├── Engine_Speed_05_Loop.uasset │ │ │ ├── Engine_Speed_06_Loop.uasset │ │ │ └── Engine_att.uasset │ │ ├── Textures │ │ │ ├── VehicleJoystick_BackgroundL.uasset │ │ │ └── VehicleJoystick_BackgroundR.uasset │ │ └── Vehicle │ │ │ ├── LeftVirtualJoystickOnly.uasset │ │ │ ├── VehicleAnimationBlueprint.uasset │ │ │ ├── VehicleBodyCollision.uasset │ │ │ ├── VehiclePhysicsAsset.uasset │ │ │ ├── VehicleSkeleton.uasset │ │ │ ├── Vehicle_SkelMesh.uasset │ │ │ └── WheelData │ │ │ ├── Vehicle_BackTireConfig.uasset │ │ │ ├── Vehicle_BackTireType_TireConfig.uasset │ │ │ ├── Vehicle_FrontTireConfig.uasset │ │ │ └── Vehicle_FrontTireType_TireConfig.uasset │ └── VehicleAdvCPP │ │ └── Maps │ │ ├── LayerInfo │ │ ├── Desert_LayerInfo.uasset │ │ └── Track_LayerInfo.uasset │ │ └── VehicleAdvExampleMap.umap ├── MultiplayerRacer.uproject └── Source │ ├── MultiplayerRacer.Target.cs │ ├── MultiplayerRacer │ ├── MultiplayerRacer.Build.cs │ ├── MultiplayerRacer.cpp │ ├── MultiplayerRacer.h │ ├── MultiplayerRacerGameMode.cpp │ ├── MultiplayerRacerGameMode.h │ ├── MultiplayerRacerHud.cpp │ ├── MultiplayerRacerHud.h │ ├── MultiplayerRacerPawn.cpp │ ├── MultiplayerRacerPawn.h │ ├── MultiplayerRacerWheelFront.cpp │ ├── MultiplayerRacerWheelFront.h │ ├── MultiplayerRacerWheelRear.cpp │ └── MultiplayerRacerWheelRear.h │ └── MultiplayerRacerEditor.Target.cs ├── Parkour ├── .gitignore ├── Config │ ├── DefaultEditor.ini │ ├── DefaultEditorPerProjectUserSettings.ini │ ├── DefaultEngine.ini │ ├── DefaultGame.ini │ └── DefaultInput.ini ├── Content │ ├── Geometry │ │ └── Meshes │ │ │ ├── 1M_Cube.uasset │ │ │ ├── 1M_Cube_Chamfer.uasset │ │ │ ├── CubeMaterial.uasset │ │ │ └── TemplateFloor.uasset │ ├── Mannequin │ │ ├── Animations │ │ │ ├── ThirdPersonIdle.uasset │ │ │ ├── ThirdPersonJump_End.uasset │ │ │ ├── ThirdPersonJump_Loop.uasset │ │ │ ├── ThirdPersonJump_Start.uasset │ │ │ ├── ThirdPersonRun.uasset │ │ │ ├── ThirdPersonWalk.uasset │ │ │ ├── ThirdPerson_AnimBP.uasset │ │ │ ├── ThirdPerson_IdleRun_2D.uasset │ │ │ └── ThirdPerson_Jump.uasset │ │ └── Character │ │ │ ├── Materials │ │ │ ├── M_UE4Man_Body.uasset │ │ │ ├── M_UE4Man_ChestLogo.uasset │ │ │ └── MaterialLayers │ │ │ │ ├── ML_GlossyBlack_Latex_UE4.uasset │ │ │ │ ├── ML_Plastic_Shiny_Beige.uasset │ │ │ │ ├── ML_Plastic_Shiny_Beige_LOGO.uasset │ │ │ │ ├── ML_SoftMetal_UE4.uasset │ │ │ │ ├── T_ML_Aluminum01.uasset │ │ │ │ ├── T_ML_Aluminum01_N.uasset │ │ │ │ ├── T_ML_Rubber_Blue_01_D.uasset │ │ │ │ └── T_ML_Rubber_Blue_01_N.uasset │ │ │ ├── Mesh │ │ │ ├── SK_Mannequin.uasset │ │ │ ├── SK_Mannequin_PhysicsAsset.uasset │ │ │ └── UE4_Mannequin_Skeleton.uasset │ │ │ └── Textures │ │ │ ├── UE4Man_Logo_N.uasset │ │ │ ├── UE4_LOGO_CARD.uasset │ │ │ ├── UE4_Mannequin_MAT_MASKA.uasset │ │ │ └── UE4_Mannequin__normals.uasset │ ├── ThirdPerson │ │ └── Meshes │ │ │ ├── Bump_StaticMesh.uasset │ │ │ ├── CubeMaterial.uasset │ │ │ ├── LeftArm_StaticMesh.uasset │ │ │ ├── Linear_Stair_StaticMesh.uasset │ │ │ ├── RampMaterial.uasset │ │ │ ├── Ramp_StaticMesh.uasset │ │ │ └── RightArm_StaticMesh.uasset │ └── ThirdPersonCPP │ │ ├── Blueprints │ │ └── ThirdPersonCharacter.uasset │ │ ├── Maps │ │ ├── MainMenu.umap │ │ └── ThirdPersonExampleMap.umap │ │ └── UI │ │ ├── WBP_ServerItem.uasset │ │ └── WBP_ServerMenu.uasset ├── How to run multiple instances without building.md ├── Parkour.uproject └── Source │ ├── Parkour.Target.cs │ ├── Parkour │ ├── Parkour.Build.cs │ ├── Parkour.cpp │ ├── Parkour.h │ ├── ParkourCharacter.cpp │ ├── ParkourCharacter.h │ ├── ParkourGameInstance.cpp │ ├── ParkourGameInstance.h │ ├── ParkourGameMode.cpp │ ├── ParkourGameMode.h │ └── UI │ │ ├── ServerItem.cpp │ │ ├── ServerItem.h │ │ ├── ServerMenu.cpp │ │ └── ServerMenu.h │ └── ParkourEditor.Target.cs └── Useful setting for menus.png /MultiplayerRacer/.gitignore: -------------------------------------------------------------------------------- 1 | # Visual Studio 2015 user specific files 2 | .vs/ 3 | 4 | # Visual Studio 2015 database file 5 | *.VC.db 6 | 7 | # Compiled Object files 8 | *.slo 9 | *.lo 10 | *.o 11 | *.obj 12 | 13 | # Precompiled Headers 14 | *.gch 15 | *.pch 16 | 17 | # Compiled Dynamic libraries 18 | *.so 19 | *.dylib 20 | *.dll 21 | 22 | # Fortran module files 23 | *.mod 24 | 25 | # Compiled Static libraries 26 | *.lai 27 | *.la 28 | *.a 29 | *.lib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.ipa 36 | 37 | # These project files can be generated by the engine 38 | *.xcodeproj 39 | *.xcworkspace 40 | *.sln 41 | *.suo 42 | *.opensdf 43 | *.sdf 44 | *.VC.db 45 | *.VC.opendb 46 | 47 | # Precompiled Assets 48 | SourceArt/**/*.png 49 | SourceArt/**/*.tga 50 | 51 | # Binary Files 52 | Binaries/* 53 | 54 | # Builds 55 | Build/* 56 | 57 | # Whitelist PakBlacklist-.txt files 58 | !Build/*/ 59 | Build/*/** 60 | !Build/*/PakBlacklist*.txt 61 | 62 | # Don't ignore icon files in Build 63 | !Build/**/*.ico 64 | 65 | # Built data for maps 66 | *_BuiltData.uasset 67 | 68 | # Configuration files generated by the Editor 69 | Saved/* 70 | 71 | # Compiled source files for the engine to use 72 | Intermediate/* 73 | 74 | # Cache files for the editor to use 75 | DerivedDataCache/* 76 | -------------------------------------------------------------------------------- /MultiplayerRacer/2017-07-01_11-01-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/2017-07-01_11-01-36.png -------------------------------------------------------------------------------- /MultiplayerRacer/Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | [UnrealEd.SimpleMap] 2 | SimpleMapName=/Game/VehicleAdv/Maps/VehicleAdvExampleMap 3 | 4 | [EditoronlyBP] 5 | bAllowClassAndBlueprintPinMatching=true 6 | bReplaceBlueprintWithClass= true 7 | bDontLoadBlueprintOutsideEditor= true 8 | bBlueprintIsNotBlueprintType= true 9 | [/Script/HardwareTargeting.HardwareTargetingSettings] 10 | TargetedHardwareClass=0 11 | DefaultGraphicsPerformance=0 12 | 13 | -------------------------------------------------------------------------------- /MultiplayerRacer/Config/DefaultEditorPerProjectUserSettings.ini: -------------------------------------------------------------------------------- 1 | [ContentBrowser] 2 | ContentBrowserTab1.SelectedPaths=/Game/VehicleAdv -------------------------------------------------------------------------------- /MultiplayerRacer/Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GameMapsSettings] 2 | EditorStartupMap=/Game/VehicleAdvCPP/Maps/VehicleAdvExampleMap 3 | LocalMapOptions= 4 | TransitionMap= 5 | bUseSplitscreen=True 6 | TwoPlayerSplitscreenLayout=Horizontal 7 | ThreePlayerSplitscreenLayout=FavorTop 8 | GameInstanceClass=/Script/Engine.GameInstance 9 | GameDefaultMap=/Game/VehicleAdvCPP/Maps/VehicleAdvExampleMap 10 | ServerDefaultMap=/Engine/Maps/Entry 11 | GlobalDefaultGameMode=/Script/MultiplayerRacer.MultiplayerRacerGameMode 12 | GlobalDefaultServerGameMode=None 13 | 14 | [/Script/IOSRuntimeSettings.IOSRuntimeSettings] 15 | MinimumiOSVersion=IOS_8 16 | 17 | 18 | [/Script/Engine.Engine] 19 | +ActiveGameNameRedirects=(OldGameName="TP_VehicleAdv",NewGameName="/Script/MultiplayerRacer") 20 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_VehicleAdv",NewGameName="/Script/MultiplayerRacer") 21 | +ActiveClassRedirects=(OldClassName="TP_VehicleAdvWheelRear",NewClassName="MultiplayerRacerWheelRear") 22 | +ActiveClassRedirects=(OldClassName="TP_VehicleAdvWheelFront",NewClassName="MultiplayerRacerWheelFront") 23 | +ActiveClassRedirects=(OldClassName="TP_VehicleAdvPawn",NewClassName="MultiplayerRacerPawn") 24 | +ActiveClassRedirects=(OldClassName="TP_VehicleAdvHud",NewClassName="MultiplayerRacerHud") 25 | +ActiveClassRedirects=(OldClassName="TP_VehicleAdvGameMode",NewClassName="MultiplayerRacerGameMode") 26 | 27 | [/Script/HardwareTargeting.HardwareTargetingSettings] 28 | TargetedHardwareClass=Desktop 29 | AppliedTargetedHardwareClass=Desktop 30 | DefaultGraphicsPerformance=Maximum 31 | AppliedDefaultGraphicsPerformance=Maximum 32 | 33 | [/Script/Engine.GameEngine] 34 | +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") 35 | 36 | [OnlineSubsystem] 37 | DefaultPlatformService=Steam 38 | 39 | [PacketSimulationSettings] 40 | PktLoss=10 41 | PktOrder=0 42 | PktDup=0 43 | PktLag=175 44 | PktLagVariance=20 45 | 46 | [OnlineSubsystemSteam] 47 | bEnabled=true 48 | SteamDevAppId=480 49 | 50 | [/Script/OnlineSubsystemSteam.SteamNetDriver] 51 | NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection" 52 | 53 | [/Script/Engine.PhysicsSettings] 54 | DefaultGravityZ=-980.000000 55 | DefaultTerminalVelocity=4000.000000 56 | DefaultFluidFriction=0.300000 57 | SimulateScratchMemorySize=262144 58 | RagdollAggregateThreshold=4 59 | TriangleMeshTriangleMinAreaThreshold=5.000000 60 | bEnableAsyncScene=False 61 | bEnableShapeSharing=False 62 | bEnablePCM=True 63 | bEnableStabilization=False 64 | bWarnMissingLocks=True 65 | bEnable2DPhysics=False 66 | LockedAxis=Invalid 67 | DefaultDegreesOfFreedom=Full3D 68 | BounceThresholdVelocity=200.000000 69 | FrictionCombineMode=Average 70 | RestitutionCombineMode=Average 71 | MaxAngularVelocity=3600.000000 72 | MaxDepenetrationVelocity=0.000000 73 | ContactOffsetMultiplier=0.010000 74 | MinContactOffset=0.000100 75 | MaxContactOffset=1.000000 76 | bSimulateSkeletalMeshOnDedicatedServer=True 77 | DefaultShapeComplexity=CTF_UseSimpleAndComplex 78 | bDefaultHasComplexCollision=True 79 | bSuppressFaceRemapTable=False 80 | bSupportUVFromHitResults=False 81 | bDisableActiveActors=False 82 | bDisableCCD=False 83 | MaxPhysicsDeltaTime=0.033333 84 | bSubstepping=True 85 | bSubsteppingAsync=False 86 | MaxSubstepDeltaTime=0.016667 87 | MaxSubsteps=6 88 | SyncSceneSmoothingFactor=0.000000 89 | AsyncSceneSmoothingFactor=0.990000 90 | InitialAverageFrameRate=0.016667 91 | 92 | 93 | -------------------------------------------------------------------------------- /MultiplayerRacer/Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=4AB3793C46082DC353D7359B1B48BA03 3 | ProjectName=Vehicle Game Template 4 | -------------------------------------------------------------------------------- /MultiplayerRacer/Config/DefaultInput.ini: -------------------------------------------------------------------------------- 1 | [/Script/Engine.InputSettings] 2 | +AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 3 | +AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 4 | +AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 5 | +AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 6 | +AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 7 | +AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 8 | bUseMouseForTouch=False 9 | +ActionMappings=(ActionName="Handbrake",Key=SpaceBar,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 10 | +ActionMappings=(ActionName="Handbrake",Key=Gamepad_LeftShoulder,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 11 | +ActionMappings=(ActionName="SwitchCamera",Key=Tab,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 12 | +ActionMappings=(ActionName="ResetVR",Key=R,bShift=False,bCtrl=True,bAlt=False,bCmd=False) 13 | +ActionMappings=(ActionName="ResetVR",Key=MotionController_Left_Grip1,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 14 | +ActionMappings=(ActionName="SwitchCamera",Key=Gamepad_Special_Left,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 15 | +AxisMappings=(AxisName="MoveForward",Key=W,Scale=1.000000) 16 | +AxisMappings=(AxisName="MoveForward",Key=S,Scale=-1.000000) 17 | +AxisMappings=(AxisName="MoveForward",Key=Up,Scale=1.000000) 18 | +AxisMappings=(AxisName="MoveForward",Key=Down,Scale=-1.000000) 19 | +AxisMappings=(AxisName="MoveForward",Key=Gamepad_FaceButton_Bottom,Scale=1.000000) 20 | +AxisMappings=(AxisName="MoveRight",Key=A,Scale=-1.000000) 21 | +AxisMappings=(AxisName="MoveRight",Key=D,Scale=1.000000) 22 | +AxisMappings=(AxisName="MoveRight",Key=Left,Scale=-1.000000) 23 | +AxisMappings=(AxisName="MoveRight",Key=Right,Scale=1.000000) 24 | +AxisMappings=(AxisName="MoveRight",Key=Gamepad_LeftX,Scale=1.000000) 25 | +AxisMappings=(AxisName="LookUp",Key=MouseY,Scale=1.000000) 26 | +AxisMappings=(AxisName="LookRight",Key=MouseX,Scale=1.000000) 27 | +AxisMappings=(AxisName="MoveForward",Key=Gamepad_RightTriggerAxis,Scale=1.000000) 28 | +AxisMappings=(AxisName="MoveForward",Key=Gamepad_LeftTriggerAxis,Scale=-1.000000) 29 | +AxisMappings=(AxisName="LookUp",Key=Gamepad_RightY,Scale=-1.000000) 30 | +AxisMappings=(AxisName="LookRight",Key=Gamepad_RightX,Scale=1.000000) 31 | +AxisMappings=(AxisName="MoveForward",Key=Gamepad_LeftY,Scale=1.000000) 32 | +AxisMappings=(AxisName="MoveForward",Key=GenericUSBController_Axis2,Scale=-2.000000) 33 | +AxisMappings=(AxisName="MoveForward",Key=GenericUSBController_Axis3,Scale=1.000000) 34 | +AxisMappings=(AxisName="MoveRight",Key=GenericUSBController_Axis1,Scale=3.000000) 35 | DefaultTouchInterface=/Game/VehicleAdv/Vehicle/LeftVirtualJoystickOnly.LeftVirtualJoystickOnly 36 | ConsoleKey=None 37 | +ConsoleKeys=Tilde 38 | 39 | [/Script/RawInput.RawInputSettings] 40 | +DeviceConfigurations=(VendorID="0x046D",ProductID="0xC262",AxisProperties=((bEnabled=False),(Key=GenericUSBController_Axis1,Offset=-0.500000),(bEnabled=False),(Key=GenericUSBController_Axis2,bInverted=True,Offset=1.000000),(Key=GenericUSBController_Axis3,bInverted=True,Offset=1.000000)),ButtonProperties=((Key=GenericUSBController_Button1),(Key=GenericUSBController_Button2),(Key=GenericUSBController_Button3),(Key=GenericUSBController_Button4),(Key=GenericUSBController_Button5),(Key=GenericUSBController_Button6),(Key=GenericUSBController_Button7),(Key=GenericUSBController_Button8),(Key=GenericUSBController_Button9),(Key=GenericUSBController_Button10),(Key=GenericUSBController_Button11),(Key=GenericUSBController_Button12))) 41 | 42 | 43 | -------------------------------------------------------------------------------- /MultiplayerRacer/Content/Geometry/Meshes/1M_Cube.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/Geometry/Meshes/1M_Cube.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/Geometry/Meshes/1M_Cube_Chamfer.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/Geometry/Meshes/1M_Cube_Chamfer.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/Geometry/Meshes/CubeMaterial.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/Geometry/Meshes/CubeMaterial.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/Geometry/Meshes/TemplateFloor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/Geometry/Meshes/TemplateFloor.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWave.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWave.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWaveSmall.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWaveSmall.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWedge.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/BumpWedge.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/CubeMaterial.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/CubeMaterial.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/LoopBig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/LoopBig.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/LoopSmall.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/LoopSmall.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RampLarge.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RampLarge.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RampTwist.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RampTwist.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RoadSegment_01.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/RoadSegment_01.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightFull.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightFull.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightHalf.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightHalf.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightQuarter.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/StraightQuarter.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_45.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_45.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_90.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_90.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_90Large.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/Turn_90Large.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/pole.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/pole.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/ArenaMesh/turn_22andhalf.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/ArenaMesh/turn_22andhalf.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/Fixed_Template_Master.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/Fixed_Template_Master.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/Landscape.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/Landscape.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MasterGrid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MasterGrid.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MasterSolidColor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MasterSolidColor.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/BlackGrid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/BlackGrid.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/LandscapeNoHole.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/LandscapeNoHole.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/RedGrid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/RedGrid.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/SolidOrange.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/SolidOrange.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/SolidRed.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/SolidRed.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/Template_BaseBlue.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Materials/MaterialInstances/Template_BaseBlue.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/PhysicsMaterials/NonSlippery.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/PhysicsMaterials/NonSlippery.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/PhysicsMaterials/Slippery.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/PhysicsMaterials/Slippery.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Loop_Cue.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Loop_Cue.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_01_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_01_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_02_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_02_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_03_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_03_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_04_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_04_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_05_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_05_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_06_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_Speed_06_Loop.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Sound/Engine_att.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Sound/Engine_att.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Textures/VehicleJoystick_BackgroundL.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Textures/VehicleJoystick_BackgroundL.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Textures/VehicleJoystick_BackgroundR.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Textures/VehicleJoystick_BackgroundR.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/LeftVirtualJoystickOnly.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/LeftVirtualJoystickOnly.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleAnimationBlueprint.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleAnimationBlueprint.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleBodyCollision.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleBodyCollision.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/VehiclePhysicsAsset.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/VehiclePhysicsAsset.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleSkeleton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/VehicleSkeleton.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/Vehicle_SkelMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/Vehicle_SkelMesh.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_BackTireConfig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_BackTireConfig.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_BackTireType_TireConfig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_BackTireType_TireConfig.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_FrontTireConfig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_FrontTireConfig.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_FrontTireType_TireConfig.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdv/Vehicle/WheelData/Vehicle_FrontTireType_TireConfig.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdvCPP/Maps/LayerInfo/Desert_LayerInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdvCPP/Maps/LayerInfo/Desert_LayerInfo.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdvCPP/Maps/LayerInfo/Track_LayerInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdvCPP/Maps/LayerInfo/Track_LayerInfo.uasset -------------------------------------------------------------------------------- /MultiplayerRacer/Content/VehicleAdvCPP/Maps/VehicleAdvExampleMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/MultiplayerRacer/Content/VehicleAdvCPP/Maps/VehicleAdvExampleMap.umap -------------------------------------------------------------------------------- /MultiplayerRacer/MultiplayerRacer.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.16", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "MultiplayerRacer", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default" 11 | } 12 | ], 13 | "Plugins": [ 14 | { 15 | "Name": "PhysXVehicles", 16 | "Enabled": true 17 | }, 18 | { 19 | "Name": "RawInput", 20 | "Enabled": true 21 | }, 22 | { 23 | "Name": "OnlineSubsystemSteam", 24 | "Enabled": true 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class MultiplayerRacerTarget : TargetRules 7 | { 8 | public MultiplayerRacerTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | ExtraModuleNames.Add("MultiplayerRacer"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacer.Build.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class MultiplayerRacer : ModuleRules 6 | { 7 | public MultiplayerRacer(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "PhysXVehicles", "HeadMountedDisplay" }); 12 | 13 | Definitions.Add("HMD_MODULE_INCLUDED=1"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacer.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacer.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, MultiplayerRacer, "MultiplayerRacer" ); 7 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacer.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerGameMode.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacerGameMode.h" 4 | #include "MultiplayerRacerPawn.h" 5 | #include "MultiplayerRacerHud.h" 6 | 7 | AMultiplayerRacerGameMode::AMultiplayerRacerGameMode() 8 | { 9 | DefaultPawnClass = AMultiplayerRacerPawn::StaticClass(); 10 | HUDClass = AMultiplayerRacerHud::StaticClass(); 11 | } 12 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerGameMode.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/GameModeBase.h" 7 | #include "MultiplayerRacerGameMode.generated.h" 8 | 9 | UCLASS(MinimalAPI) 10 | class AMultiplayerRacerGameMode : public AGameModeBase 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | AMultiplayerRacerGameMode(); 16 | }; 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerHud.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacerHud.h" 4 | #include "MultiplayerRacerPawn.h" 5 | #include "Engine/Canvas.h" 6 | #include "Engine/Font.h" 7 | #include "CanvasItem.h" 8 | #include "UObject/ConstructorHelpers.h" 9 | #include "Engine/Engine.h" 10 | 11 | // Needed for VR Headset 12 | #include "Engine.h" 13 | #if HMD_MODULE_INCLUDED 14 | #include "IHeadMountedDisplay.h" 15 | #endif // HMD_MODULE_INCLUDED 16 | #define LOCTEXT_NAMESPACE "VehicleHUD" 17 | 18 | AMultiplayerRacerHud::AMultiplayerRacerHud() 19 | { 20 | static ConstructorHelpers::FObjectFinder Font(TEXT("/Engine/EngineFonts/RobotoDistanceField")); 21 | HUDFont = Font.Object; 22 | } 23 | 24 | void AMultiplayerRacerHud::DrawHUD() 25 | { 26 | Super::DrawHUD(); 27 | 28 | // Calculate ratio from 720p 29 | const float HUDXRatio = Canvas->SizeX / 1280.f; 30 | const float HUDYRatio = Canvas->SizeY / 720.f; 31 | 32 | bool bHMDDeviceActive = false; 33 | 34 | // We dont want the onscreen hud when using a HMD device 35 | #if HMD_MODULE_INCLUDED 36 | if (GEngine->HMDDevice.IsValid() == true ) 37 | { 38 | bHMDDeviceActive = GEngine->HMDDevice->IsStereoEnabled(); 39 | } 40 | #endif // HMD_MODULE_INCLUDED 41 | if( bHMDDeviceActive == false ) 42 | { 43 | // Get our vehicle so we can check if we are in car. If we are we don't want onscreen HUD 44 | AMultiplayerRacerPawn* Vehicle = Cast(GetOwningPawn()); 45 | if ((Vehicle != nullptr) && (Vehicle->bInCarCameraActive == false)) 46 | { 47 | FVector2D ScaleVec(HUDYRatio * 1.4f, HUDYRatio * 1.4f); 48 | 49 | // Speed 50 | FCanvasTextItem SpeedTextItem(FVector2D(HUDXRatio * 805.f, HUDYRatio * 455), Vehicle->SpeedDisplayString, HUDFont, FLinearColor::White); 51 | SpeedTextItem.Scale = ScaleVec; 52 | Canvas->DrawItem(SpeedTextItem); 53 | 54 | // Gear 55 | FCanvasTextItem GearTextItem(FVector2D(HUDXRatio * 805.f, HUDYRatio * 500.f), Vehicle->GearDisplayString, HUDFont, Vehicle->bInReverseGear == false ? Vehicle->GearDisplayColor : Vehicle->GearDisplayReverseColor); 56 | GearTextItem.Scale = ScaleVec; 57 | Canvas->DrawItem(GearTextItem); 58 | } 59 | } 60 | } 61 | 62 | #undef LOCTEXT_NAMESPACE 63 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerHud.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/HUD.h" 7 | #include "MultiplayerRacerHud.generated.h" 8 | 9 | UCLASS(config = Game) 10 | class AMultiplayerRacerHud : public AHUD 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | AMultiplayerRacerHud(); 16 | 17 | /** Font used to render the vehicle info */ 18 | UPROPERTY() 19 | UFont* HUDFont; 20 | 21 | // Begin AHUD interface 22 | virtual void DrawHUD() override; 23 | // End AHUD interface 24 | 25 | }; 26 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerPawn.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacerPawn.h" 4 | #include "MultiplayerRacerWheelFront.h" 5 | #include "MultiplayerRacerWheelRear.h" 6 | #include "MultiplayerRacerHud.h" 7 | #include "Components/SkeletalMeshComponent.h" 8 | #include "GameFramework/SpringArmComponent.h" 9 | #include "Camera/CameraComponent.h" 10 | #include "Components/InputComponent.h" 11 | #include "Components/TextRenderComponent.h" 12 | #include "Components/AudioComponent.h" 13 | #include "Sound/SoundCue.h" 14 | #include "PhysicalMaterials/PhysicalMaterial.h" 15 | #include "WheeledVehicleMovementComponent4W.h" 16 | #include "Engine/SkeletalMesh.h" 17 | #include "Engine/Engine.h" 18 | #include "GameFramework/Controller.h" 19 | #include "UObject/ConstructorHelpers.h" 20 | 21 | // Needed for VR Headset 22 | #if HMD_MODULE_INCLUDED 23 | #include "IHeadMountedDisplay.h" 24 | #endif // HMD_MODULE_INCLUDED 25 | 26 | const FName AMultiplayerRacerPawn::LookUpBinding("LookUp"); 27 | const FName AMultiplayerRacerPawn::LookRightBinding("LookRight"); 28 | const FName AMultiplayerRacerPawn::EngineAudioRPM("RPM"); 29 | 30 | #define LOCTEXT_NAMESPACE "VehiclePawn" 31 | 32 | AMultiplayerRacerPawn::AMultiplayerRacerPawn() 33 | { 34 | // Car mesh 35 | static ConstructorHelpers::FObjectFinder CarMesh(TEXT("/Game/VehicleAdv/Vehicle/Vehicle_SkelMesh.Vehicle_SkelMesh")); 36 | GetMesh()->SetSkeletalMesh(CarMesh.Object); 37 | 38 | static ConstructorHelpers::FClassFinder AnimBPClass(TEXT("/Game/VehicleAdv/Vehicle/VehicleAnimationBlueprint")); 39 | GetMesh()->SetAnimationMode(EAnimationMode::AnimationBlueprint); 40 | GetMesh()->SetAnimInstanceClass(AnimBPClass.Class); 41 | 42 | // Setup friction materials 43 | static ConstructorHelpers::FObjectFinder SlipperyMat(TEXT("/Game/VehicleAdv/PhysicsMaterials/Slippery.Slippery")); 44 | SlipperyMaterial = SlipperyMat.Object; 45 | 46 | static ConstructorHelpers::FObjectFinder NonSlipperyMat(TEXT("/Game/VehicleAdv/PhysicsMaterials/NonSlippery.NonSlippery")); 47 | NonSlipperyMaterial = NonSlipperyMat.Object; 48 | 49 | UWheeledVehicleMovementComponent4W* Vehicle4W = CastChecked(GetVehicleMovement()); 50 | 51 | check(Vehicle4W->WheelSetups.Num() == 4); 52 | 53 | // Wheels/Tyres 54 | // Setup the wheels 55 | Vehicle4W->WheelSetups[0].WheelClass = UMultiplayerRacerWheelFront::StaticClass(); 56 | Vehicle4W->WheelSetups[0].BoneName = FName("PhysWheel_FL"); 57 | Vehicle4W->WheelSetups[0].AdditionalOffset = FVector(0.f, -8.f, 0.f); 58 | 59 | Vehicle4W->WheelSetups[1].WheelClass = UMultiplayerRacerWheelFront::StaticClass(); 60 | Vehicle4W->WheelSetups[1].BoneName = FName("PhysWheel_FR"); 61 | Vehicle4W->WheelSetups[1].AdditionalOffset = FVector(0.f, 8.f, 0.f); 62 | 63 | Vehicle4W->WheelSetups[2].WheelClass = UMultiplayerRacerWheelRear::StaticClass(); 64 | Vehicle4W->WheelSetups[2].BoneName = FName("PhysWheel_BL"); 65 | Vehicle4W->WheelSetups[2].AdditionalOffset = FVector(0.f, -8.f, 0.f); 66 | 67 | Vehicle4W->WheelSetups[3].WheelClass = UMultiplayerRacerWheelRear::StaticClass(); 68 | Vehicle4W->WheelSetups[3].BoneName = FName("PhysWheel_BR"); 69 | Vehicle4W->WheelSetups[3].AdditionalOffset = FVector(0.f, 8.f, 0.f); 70 | 71 | // Adjust the tire loading 72 | Vehicle4W->MinNormalizedTireLoad = 0.0f; 73 | Vehicle4W->MinNormalizedTireLoadFiltered = 0.2f; 74 | Vehicle4W->MaxNormalizedTireLoad = 2.0f; 75 | Vehicle4W->MaxNormalizedTireLoadFiltered = 2.0f; 76 | 77 | // Engine 78 | // Torque setup 79 | Vehicle4W->MaxEngineRPM = 5700.0f; 80 | Vehicle4W->EngineSetup.TorqueCurve.GetRichCurve()->Reset(); 81 | Vehicle4W->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(0.0f, 400.0f); 82 | Vehicle4W->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(1890.0f, 500.0f); 83 | Vehicle4W->EngineSetup.TorqueCurve.GetRichCurve()->AddKey(5730.0f, 400.0f); 84 | 85 | // Adjust the steering 86 | Vehicle4W->SteeringCurve.GetRichCurve()->Reset(); 87 | Vehicle4W->SteeringCurve.GetRichCurve()->AddKey(0.0f, 1.0f); 88 | Vehicle4W->SteeringCurve.GetRichCurve()->AddKey(40.0f, 0.7f); 89 | Vehicle4W->SteeringCurve.GetRichCurve()->AddKey(120.0f, 0.6f); 90 | 91 | // Transmission 92 | // We want 4wd 93 | Vehicle4W->DifferentialSetup.DifferentialType = EVehicleDifferential4W::LimitedSlip_4W; 94 | 95 | // Drive the front wheels a little more than the rear 96 | Vehicle4W->DifferentialSetup.FrontRearSplit = 0.65; 97 | 98 | // Automatic gearbox 99 | Vehicle4W->TransmissionSetup.bUseGearAutoBox = true; 100 | Vehicle4W->TransmissionSetup.GearSwitchTime = 0.15f; 101 | Vehicle4W->TransmissionSetup.GearAutoBoxLatency = 1.0f; 102 | 103 | // Physics settings 104 | // Adjust the center of mass - the buggy is quite low 105 | UPrimitiveComponent* UpdatedPrimitive = Cast(Vehicle4W->UpdatedComponent); 106 | if (UpdatedPrimitive) 107 | { 108 | UpdatedPrimitive->BodyInstance.COMNudge = FVector(8.0f, 0.0f, 0.0f); 109 | } 110 | 111 | // Set the inertia scale. This controls how the mass of the vehicle is distributed. 112 | Vehicle4W->InertiaTensorScale = FVector(1.0f, 1.333f, 1.2f); 113 | 114 | // Create a spring arm component for our chase camera 115 | SpringArm = CreateDefaultSubobject(TEXT("SpringArm")); 116 | SpringArm->SetRelativeLocation(FVector(0.0f, 0.0f, 34.0f)); 117 | SpringArm->SetWorldRotation(FRotator(-20.0f, 0.0f, 0.0f)); 118 | SpringArm->SetupAttachment(RootComponent); 119 | SpringArm->TargetArmLength = 125.0f; 120 | SpringArm->bEnableCameraLag = false; 121 | SpringArm->bEnableCameraRotationLag = false; 122 | SpringArm->bInheritPitch = true; 123 | SpringArm->bInheritYaw = true; 124 | SpringArm->bInheritRoll = true; 125 | 126 | // Create the chase camera component 127 | Camera = CreateDefaultSubobject(TEXT("ChaseCamera")); 128 | Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName); 129 | Camera->SetRelativeLocation(FVector(-125.0, 0.0f, 0.0f)); 130 | Camera->SetRelativeRotation(FRotator(10.0f, 0.0f, 0.0f)); 131 | Camera->bUsePawnControlRotation = false; 132 | Camera->FieldOfView = 90.f; 133 | 134 | // Create In-Car camera component 135 | InternalCameraOrigin = FVector(-34.0f, -10.0f, 50.0f); 136 | InternalCameraBase = CreateDefaultSubobject(TEXT("InternalCameraBase")); 137 | InternalCameraBase->SetRelativeLocation(InternalCameraOrigin); 138 | InternalCameraBase->SetupAttachment(GetMesh()); 139 | 140 | InternalCamera = CreateDefaultSubobject(TEXT("InternalCamera")); 141 | InternalCamera->bUsePawnControlRotation = false; 142 | InternalCamera->FieldOfView = 90.f; 143 | InternalCamera->SetupAttachment(InternalCameraBase); 144 | 145 | // In car HUD 146 | // Create text render component for in car speed display 147 | InCarSpeed = CreateDefaultSubobject(TEXT("IncarSpeed")); 148 | InCarSpeed->SetRelativeScale3D(FVector(0.1f, 0.1f, 0.1f)); 149 | InCarSpeed->SetRelativeLocation(FVector(35.0f, -6.0f, 20.0f)); 150 | InCarSpeed->SetRelativeRotation(FRotator(0.0f, 180.0f, 0.0f)); 151 | InCarSpeed->SetupAttachment(GetMesh()); 152 | 153 | // Create text render component for in car gear display 154 | InCarGear = CreateDefaultSubobject(TEXT("IncarGear")); 155 | InCarGear->SetRelativeScale3D(FVector(0.1f, 0.1f, 0.1f)); 156 | InCarGear->SetRelativeLocation(FVector(35.0f, 5.0f, 20.0f)); 157 | InCarGear->SetRelativeRotation(FRotator(0.0f, 180.0f, 0.0f)); 158 | InCarGear->SetupAttachment(GetMesh()); 159 | 160 | // Setup the audio component and allocate it a sound cue 161 | static ConstructorHelpers::FObjectFinder SoundCue(TEXT("/Game/VehicleAdv/Sound/Engine_Loop_Cue.Engine_Loop_Cue")); 162 | EngineSoundComponent = CreateDefaultSubobject(TEXT("EngineSound")); 163 | EngineSoundComponent->SetSound(SoundCue.Object); 164 | EngineSoundComponent->SetupAttachment(GetMesh()); 165 | 166 | // Colors for the in-car gear display. One for normal one for reverse 167 | GearDisplayReverseColor = FColor(255, 0, 0, 255); 168 | GearDisplayColor = FColor(255, 255, 255, 255); 169 | 170 | bIsLowFriction = false; 171 | bInReverseGear = false; 172 | } 173 | 174 | void AMultiplayerRacerPawn::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) 175 | { 176 | Super::SetupPlayerInputComponent(PlayerInputComponent); 177 | 178 | // set up gameplay key bindings 179 | check(PlayerInputComponent); 180 | 181 | PlayerInputComponent->BindAxis("MoveForward", this, &AMultiplayerRacerPawn::MoveForward); 182 | PlayerInputComponent->BindAxis("MoveRight", this, &AMultiplayerRacerPawn::MoveRight); 183 | PlayerInputComponent->BindAxis(LookUpBinding); 184 | PlayerInputComponent->BindAxis(LookRightBinding); 185 | 186 | PlayerInputComponent->BindAction("Handbrake", IE_Pressed, this, &AMultiplayerRacerPawn::OnHandbrakePressed); 187 | PlayerInputComponent->BindAction("Handbrake", IE_Released, this, &AMultiplayerRacerPawn::OnHandbrakeReleased); 188 | PlayerInputComponent->BindAction("SwitchCamera", IE_Pressed, this, &AMultiplayerRacerPawn::OnToggleCamera); 189 | 190 | PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &AMultiplayerRacerPawn::OnResetVR); 191 | } 192 | 193 | void AMultiplayerRacerPawn::MoveForward(float Val) 194 | { 195 | GetVehicleMovementComponent()->SetThrottleInput(Val); 196 | 197 | } 198 | 199 | void AMultiplayerRacerPawn::MoveRight(float Val) 200 | { 201 | GetVehicleMovementComponent()->SetSteeringInput(Val); 202 | } 203 | 204 | void AMultiplayerRacerPawn::OnHandbrakePressed() 205 | { 206 | GetVehicleMovementComponent()->SetHandbrakeInput(true); 207 | } 208 | 209 | void AMultiplayerRacerPawn::OnHandbrakeReleased() 210 | { 211 | GetVehicleMovementComponent()->SetHandbrakeInput(false); 212 | } 213 | 214 | void AMultiplayerRacerPawn::OnToggleCamera() 215 | { 216 | EnableIncarView(!bInCarCameraActive); 217 | } 218 | 219 | void AMultiplayerRacerPawn::EnableIncarView(const bool bState) 220 | { 221 | if (bState != bInCarCameraActive) 222 | { 223 | bInCarCameraActive = bState; 224 | 225 | if (bState == true) 226 | { 227 | OnResetVR(); 228 | Camera->Deactivate(); 229 | InternalCamera->Activate(); 230 | } 231 | else 232 | { 233 | InternalCamera->Deactivate(); 234 | Camera->Activate(); 235 | } 236 | 237 | InCarSpeed->SetVisibility(bInCarCameraActive); 238 | InCarGear->SetVisibility(bInCarCameraActive); 239 | } 240 | } 241 | 242 | void AMultiplayerRacerPawn::Tick(float Delta) 243 | { 244 | Super::Tick(Delta); 245 | 246 | // Setup the flag to say we are in reverse gear 247 | bInReverseGear = GetVehicleMovement()->GetCurrentGear() < 0; 248 | 249 | // Update phsyics material 250 | UpdatePhysicsMaterial(); 251 | 252 | // Update the strings used in the hud (incar and onscreen) 253 | UpdateHUDStrings(); 254 | 255 | // Set the string in the incar hud 256 | SetupInCarHUD(); 257 | 258 | bool bHMDActive = false; 259 | #if HMD_MODULE_INCLUDED 260 | if ((GEngine->HMDDevice.IsValid() == true ) && ( (GEngine->HMDDevice->IsHeadTrackingAllowed() == true) || (GEngine->IsStereoscopic3D() == true))) 261 | { 262 | bHMDActive = true; 263 | } 264 | #endif // HMD_MODULE_INCLUDED 265 | if( bHMDActive == false ) 266 | { 267 | if ( (InputComponent) && (bInCarCameraActive == true )) 268 | { 269 | FRotator HeadRotation = InternalCamera->RelativeRotation; 270 | HeadRotation.Pitch += InputComponent->GetAxisValue(LookUpBinding); 271 | HeadRotation.Yaw += InputComponent->GetAxisValue(LookRightBinding); 272 | InternalCamera->RelativeRotation = HeadRotation; 273 | } 274 | } 275 | 276 | // Pass the engine RPM to the sound component 277 | float RPMToAudioScale = 2500.0f / GetVehicleMovement()->GetEngineMaxRotationSpeed(); 278 | EngineSoundComponent->SetFloatParameter(EngineAudioRPM, GetVehicleMovement()->GetEngineRotationSpeed()*RPMToAudioScale); 279 | } 280 | 281 | void AMultiplayerRacerPawn::BeginPlay() 282 | { 283 | Super::BeginPlay(); 284 | 285 | bool bWantInCar = false; 286 | // First disable both speed/gear displays 287 | bInCarCameraActive = false; 288 | InCarSpeed->SetVisibility(bInCarCameraActive); 289 | InCarGear->SetVisibility(bInCarCameraActive); 290 | 291 | // Enable in car view if HMD is attached 292 | #if HMD_MODULE_INCLUDED 293 | bWantInCar = UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled(); 294 | #endif // HMD_MODULE_INCLUDED 295 | 296 | EnableIncarView(bWantInCar); 297 | // Start an engine sound playing 298 | EngineSoundComponent->Play(); 299 | } 300 | 301 | void AMultiplayerRacerPawn::OnResetVR() 302 | { 303 | #if HMD_MODULE_INCLUDED 304 | if (GEngine->HMDDevice.IsValid()) 305 | { 306 | GEngine->HMDDevice->ResetOrientationAndPosition(); 307 | InternalCamera->SetRelativeLocation(InternalCameraOrigin); 308 | GetController()->SetControlRotation(FRotator()); 309 | } 310 | #endif // HMD_MODULE_INCLUDED 311 | } 312 | 313 | void AMultiplayerRacerPawn::UpdateHUDStrings() 314 | { 315 | float KPH = FMath::Abs(GetVehicleMovement()->GetForwardSpeed()) * 0.036f; 316 | int32 KPH_int = FMath::FloorToInt(KPH); 317 | int32 Gear = GetVehicleMovement()->GetCurrentGear(); 318 | 319 | // Using FText because this is display text that should be localizable 320 | SpeedDisplayString = FText::Format(LOCTEXT("SpeedFormat", "{0} km/h"), FText::AsNumber(KPH_int)); 321 | 322 | 323 | if (bInReverseGear == true) 324 | { 325 | GearDisplayString = FText(LOCTEXT("ReverseGear", "R")); 326 | } 327 | else 328 | { 329 | GearDisplayString = (Gear == 0) ? LOCTEXT("N", "N") : FText::AsNumber(Gear); 330 | } 331 | 332 | } 333 | 334 | void AMultiplayerRacerPawn::SetupInCarHUD() 335 | { 336 | APlayerController* PlayerController = Cast(GetController()); 337 | if ((PlayerController != nullptr) && (InCarSpeed != nullptr) && (InCarGear != nullptr)) 338 | { 339 | // Setup the text render component strings 340 | InCarSpeed->SetText(SpeedDisplayString); 341 | InCarGear->SetText(GearDisplayString); 342 | 343 | if (bInReverseGear == false) 344 | { 345 | InCarGear->SetTextRenderColor(GearDisplayColor); 346 | } 347 | else 348 | { 349 | InCarGear->SetTextRenderColor(GearDisplayReverseColor); 350 | } 351 | } 352 | } 353 | 354 | void AMultiplayerRacerPawn::UpdatePhysicsMaterial() 355 | { 356 | if (GetActorUpVector().Z < 0) 357 | { 358 | if (bIsLowFriction == true) 359 | { 360 | GetMesh()->SetPhysMaterialOverride(NonSlipperyMaterial); 361 | bIsLowFriction = false; 362 | } 363 | else 364 | { 365 | GetMesh()->SetPhysMaterialOverride(SlipperyMaterial); 366 | bIsLowFriction = true; 367 | } 368 | } 369 | } 370 | 371 | #undef LOCTEXT_NAMESPACE 372 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerPawn.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "WheeledVehicle.h" 7 | #include "MultiplayerRacerPawn.generated.h" 8 | 9 | class UPhysicalMaterial; 10 | class UCameraComponent; 11 | class USpringArmComponent; 12 | class UTextRenderComponent; 13 | class UInputComponent; 14 | class UAudioComponent; 15 | 16 | UCLASS(config=Game) 17 | class AMultiplayerRacerPawn : public AWheeledVehicle 18 | { 19 | GENERATED_BODY() 20 | 21 | /** Spring arm that will offset the camera */ 22 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 23 | USpringArmComponent* SpringArm; 24 | 25 | /** Camera component that will be our viewpoint */ 26 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 27 | UCameraComponent* Camera; 28 | 29 | /** SCene component for the In-Car view origin */ 30 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 31 | class USceneComponent* InternalCameraBase; 32 | 33 | /** Camera component for the In-Car view */ 34 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 35 | UCameraComponent* InternalCamera; 36 | 37 | /** Text component for the In-Car speed */ 38 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 39 | UTextRenderComponent* InCarSpeed; 40 | 41 | /** Text component for the In-Car gear */ 42 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 43 | UTextRenderComponent* InCarGear; 44 | 45 | /** Audio component for the engine sound */ 46 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) 47 | UAudioComponent* EngineSoundComponent; 48 | 49 | public: 50 | AMultiplayerRacerPawn(); 51 | 52 | /** The current speed as a string eg 10 km/h */ 53 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly) 54 | FText SpeedDisplayString; 55 | 56 | /** The current gear as a string (R,N, 1,2 etc) */ 57 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly) 58 | FText GearDisplayString; 59 | 60 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly) 61 | /** The color of the incar gear text in forward gears */ 62 | FColor GearDisplayColor; 63 | 64 | /** The color of the incar gear text when in reverse */ 65 | UPROPERTY(Category = Display, VisibleDefaultsOnly, BlueprintReadOnly) 66 | FColor GearDisplayReverseColor; 67 | 68 | /** Are we using incar camera */ 69 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly) 70 | bool bInCarCameraActive; 71 | 72 | /** Are we in reverse gear */ 73 | UPROPERTY(Category = Camera, VisibleDefaultsOnly, BlueprintReadOnly) 74 | bool bInReverseGear; 75 | 76 | /** Initial offset of incar camera */ 77 | FVector InternalCameraOrigin; 78 | 79 | // Begin Pawn interface 80 | virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override; 81 | // End Pawn interface 82 | 83 | // Begin Actor interface 84 | virtual void Tick(float Delta) override; 85 | protected: 86 | virtual void BeginPlay() override; 87 | 88 | public: 89 | // End Actor interface 90 | 91 | /** Handle pressing forwards */ 92 | void MoveForward(float Val); 93 | 94 | /** Setup the strings used on the hud */ 95 | void SetupInCarHUD(); 96 | 97 | /** Update the physics material used by the vehicle mesh */ 98 | void UpdatePhysicsMaterial(); 99 | 100 | /** Handle pressing right */ 101 | void MoveRight(float Val); 102 | /** Handle handbrake pressed */ 103 | void OnHandbrakePressed(); 104 | /** Handle handbrake released */ 105 | void OnHandbrakeReleased(); 106 | /** Switch between cameras */ 107 | void OnToggleCamera(); 108 | /** Handle reset VR device */ 109 | void OnResetVR(); 110 | 111 | static const FName LookUpBinding; 112 | static const FName LookRightBinding; 113 | static const FName EngineAudioRPM; 114 | 115 | private: 116 | /** 117 | * Activate In-Car camera. Enable camera and sets visibility of incar hud display 118 | * 119 | * @param bState true will enable in car view and set visibility of various 120 | */ 121 | void EnableIncarView( const bool bState ); 122 | 123 | /** Update the gear and speed strings */ 124 | void UpdateHUDStrings(); 125 | 126 | /* Are we on a 'slippery' surface */ 127 | bool bIsLowFriction; 128 | /** Slippery Material instance */ 129 | UPhysicalMaterial* SlipperyMaterial; 130 | /** Non Slippery Material instance */ 131 | UPhysicalMaterial* NonSlipperyMaterial; 132 | 133 | 134 | public: 135 | /** Returns SpringArm subobject **/ 136 | FORCEINLINE USpringArmComponent* GetSpringArm() const { return SpringArm; } 137 | /** Returns Camera subobject **/ 138 | FORCEINLINE UCameraComponent* GetCamera() const { return Camera; } 139 | /** Returns InternalCamera subobject **/ 140 | FORCEINLINE UCameraComponent* GetInternalCamera() const { return InternalCamera; } 141 | /** Returns InCarSpeed subobject **/ 142 | FORCEINLINE UTextRenderComponent* GetInCarSpeed() const { return InCarSpeed; } 143 | /** Returns InCarGear subobject **/ 144 | FORCEINLINE UTextRenderComponent* GetInCarGear() const { return InCarGear; } 145 | /** Returns EngineSoundComponent subobject **/ 146 | FORCEINLINE UAudioComponent* GetEngineSoundComponent() const { return EngineSoundComponent; } 147 | }; 148 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerWheelFront.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacerWheelFront.h" 4 | #include "TireConfig.h" 5 | #include "UObject/ConstructorHelpers.h" 6 | 7 | UMultiplayerRacerWheelFront::UMultiplayerRacerWheelFront() 8 | { 9 | ShapeRadius = 18.f; 10 | ShapeWidth = 15.0f; 11 | bAffectedByHandbrake = false; 12 | SteerAngle = 40.f; 13 | 14 | // Setup suspension forces 15 | SuspensionForceOffset = -4.0f; 16 | SuspensionMaxRaise = 8.0f; 17 | SuspensionMaxDrop = 12.0f; 18 | SuspensionNaturalFrequency = 9.0f; 19 | SuspensionDampingRatio = 1.05f; 20 | 21 | // Find the tire object and set the data for it 22 | static ConstructorHelpers::FObjectFinder TireData(TEXT("/Game/VehicleAdv/Vehicle/WheelData/Vehicle_FrontTireConfig.Vehicle_FrontTireConfig")); 23 | TireConfig = TireData.Object; 24 | } 25 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerWheelFront.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "VehicleWheel.h" 7 | #include "MultiplayerRacerWheelFront.generated.h" 8 | 9 | UCLASS() 10 | class UMultiplayerRacerWheelFront : public UVehicleWheel 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UMultiplayerRacerWheelFront(); 16 | }; 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerWheelRear.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "MultiplayerRacerWheelRear.h" 4 | #include "TireConfig.h" 5 | #include "UObject/ConstructorHelpers.h" 6 | 7 | UMultiplayerRacerWheelRear::UMultiplayerRacerWheelRear() 8 | { 9 | ShapeRadius = 18.0f; 10 | ShapeWidth = 15.0f; 11 | bAffectedByHandbrake = true; 12 | SteerAngle = 0.f; 13 | 14 | // Setup suspension forces 15 | SuspensionForceOffset = -4.0f; 16 | SuspensionMaxRaise = 8.0f; 17 | SuspensionMaxDrop = 12.0f; 18 | SuspensionNaturalFrequency = 9.0f; 19 | SuspensionDampingRatio = 1.05f; 20 | 21 | // Find the tire object and set the data for it 22 | static ConstructorHelpers::FObjectFinder TireData(TEXT("/Game/VehicleAdv/Vehicle/WheelData/Vehicle_BackTireConfig.Vehicle_BackTireConfig")); 23 | TireConfig = TireData.Object; 24 | } 25 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacer/MultiplayerRacerWheelRear.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "VehicleWheel.h" 7 | #include "MultiplayerRacerWheelRear.generated.h" 8 | 9 | UCLASS() 10 | class UMultiplayerRacerWheelRear : public UVehicleWheel 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UMultiplayerRacerWheelRear(); 16 | }; 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /MultiplayerRacer/Source/MultiplayerRacerEditor.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class MultiplayerRacerEditorTarget : TargetRules 7 | { 8 | public MultiplayerRacerEditorTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | ExtraModuleNames.Add("MultiplayerRacer"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Parkour/.gitignore: -------------------------------------------------------------------------------- 1 | # Visual Studio 2015 user specific files 2 | .vs/ 3 | 4 | # Visual Studio 2015 database file 5 | *.VC.db 6 | 7 | # Compiled Object files 8 | *.slo 9 | *.lo 10 | *.o 11 | *.obj 12 | 13 | # Precompiled Headers 14 | *.gch 15 | *.pch 16 | 17 | # Compiled Dynamic libraries 18 | *.so 19 | *.dylib 20 | *.dll 21 | 22 | # Fortran module files 23 | *.mod 24 | 25 | # Compiled Static libraries 26 | *.lai 27 | *.la 28 | *.a 29 | *.lib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.ipa 36 | 37 | # These project files can be generated by the engine 38 | *.xcodeproj 39 | *.xcworkspace 40 | *.sln 41 | *.suo 42 | *.opensdf 43 | *.sdf 44 | *.VC.db 45 | *.VC.opendb 46 | 47 | # Precompiled Assets 48 | SourceArt/**/*.png 49 | SourceArt/**/*.tga 50 | 51 | # Binary Files 52 | Binaries/* 53 | 54 | # Builds 55 | Build/* 56 | 57 | # Whitelist PakBlacklist-.txt files 58 | !Build/*/ 59 | Build/*/** 60 | !Build/*/PakBlacklist*.txt 61 | 62 | # Don't ignore icon files in Build 63 | !Build/**/*.ico 64 | 65 | # Built data for maps 66 | *_BuiltData.uasset 67 | 68 | # Configuration files generated by the Editor 69 | Saved/* 70 | 71 | # Compiled source files for the engine to use 72 | Intermediate/* 73 | 74 | # Cache files for the editor to use 75 | DerivedDataCache/* 76 | -------------------------------------------------------------------------------- /Parkour/Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | [UnrealEd.SimpleMap] 2 | SimpleMapName=/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap 3 | 4 | [EditoronlyBP] 5 | bAllowClassAndBlueprintPinMatching=true 6 | bReplaceBlueprintWithClass= true 7 | bDontLoadBlueprintOutsideEditor= true 8 | bBlueprintIsNotBlueprintType= true -------------------------------------------------------------------------------- /Parkour/Config/DefaultEditorPerProjectUserSettings.ini: -------------------------------------------------------------------------------- 1 | [ContentBrowser] 2 | ContentBrowserTab1.SelectedPaths=/Game/ThirdPersonCPP -------------------------------------------------------------------------------- /Parkour/Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GameMapsSettings] 2 | GameDefaultMap=/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap 3 | EditorStartupMap=/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap 4 | GlobalDefaultGameMode="/Script/Parkour.ParkourGameMode" 5 | GameInstanceClass=/Script/Parkour.ParkourGameInstance 6 | 7 | [/Script/IOSRuntimeSettings.IOSRuntimeSettings] 8 | MinimumiOSVersion=IOS_8 9 | 10 | 11 | [/Script/Engine.Engine] 12 | +ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/Parkour") 13 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/Parkour") 14 | +ActiveClassRedirects=(OldClassName="TP_ThirdPersonGameMode",NewClassName="ParkourGameMode") 15 | +ActiveClassRedirects=(OldClassName="TP_ThirdPersonCharacter",NewClassName="ParkourCharacter") 16 | 17 | [/Script/HardwareTargeting.HardwareTargetingSettings] 18 | TargetedHardwareClass=Desktop 19 | AppliedTargetedHardwareClass=Desktop 20 | DefaultGraphicsPerformance=Maximum 21 | AppliedDefaultGraphicsPerformance=Maximum 22 | 23 | [OnlineSubsystem] 24 | DefaultPlatformService=Null 25 | 26 | [/Script/Engine.PhysicsSettings] 27 | DefaultGravityZ=-980.000000 28 | DefaultTerminalVelocity=4000.000000 29 | DefaultFluidFriction=0.300000 30 | SimulateScratchMemorySize=262144 31 | RagdollAggregateThreshold=4 32 | TriangleMeshTriangleMinAreaThreshold=5.000000 33 | bEnableAsyncScene=False 34 | bEnableShapeSharing=False 35 | bEnablePCM=True 36 | bEnableStabilization=False 37 | bWarnMissingLocks=True 38 | bEnable2DPhysics=False 39 | LockedAxis=Invalid 40 | DefaultDegreesOfFreedom=Full3D 41 | BounceThresholdVelocity=200.000000 42 | FrictionCombineMode=Average 43 | RestitutionCombineMode=Average 44 | MaxAngularVelocity=3600.000000 45 | MaxDepenetrationVelocity=0.000000 46 | ContactOffsetMultiplier=0.010000 47 | MinContactOffset=0.000100 48 | MaxContactOffset=1.000000 49 | bSimulateSkeletalMeshOnDedicatedServer=True 50 | DefaultShapeComplexity=CTF_UseSimpleAndComplex 51 | bDefaultHasComplexCollision=True 52 | bSuppressFaceRemapTable=False 53 | bSupportUVFromHitResults=False 54 | bDisableActiveActors=False 55 | bDisableCCD=False 56 | MaxPhysicsDeltaTime=0.033333 57 | bSubstepping=False 58 | bSubsteppingAsync=False 59 | MaxSubstepDeltaTime=0.016667 60 | MaxSubsteps=6 61 | SyncSceneSmoothingFactor=0.000000 62 | AsyncSceneSmoothingFactor=0.990000 63 | InitialAverageFrameRate=0.016667 64 | 65 | 66 | -------------------------------------------------------------------------------- /Parkour/Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=58A73A85417A6ABF80043FA1501D31DC 3 | ProjectName=Third Person Game Template 4 | -------------------------------------------------------------------------------- /Parkour/Config/DefaultInput.ini: -------------------------------------------------------------------------------- 1 | [/Script/Engine.InputSettings] 2 | +ActionMappings=(ActionName="Jump", Key=SpaceBar) 3 | +ActionMappings=(ActionName="Jump", Key=Gamepad_FaceButton_Bottom) 4 | 5 | +AxisMappings=(AxisName="MoveForward", Key=W, Scale=1.f) 6 | +AxisMappings=(AxisName="MoveForward", Key=S, Scale=-1.f) 7 | +AxisMappings=(AxisName="MoveForward", Key=Up, Scale=1.f) 8 | +AxisMappings=(AxisName="MoveForward", Key=Down, Scale=-1.f) 9 | +AxisMappings=(AxisName="MoveForward", Key=Gamepad_LeftY, Scale=1.f) 10 | 11 | +AxisMappings=(AxisName="MoveRight", Key=A, Scale=-1.f) 12 | +AxisMappings=(AxisName="MoveRight", Key=D, Scale=1.f) 13 | +AxisMappings=(AxisName="MoveRight", Key=Gamepad_LeftX, Scale=1.f) 14 | 15 | +AxisMappings=(AxisName="TurnRate", Key=Gamepad_RightX, Scale=1.f) 16 | +AxisMappings=(AxisName="TurnRate", Key=Left, Scale=-1.f) 17 | +AxisMappings=(AxisName="TurnRate", Key=Right, Scale=1.f) 18 | +AxisMappings=(AxisName="Turn", Key=MouseX, Scale=1.f) 19 | 20 | +AxisMappings=(AxisName="LookUpRate", Key=Gamepad_RightY, Scale=1.f) 21 | +AxisMappings=(AxisName="LookUp", Key=MouseY, Scale=-1.f) 22 | 23 | +ActionMappings=(ActionName="ResetVR", Key=R) 24 | +ActionMappings=(ActionName="ResetVR",Key=MotionController_Left_Grip1,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 25 | -------------------------------------------------------------------------------- /Parkour/Content/Geometry/Meshes/1M_Cube.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Geometry/Meshes/1M_Cube.uasset -------------------------------------------------------------------------------- /Parkour/Content/Geometry/Meshes/1M_Cube_Chamfer.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Geometry/Meshes/1M_Cube_Chamfer.uasset -------------------------------------------------------------------------------- /Parkour/Content/Geometry/Meshes/CubeMaterial.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Geometry/Meshes/CubeMaterial.uasset -------------------------------------------------------------------------------- /Parkour/Content/Geometry/Meshes/TemplateFloor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Geometry/Meshes/TemplateFloor.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonIdle.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonIdle.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonJump_End.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonJump_End.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonJump_Loop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonJump_Loop.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonJump_Start.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonJump_Start.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonRun.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonRun.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPersonWalk.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPersonWalk.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPerson_AnimBP.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPerson_AnimBP.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPerson_IdleRun_2D.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPerson_IdleRun_2D.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Animations/ThirdPerson_Jump.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Animations/ThirdPerson_Jump.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/M_UE4Man_Body.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/M_UE4Man_Body.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/M_UE4Man_ChestLogo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/M_UE4Man_ChestLogo.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Aluminum01.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Aluminum01.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Mesh/SK_Mannequin.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Mesh/SK_Mannequin.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Mesh/SK_Mannequin_PhysicsAsset.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Mesh/SK_Mannequin_PhysicsAsset.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Mesh/UE4_Mannequin_Skeleton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Mesh/UE4_Mannequin_Skeleton.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Textures/UE4Man_Logo_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Textures/UE4Man_Logo_N.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Textures/UE4_LOGO_CARD.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Textures/UE4_LOGO_CARD.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Textures/UE4_Mannequin_MAT_MASKA.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Textures/UE4_Mannequin_MAT_MASKA.uasset -------------------------------------------------------------------------------- /Parkour/Content/Mannequin/Character/Textures/UE4_Mannequin__normals.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/Mannequin/Character/Textures/UE4_Mannequin__normals.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/Bump_StaticMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/Bump_StaticMesh.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/CubeMaterial.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/CubeMaterial.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/LeftArm_StaticMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/LeftArm_StaticMesh.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/Linear_Stair_StaticMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/Linear_Stair_StaticMesh.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/RampMaterial.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/RampMaterial.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/Ramp_StaticMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/Ramp_StaticMesh.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPerson/Meshes/RightArm_StaticMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPerson/Meshes/RightArm_StaticMesh.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPersonCPP/Blueprints/ThirdPersonCharacter.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPersonCPP/Blueprints/ThirdPersonCharacter.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPersonCPP/Maps/MainMenu.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPersonCPP/Maps/MainMenu.umap -------------------------------------------------------------------------------- /Parkour/Content/ThirdPersonCPP/Maps/ThirdPersonExampleMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPersonCPP/Maps/ThirdPersonExampleMap.umap -------------------------------------------------------------------------------- /Parkour/Content/ThirdPersonCPP/UI/WBP_ServerItem.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPersonCPP/UI/WBP_ServerItem.uasset -------------------------------------------------------------------------------- /Parkour/Content/ThirdPersonCPP/UI/WBP_ServerMenu.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Parkour/Content/ThirdPersonCPP/UI/WBP_ServerMenu.uasset -------------------------------------------------------------------------------- /Parkour/How to run multiple instances without building.md: -------------------------------------------------------------------------------- 1 | Very useful for testing: 2 | 3 | ``` 4 | 'C:\Program Files\UE_4.16\Engine\Binaries\Win64\UE4Editor.exe' 'C:\Users\sam\Documents\Unreal Projects\MultiplayerPrototypes\Parkour\Parkour.uproject' -game 5 | ``` 6 | 7 | The paths must be adapted to the system. The must be full paths. -------------------------------------------------------------------------------- /Parkour/Parkour.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.16", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "Parkour", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default", 11 | "AdditionalDependencies": [ 12 | "Engine", 13 | "UMG" 14 | ] 15 | } 16 | ], 17 | "Plugins": [ 18 | { 19 | "Name": "OnlineSubsystemSteam", 20 | "Enabled": true 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /Parkour/Source/Parkour.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class ParkourTarget : TargetRules 7 | { 8 | public ParkourTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | ExtraModuleNames.Add("Parkour"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/Parkour.Build.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class Parkour : ModuleRules 6 | { 7 | public Parkour(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "OnlineSubsystem", "UMG" }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/Parkour.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "Parkour.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, Parkour, "Parkour" ); 7 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/Parkour.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourCharacter.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "ParkourCharacter.h" 4 | #include "Kismet/HeadMountedDisplayFunctionLibrary.h" 5 | #include "Camera/CameraComponent.h" 6 | #include "Components/CapsuleComponent.h" 7 | #include "Components/InputComponent.h" 8 | #include "GameFramework/CharacterMovementComponent.h" 9 | #include "GameFramework/Controller.h" 10 | #include "GameFramework/SpringArmComponent.h" 11 | 12 | ////////////////////////////////////////////////////////////////////////// 13 | // AParkourCharacter 14 | 15 | AParkourCharacter::AParkourCharacter() 16 | { 17 | // Set size for collision capsule 18 | GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f); 19 | 20 | // set our turn rates for input 21 | BaseTurnRate = 45.f; 22 | BaseLookUpRate = 45.f; 23 | 24 | // Don't rotate when the controller rotates. Let that just affect the camera. 25 | bUseControllerRotationPitch = false; 26 | bUseControllerRotationYaw = false; 27 | bUseControllerRotationRoll = false; 28 | 29 | // Configure character movement 30 | GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input... 31 | GetCharacterMovement()->RotationRate = FRotator(0.0f, 540.0f, 0.0f); // ...at this rotation rate 32 | GetCharacterMovement()->JumpZVelocity = 600.f; 33 | GetCharacterMovement()->AirControl = 0.2f; 34 | 35 | // Create a camera boom (pulls in towards the player if there is a collision) 36 | CameraBoom = CreateDefaultSubobject(TEXT("CameraBoom")); 37 | CameraBoom->SetupAttachment(RootComponent); 38 | CameraBoom->TargetArmLength = 300.0f; // The camera follows at this distance behind the character 39 | CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller 40 | 41 | // Create a follow camera 42 | FollowCamera = CreateDefaultSubobject(TEXT("FollowCamera")); 43 | FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation 44 | FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm 45 | 46 | // Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) 47 | // are set in the derived blueprint asset named MyCharacter (to avoid direct content references in C++) 48 | } 49 | 50 | ////////////////////////////////////////////////////////////////////////// 51 | // Input 52 | 53 | void AParkourCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) 54 | { 55 | // Set up gameplay key bindings 56 | check(PlayerInputComponent); 57 | PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump); 58 | PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping); 59 | 60 | PlayerInputComponent->BindAxis("MoveForward", this, &AParkourCharacter::MoveForward); 61 | PlayerInputComponent->BindAxis("MoveRight", this, &AParkourCharacter::MoveRight); 62 | 63 | // We have 2 versions of the rotation bindings to handle different kinds of devices differently 64 | // "turn" handles devices that provide an absolute delta, such as a mouse. 65 | // "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick 66 | PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput); 67 | PlayerInputComponent->BindAxis("TurnRate", this, &AParkourCharacter::TurnAtRate); 68 | PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput); 69 | PlayerInputComponent->BindAxis("LookUpRate", this, &AParkourCharacter::LookUpAtRate); 70 | 71 | // handle touch devices 72 | PlayerInputComponent->BindTouch(IE_Pressed, this, &AParkourCharacter::TouchStarted); 73 | PlayerInputComponent->BindTouch(IE_Released, this, &AParkourCharacter::TouchStopped); 74 | 75 | // VR headset functionality 76 | PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &AParkourCharacter::OnResetVR); 77 | } 78 | 79 | 80 | void AParkourCharacter::OnResetVR() 81 | { 82 | UHeadMountedDisplayFunctionLibrary::ResetOrientationAndPosition(); 83 | } 84 | 85 | void AParkourCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location) 86 | { 87 | Jump(); 88 | } 89 | 90 | void AParkourCharacter::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location) 91 | { 92 | StopJumping(); 93 | } 94 | 95 | void AParkourCharacter::TurnAtRate(float Rate) 96 | { 97 | // calculate delta for this frame from the rate information 98 | AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds()); 99 | } 100 | 101 | void AParkourCharacter::LookUpAtRate(float Rate) 102 | { 103 | // calculate delta for this frame from the rate information 104 | AddControllerPitchInput(Rate * BaseLookUpRate * GetWorld()->GetDeltaSeconds()); 105 | } 106 | 107 | void AParkourCharacter::MoveForward(float Value) 108 | { 109 | if ((Controller != NULL) && (Value != 0.0f)) 110 | { 111 | // find out which way is forward 112 | const FRotator Rotation = Controller->GetControlRotation(); 113 | const FRotator YawRotation(0, Rotation.Yaw, 0); 114 | 115 | // get forward vector 116 | const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); 117 | AddMovementInput(Direction, Value); 118 | } 119 | } 120 | 121 | void AParkourCharacter::MoveRight(float Value) 122 | { 123 | if ( (Controller != NULL) && (Value != 0.0f) ) 124 | { 125 | // find out which way is right 126 | const FRotator Rotation = Controller->GetControlRotation(); 127 | const FRotator YawRotation(0, Rotation.Yaw, 0); 128 | 129 | // get right vector 130 | const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); 131 | // add movement in that direction 132 | AddMovementInput(Direction, Value); 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourCharacter.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/Character.h" 7 | #include "ParkourCharacter.generated.h" 8 | 9 | UCLASS(config=Game) 10 | class AParkourCharacter : public ACharacter 11 | { 12 | GENERATED_BODY() 13 | 14 | /** Camera boom positioning the camera behind the character */ 15 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true")) 16 | class USpringArmComponent* CameraBoom; 17 | 18 | /** Follow camera */ 19 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true")) 20 | class UCameraComponent* FollowCamera; 21 | public: 22 | AParkourCharacter(); 23 | 24 | /** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */ 25 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera) 26 | float BaseTurnRate; 27 | 28 | /** Base look up/down rate, in deg/sec. Other scaling may affect final rate. */ 29 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera) 30 | float BaseLookUpRate; 31 | 32 | protected: 33 | 34 | /** Resets HMD orientation in VR. */ 35 | void OnResetVR(); 36 | 37 | /** Called for forwards/backward input */ 38 | void MoveForward(float Value); 39 | 40 | /** Called for side to side input */ 41 | void MoveRight(float Value); 42 | 43 | /** 44 | * Called via input to turn at a given rate. 45 | * @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate 46 | */ 47 | void TurnAtRate(float Rate); 48 | 49 | /** 50 | * Called via input to turn look up/down at a given rate. 51 | * @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate 52 | */ 53 | void LookUpAtRate(float Rate); 54 | 55 | /** Handler for when a touch input begins. */ 56 | void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location); 57 | 58 | /** Handler for when a touch input stops. */ 59 | void TouchStopped(ETouchIndex::Type FingerIndex, FVector Location); 60 | 61 | protected: 62 | // APawn interface 63 | virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; 64 | // End of APawn interface 65 | 66 | public: 67 | /** Returns CameraBoom subobject **/ 68 | FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; } 69 | /** Returns FollowCamera subobject **/ 70 | FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; } 71 | }; 72 | 73 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourGameInstance.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "ParkourGameInstance.h" 4 | #include "Interfaces/OnlineSessionInterface.h" 5 | #include "Blueprint/UserWidget.h" 6 | #include "UObject/ConstructorHelpers.h" 7 | #include "Kismet/GameplayStatics.h" 8 | #include "GameFramework/PlayerController.h" 9 | #include "Engine/World.h" 10 | #include "TimerManager.h" 11 | #include "Engine/Engine.h" 12 | 13 | #include "UI/ServerMenu.h" 14 | 15 | const auto SESSION_NAME = "MyGame"; 16 | 17 | UParkourGameInstance::UParkourGameInstance() { 18 | // This must be in constructor or will throw 19 | ConstructorHelpers::FClassFinder ServerMenu(TEXT("/Game/ThirdPersonCPP/UI/WBP_ServerMenu")); 20 | if (!ensure(ServerMenu.Class != nullptr)) return; 21 | ServerMenuClass = ServerMenu.Class; 22 | } 23 | 24 | void UParkourGameInstance::LoadMainMenu() 25 | { 26 | if (!ensure(ServerMenuClass != nullptr)) return; 27 | Menu = CreateWidget(this, ServerMenuClass); 28 | 29 | if (!ensure(Menu != nullptr)) return; 30 | Menu->OnHostServer.AddUObject(this, &UParkourGameInstance::HostServer); 31 | 32 | Menu->AddToViewport(); 33 | 34 | auto PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0); 35 | if (!ensure(PlayerController != nullptr)) return; 36 | 37 | FInputModeUIOnly data; 38 | data.SetLockMouseToViewport(false); 39 | data.SetWidgetToFocus(Menu->TakeWidget()); 40 | PlayerController->SetInputMode(data); 41 | 42 | PlayerController->bShowMouseCursor = true; 43 | 44 | UE_LOG(LogTemp, Warning, TEXT("Get here.")) 45 | FindServers(); 46 | 47 | Menu->AddServer("Hello"); 48 | } 49 | 50 | void UParkourGameInstance::Init() 51 | { 52 | Super::Init(); 53 | UE_LOG(LogTemp, Warning, TEXT("Game instance started.")); 54 | auto sessionMngr = GetSession(); 55 | if (!sessionMngr.IsValid()) return; 56 | 57 | sessionMngr->OnCreateSessionCompleteDelegates.AddUObject(this, &UParkourGameInstance::SessionCreated); 58 | sessionMngr->OnFindSessionsCompleteDelegates.AddUObject(this, &UParkourGameInstance::FindServersFinished); 59 | sessionMngr->OnDestroySessionCompleteDelegates.AddUObject(this, &UParkourGameInstance::SessionDestroyed); 60 | } 61 | 62 | void UParkourGameInstance::HostServer() 63 | { 64 | auto sessionMngr = GetSession(); 65 | if (!sessionMngr.IsValid()) return; 66 | 67 | 68 | auto Session = sessionMngr->GetNamedSession(SESSION_NAME); 69 | if (Session != nullptr) { 70 | sessionMngr->DestroySession(SESSION_NAME); 71 | } 72 | else 73 | { 74 | CreateSession(SESSION_NAME); 75 | } 76 | } 77 | 78 | void UParkourGameInstance::SessionDestroyed(FName Name, bool Success) 79 | { 80 | if (Success) { 81 | CreateSession(Name); 82 | } 83 | } 84 | 85 | void UParkourGameInstance::CreateSession(FName Name) 86 | { 87 | auto sessionMngr = GetSession(); 88 | if (!sessionMngr.IsValid()) return; 89 | 90 | FOnlineSessionSettings settings; 91 | settings.NumPublicConnections = 2; 92 | settings.NumPrivateConnections = 0; 93 | settings.bShouldAdvertise = true; 94 | settings.bAllowJoinInProgress = true; 95 | settings.bIsLANMatch = true; 96 | settings.bIsDedicated = false; 97 | settings.bUsesStats = false; 98 | settings.bAllowInvites = false; 99 | settings.bUsesPresence = true; 100 | settings.bAllowJoinViaPresence = true; 101 | settings.bAllowJoinViaPresenceFriendsOnly = false; 102 | settings.bAntiCheatProtected = false; 103 | settings.BuildUniqueId = 0; 104 | 105 | bool success = sessionMngr->CreateSession(0, SESSION_NAME, settings); 106 | } 107 | 108 | void UParkourGameInstance::FindServers() 109 | { 110 | UE_LOG(LogTemp, Warning, TEXT("null menu")); 111 | if (!ensure(Menu != nullptr)) return; 112 | 113 | UE_LOG(LogTemp, Warning, TEXT("Finding servers")); 114 | auto sessionMngr = GetSession(); 115 | if (!ensure(sessionMngr.IsValid())) return; 116 | 117 | ServerSearch = MakeShareable(new FOnlineSessionSearch()); 118 | ServerSearch->MaxSearchResults = 10; 119 | ServerSearch->TimeoutInSeconds = 10; 120 | ServerSearch->bIsLanQuery = true; 121 | 122 | if (!ensure(ServerSearch.IsValid())) return; 123 | auto uniqueID = GetFirstGamePlayer()->GetUniqueID(); 124 | sessionMngr->FindSessions(uniqueID, ServerSearch.ToSharedRef()); 125 | } 126 | 127 | void UParkourGameInstance::FindServersFinished(bool Success) 128 | { 129 | if (!ensure(ServerSearch.IsValid())) return; 130 | if (!ensure(Menu != nullptr)) return; 131 | GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Finished finding servers")); 132 | for (auto&& server : ServerSearch->SearchResults) { 133 | UE_LOG(LogTemp, Warning, TEXT("Found server")); 134 | Menu->AddServer(server.GetSessionIdStr()); 135 | } 136 | 137 | auto World = GetWorld(); 138 | if (!ensure(World != nullptr)) return; 139 | World->GetTimerManager().SetTimer(ServerCheckTimer, this, &UParkourGameInstance::FindServers, 2, false); 140 | } 141 | 142 | void UParkourGameInstance::SessionCreated(FName name, bool success) 143 | { 144 | if (!ensure(GEngine != nullptr)) return; 145 | GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Server hosting begun %s with success %s."), *name.ToString(), *FString(success ? "True" : "False"))); 146 | 147 | auto sessionMngr = GetSession(); 148 | if (!ensure(sessionMngr.IsValid())) return; 149 | //sessionMngr->StartSession(name); 150 | } 151 | 152 | IOnlineSessionPtr UParkourGameInstance::GetSession() 153 | { 154 | auto subsystem = IOnlineSubsystem::Get(); 155 | UE_LOG(LogTemp, Warning, TEXT("Found subsystem %s."), *subsystem->GetSubsystemName().ToString()); 156 | 157 | if (!ensure(subsystem != nullptr)) return nullptr; 158 | return subsystem->GetSessionInterface(); 159 | } 160 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourGameInstance.h: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "Engine/GameInstance.h" 7 | #include "OnlineSubsystem.h" 8 | #include "OnlineSessionSettings.h" 9 | 10 | #include "ParkourGameInstance.generated.h" 11 | 12 | /** 13 | * 14 | */ 15 | UCLASS() 16 | class PARKOUR_API UParkourGameInstance : public UGameInstance 17 | { 18 | GENERATED_BODY() 19 | 20 | public: 21 | 22 | UParkourGameInstance(); 23 | 24 | UFUNCTION(BlueprintCallable, Category = "UI") 25 | void LoadMainMenu(); 26 | 27 | virtual void Init() override; 28 | 29 | UFUNCTION(BlueprintCallable, Category = "UI") 30 | void HostServer(); 31 | 32 | void FindServers(); 33 | 34 | private: 35 | void SessionCreated(FName name, bool success); 36 | void FindServersFinished(bool Success); 37 | void SessionDestroyed(FName Name, bool Success); 38 | void CreateSession(FName Name); 39 | 40 | 41 | IOnlineSessionPtr GetSession(); 42 | 43 | UPROPERTY() 44 | UClass *ServerMenuClass; 45 | 46 | UPROPERTY() 47 | class UServerMenu *Menu; 48 | 49 | struct FTimerHandle ServerCheckTimer; 50 | TSharedPtr ServerSearch = nullptr; 51 | }; 52 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourGameMode.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "ParkourGameMode.h" 4 | #include "ParkourCharacter.h" 5 | #include "UObject/ConstructorHelpers.h" 6 | 7 | AParkourGameMode::AParkourGameMode() 8 | { 9 | // set default pawn class to our Blueprinted character 10 | static ConstructorHelpers::FClassFinder PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter")); 11 | if (PlayerPawnBPClass.Class != NULL) 12 | { 13 | DefaultPawnClass = PlayerPawnBPClass.Class; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/ParkourGameMode.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/GameModeBase.h" 7 | #include "ParkourGameMode.generated.h" 8 | 9 | UCLASS(minimalapi) 10 | class AParkourGameMode : public AGameModeBase 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | AParkourGameMode(); 16 | }; 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/UI/ServerItem.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "ServerItem.h" 4 | #include "Components/TextBlock.h" 5 | 6 | void UServerItem::SetName(const FString& Name) 7 | { 8 | ServerName->Text = FText::FromString(Name); 9 | } 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/UI/ServerItem.h: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "Blueprint/UserWidget.h" 7 | #include "ServerItem.generated.h" 8 | 9 | /** 10 | * 11 | */ 12 | UCLASS() 13 | class PARKOUR_API UServerItem : public UUserWidget 14 | { 15 | GENERATED_BODY() 16 | 17 | public: 18 | void SetName(const FString& Name); 19 | 20 | private: 21 | UPROPERTY(meta = (BindWidget)) 22 | class UTextBlock* ServerName; 23 | 24 | }; 25 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/UI/ServerMenu.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "ServerMenu.h" 4 | #include "Components/ScrollBox.h" 5 | #include "Components/Button.h" 6 | #include "UObject/ConstructorHelpers.h" 7 | #include "Blueprint/UserWidget.h" 8 | 9 | #include "ServerItem.h" 10 | 11 | UServerMenu::UServerMenu(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) 12 | { 13 | ConstructorHelpers::FClassFinder ServerItem(TEXT("/Game/ThirdPersonCPP/UI/WBP_ServerItem")); 14 | if (!ensure(ServerItem.Class != nullptr)) return; 15 | ServerItemClass = ServerItem.Class; 16 | } 17 | 18 | bool UServerMenu::Initialize() 19 | { 20 | bool Success = Super::Initialize(); 21 | if (!Success) { 22 | return false; 23 | } 24 | if (!ensure(HostServerButton != nullptr)) return false; 25 | HostServerButton->OnClicked.AddDynamic(this, &UServerMenu::TriggerHostServer); 26 | return true; 27 | } 28 | 29 | void UServerMenu::TriggerHostServer() 30 | { 31 | OnHostServer.Broadcast(); 32 | } 33 | 34 | void UServerMenu::AddServer(const FString& ServerName) 35 | { 36 | if (!ensure(GetWorld() != nullptr)) return; 37 | auto Item = CreateWidget(GetWorld(), ServerItemClass); 38 | Item->SetName(ServerName); 39 | ServerList->AddChild(Item); 40 | } 41 | -------------------------------------------------------------------------------- /Parkour/Source/Parkour/UI/ServerMenu.h: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "Blueprint/UserWidget.h" 7 | #include "Delegate.h" 8 | 9 | #include "ServerMenu.generated.h" 10 | 11 | class UParkourGameInstance; 12 | /** 13 | * 14 | */ 15 | UCLASS() 16 | class PARKOUR_API UServerMenu : public UUserWidget 17 | { 18 | GENERATED_BODY() 19 | 20 | public: 21 | 22 | UServerMenu(const FObjectInitializer& ObjectInitializer); 23 | 24 | virtual bool Initialize() override; 25 | 26 | void AddServer(const FString& ServerName); 27 | 28 | UPROPERTY(meta = (BindWidget)) 29 | class UScrollBox* ServerList; 30 | UPROPERTY(meta = (BindWidget)) 31 | class UButton* HostServerButton; 32 | 33 | DECLARE_EVENT(UServerMenu, FOnHostServer); 34 | FOnHostServer OnHostServer; 35 | 36 | protected: 37 | UFUNCTION() 38 | void TriggerHostServer(); 39 | 40 | UClass* ServerItemClass; 41 | }; 42 | -------------------------------------------------------------------------------- /Parkour/Source/ParkourEditor.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class ParkourEditorTarget : TargetRules 7 | { 8 | public ParkourEditorTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | ExtraModuleNames.Add("Parkour"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Useful setting for menus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnrealMultiplayer/MultiplayerPrototypes/3adf503bc014c4e7b6101c21d6068a323b6e6912/Useful setting for menus.png --------------------------------------------------------------------------------