├── .gitignore ├── Config ├── DefaultEditor.ini ├── DefaultEngine.ini ├── DefaultGame.ini └── DefaultInput.ini ├── Content ├── Animations │ ├── FirstPerson_AnimBP.uasset │ ├── FirstPerson_Fire.uasset │ ├── FirstPerson_Idle.uasset │ ├── FirstPerson_JumpEnd.uasset │ ├── FirstPerson_JumpLoop.uasset │ ├── FirstPerson_JumpStart.uasset │ └── FirstPerson_Run.uasset ├── Audio │ └── FirstPersonTemplateWeaponFire02.uasset ├── Blueprints │ ├── BP_ExtractionZone.uasset │ ├── BP_GameMode.uasset │ ├── BP_Guard.uasset │ ├── BP_HUD.uasset │ ├── BP_Objective.uasset │ ├── BP_Player.uasset │ ├── BP_PlayerController.uasset │ ├── BP_Projectile.uasset │ └── BP_SpectatingViewpoint.uasset ├── Challenges │ ├── AIPatrol │ │ └── AIPatrolMap_P.umap │ ├── BlackHole │ │ ├── BP_BlackHole.uasset │ │ ├── BlackHoleMap_P.umap │ │ └── M_BlackHole.uasset │ └── LaunchPad │ │ ├── BP_LauchPad.uasset │ │ ├── LaunchPadMap_P.umap │ │ ├── M_LaunchPAd.uasset │ │ ├── M_LaunchPadBase.uasset │ │ └── T_Arrow.uasset ├── Character │ ├── M_PlayerArms.uasset │ ├── Mesh │ │ ├── SK_Mannequin_Arms.uasset │ │ ├── SK_Mannequin_Arms_PhysicsAsset.uasset │ │ └── SK_Mannequin_Arms_Skeleton.uasset │ └── Textures │ │ ├── UE4_LOGO_CARD.uasset │ │ ├── UE4_Mannequin_MAT_MASKA.uasset │ │ └── UE4_Mannequin__normals.uasset ├── Characters │ └── DwarfGrunt │ │ ├── Anims │ │ └── Idle_1_new.uasset │ │ ├── Materials │ │ ├── Dwarf_Grunt_Equipment_Blue_MIC.uasset │ │ └── M_Dwarf_Grunt.uasset │ │ ├── SkelMesh │ │ ├── DwarfGrunt_R_new.uasset │ │ └── DwarfGrunt_R_new_Skeleton.uasset │ │ └── Textures │ │ ├── T_Dwarf_Grunt_Blue_D.uasset │ │ ├── T_Dwarf_Grunt_Equipment_Blue_D.uasset │ │ ├── T_Dwarf_Grunt_Equipment_Blue_N.uasset │ │ ├── T_Dwarf_Grunt_Equipment_M.uasset │ │ ├── T_Dwarf_Grunt_M.uasset │ │ └── T_Dwarf_Grunt_N.uasset ├── Effects │ ├── Coin2.uasset │ ├── M_Volumetric_Streaks.uasset │ ├── M_single_ray_01.uasset │ ├── M_wind_swirl_02.uasset │ ├── Materials │ │ ├── M_Burst.uasset │ │ ├── M_explosion_subUV.uasset │ │ ├── M_radial_ramp.uasset │ │ ├── M_smoke_subUV.uasset │ │ └── m_flare_01.uasset │ ├── P_Explosion.uasset │ ├── P_gold_ore_appearance.uasset │ ├── P_gold_ore_aura.uasset │ ├── P_gold_ore_lost.uasset │ ├── P_gold_ore_received.uasset │ ├── SM_plane_pivot_down.uasset │ ├── S_SandSwirl.uasset │ ├── T_FX_RollingFlame.uasset │ ├── T_Fire_tile.uasset │ ├── T_Flame_Tile.uasset │ ├── T_MeshFire_Mask.uasset │ ├── T_Smoke2_Tile.uasset │ ├── Textures │ │ ├── T_Burst_M.uasset │ │ ├── T_Explosion_SubUV.uasset │ │ ├── T_Smoke_SubUV.uasset │ │ └── T_Smoke_Tiled_D.uasset │ ├── clouds_dust_detail_01.uasset │ ├── gold_ore_circle2.uasset │ ├── gold_ore_effect.uasset │ ├── m_flare_03.uasset │ ├── round_mask.uasset │ └── sunflare.uasset ├── Environment │ ├── AntiAliasedTextMaterialTranslucent_Glow.uasset │ ├── MF_WorldUVs.uasset │ ├── MI_BlockoutSimple_Inst.uasset │ ├── M_BlockoutSimple.uasset │ ├── M_Cube.uasset │ ├── M_Cube_Inst.uasset │ └── Shape_Cube.uasset ├── Maps │ └── FirstPersonExampleMap.umap ├── Materials │ ├── M_Objective.uasset │ ├── SpawnBox_M.uasset │ ├── SpawnBox_M_Inst.uasset │ └── T_DevPatterns.uasset ├── UI │ ├── FirstPersonCrosshair.uasset │ ├── WBP_GameOver.uasset │ ├── WBP_GuardState.uasset │ └── WBP_ObjectiveInfo.uasset └── Weapon │ ├── FirstPersonProjectileMesh.uasset │ ├── M_FPGun.uasset │ ├── M_Projectile.uasset │ ├── SK_FPGun.uasset │ ├── SK_FPGun_PhysicsAsset.uasset │ ├── SK_FPGun_Skeleton.uasset │ ├── T_FPGun_M.uasset │ └── T_FPGun_N.uasset ├── FPSGame.uproject ├── README.md └── Source ├── FPSGame.Target.cs ├── FPSGame ├── FPSGame.Build.cs ├── FPSGame.cpp ├── FPSGame.h ├── Private │ ├── Challenges │ │ ├── FPSBlackHole.cpp │ │ └── FPSLaunchPad.cpp │ ├── FPSAIGuard.cpp │ ├── FPSCharacter.cpp │ ├── FPSExtractionZone.cpp │ ├── FPSGameMode.cpp │ ├── FPSGameState.cpp │ ├── FPSHUD.cpp │ ├── FPSObjectiveActor.cpp │ ├── FPSPlayerController.cpp │ └── FPSProjectile.cpp └── Public │ ├── Challenges │ ├── FPSBlackHole.h │ └── FPSLaunchPad.h │ ├── FPSAIGuard.h │ ├── FPSCharacter.h │ ├── FPSExtractionZone.h │ ├── FPSGameMode.h │ ├── FPSGameState.h │ ├── FPSHUD.h │ ├── FPSObjectiveActor.h │ ├── FPSPlayerController.h │ └── FPSProjectile.h └── FPSGameEditor.Target.cs /.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 | -------------------------------------------------------------------------------- /Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | [UnrealEd.SimpleMap] 2 | SimpleMapName=/Game/FirstPerson/Maps/FirstPersonExampleMap 3 | 4 | [EditoronlyBP] 5 | bAllowClassAndBlueprintPinMatching=true 6 | bReplaceBlueprintWithClass= true 7 | bDontLoadBlueprintOutsideEditor= true 8 | bBlueprintIsNotBlueprintType= true 9 | 10 | 11 | -------------------------------------------------------------------------------- /Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | [/Script/Engine.CollisionProfile] 2 | +Profiles=(Name="Projectile",CollisionEnabled=QueryOnly,ObjectTypeName="Projectile",CustomResponses=,HelpMessage="Preset for projectiles",bCanModify=True) 3 | +DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="Projectile",DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False) 4 | +EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore))) 5 | 6 | [/Script/EngineSettings.GameMapsSettings] 7 | EditorStartupMap=/Game/Maps/FirstPersonExampleMap.FirstPersonExampleMap 8 | LocalMapOptions= 9 | TransitionMap= 10 | bUseSplitscreen=True 11 | TwoPlayerSplitscreenLayout=Horizontal 12 | ThreePlayerSplitscreenLayout=FavorTop 13 | GameInstanceClass=/Script/Engine.GameInstance 14 | GameDefaultMap=/Game/Maps/FirstPersonExampleMap.FirstPersonExampleMap 15 | ServerDefaultMap=/Engine/Maps/Entry 16 | GlobalDefaultGameMode=/Script/FPSGame.FPSGameMode 17 | GlobalDefaultServerGameMode=None 18 | 19 | [/Script/IOSRuntimeSettings.IOSRuntimeSettings] 20 | MinimumiOSVersion=IOS_8 21 | 22 | 23 | [/Script/Engine.Engine] 24 | +ActiveGameNameRedirects=(OldGameName="TP_FirstPerson",NewGameName="/Script/FPSGame") 25 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_FirstPerson",NewGameName="/Script/FPSGame") 26 | +ActiveClassRedirects=(OldClassName="TP_FirstPersonProjectile",NewClassName="FPSProjectile") 27 | +ActiveClassRedirects=(OldClassName="TP_FirstPersonHUD",NewClassName="FPSHUD") 28 | +ActiveClassRedirects=(OldClassName="TP_FirstPersonGameMode",NewClassName="FPSGameMode") 29 | +ActiveClassRedirects=(OldClassName="TP_FirstPersonCharacter",NewClassName="FPSCharacter") 30 | 31 | [/Script/HardwareTargeting.HardwareTargetingSettings] 32 | TargetedHardwareClass=Desktop 33 | AppliedTargetedHardwareClass=Desktop 34 | DefaultGraphicsPerformance=Maximum 35 | AppliedDefaultGraphicsPerformance=Maximum 36 | 37 | [/Script/Engine.PhysicsSettings] 38 | DefaultGravityZ=-980.000000 39 | DefaultTerminalVelocity=4000.000000 40 | DefaultFluidFriction=0.300000 41 | SimulateScratchMemorySize=262144 42 | RagdollAggregateThreshold=4 43 | TriangleMeshTriangleMinAreaThreshold=5.000000 44 | bEnableAsyncScene=False 45 | bEnableShapeSharing=False 46 | bEnablePCM=True 47 | bEnableStabilization=False 48 | bWarnMissingLocks=True 49 | bEnable2DPhysics=False 50 | LockedAxis=Invalid 51 | DefaultDegreesOfFreedom=Full3D 52 | BounceThresholdVelocity=200.000000 53 | FrictionCombineMode=Average 54 | RestitutionCombineMode=Average 55 | MaxAngularVelocity=3600.000000 56 | MaxDepenetrationVelocity=0.000000 57 | ContactOffsetMultiplier=0.020000 58 | MinContactOffset=2.000000 59 | MaxContactOffset=8.000000 60 | bSimulateSkeletalMeshOnDedicatedServer=True 61 | DefaultShapeComplexity=CTF_UseSimpleAndComplex 62 | bDefaultHasComplexCollision=True 63 | bSuppressFaceRemapTable=False 64 | bSupportUVFromHitResults=False 65 | bDisableActiveActors=False 66 | bDisableCCD=False 67 | bEnableEnhancedDeterminism=False 68 | MaxPhysicsDeltaTime=0.033333 69 | bSubstepping=False 70 | bSubsteppingAsync=False 71 | MaxSubstepDeltaTime=0.016667 72 | MaxSubsteps=6 73 | SyncSceneSmoothingFactor=0.000000 74 | AsyncSceneSmoothingFactor=0.990000 75 | InitialAverageFrameRate=0.016667 76 | PhysXTreeRebuildRate=10 77 | -------------------------------------------------------------------------------- /Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [ProjectSettings] 2 | ProjectID=(A=1823396784,B=1298598689,C=1743498150,D=-2048051708) 3 | ProjectName=Stealth Game 4 | 5 | 6 | [/Script/EngineSettings.GeneralProjectSettings] 7 | ProjectID=84280D9543200F6157F566BBB17DFDAE -------------------------------------------------------------------------------- /Config/DefaultInput.ini: -------------------------------------------------------------------------------- 1 | [/Script/Engine.InputSettings] 2 | +ActionMappings=(ActionName="Jump", Key=SpaceBar) 3 | +ActionMappings=(ActionName="Jump", Key=Gamepad_FaceButton_Bottom) 4 | +ActionMappings=(ActionName="Jump",Key=MotionController_Left_Trigger,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 5 | 6 | +ActionMappings=(ActionName="Fire", Key=LeftMouseButton) 7 | +ActionMappings=(ActionName="Fire", Key=Gamepad_RightTrigger) 8 | +ActionMappings=(ActionName="Fire",Key=MotionController_Right_Trigger,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 9 | 10 | +ActionMappings=(ActionName="ResetVR",Key=R,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 11 | +ActionMappings=(ActionName="ResetVR",Key=MotionController_Left_Grip1,bShift=False,bCtrl=False,bAlt=False,bCmd=False) 12 | 13 | +AxisMappings=(AxisName="MoveForward", Key=W, Scale=1.f) 14 | +AxisMappings=(AxisName="MoveForward", Key=S, Scale=-1.f) 15 | +AxisMappings=(AxisName="MoveForward", Key=Up, Scale=1.f) 16 | +AxisMappings=(AxisName="MoveForward", Key=Down, Scale=-1.f) 17 | +AxisMappings=(AxisName="MoveForward", Key=Gamepad_LeftY, Scale=1.f) 18 | +AxisMappings=(AxisName="MoveForward",Key=MotionController_Left_Thumbstick_Y,Scale=-1.000000) 19 | 20 | +AxisMappings=(AxisName="MoveRight", Key=A, Scale=-1.f) 21 | +AxisMappings=(AxisName="MoveRight", Key=D, Scale=1.f) 22 | +AxisMappings=(AxisName="MoveRight", Key=Gamepad_LeftX, Scale=1.f) 23 | +AxisMappings=(AxisName="MoveRight",Key=MotionController_Left_Thumbstick_X,Scale=1.000000) 24 | 25 | +AxisMappings=(AxisName="TurnRate", Key=Gamepad_RightX, Scale=1.f) 26 | +AxisMappings=(AxisName="TurnRate", Key=Left, Scale=-1.f) 27 | +AxisMappings=(AxisName="TurnRate", Key=Right, Scale=1.f) 28 | +AxisMappings=(AxisName="Turn", Key=MouseX, Scale=1.f) 29 | 30 | +AxisMappings=(AxisName="LookUpRate", Key=Gamepad_RightY, Scale=1.f) 31 | +AxisMappings=(AxisName="LookUp", Key=MouseY, Scale=-1.f) -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_AnimBP.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_AnimBP.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_Fire.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_Fire.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_Idle.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_Idle.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_JumpEnd.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_JumpEnd.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_JumpLoop.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_JumpLoop.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_JumpStart.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_JumpStart.uasset -------------------------------------------------------------------------------- /Content/Animations/FirstPerson_Run.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Animations/FirstPerson_Run.uasset -------------------------------------------------------------------------------- /Content/Audio/FirstPersonTemplateWeaponFire02.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Audio/FirstPersonTemplateWeaponFire02.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_ExtractionZone.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_ExtractionZone.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_GameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_GameMode.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_Guard.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_Guard.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_HUD.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_HUD.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_Objective.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_Objective.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_Player.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_Player.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_PlayerController.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_PlayerController.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_Projectile.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_Projectile.uasset -------------------------------------------------------------------------------- /Content/Blueprints/BP_SpectatingViewpoint.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Blueprints/BP_SpectatingViewpoint.uasset -------------------------------------------------------------------------------- /Content/Challenges/AIPatrol/AIPatrolMap_P.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/AIPatrol/AIPatrolMap_P.umap -------------------------------------------------------------------------------- /Content/Challenges/BlackHole/BP_BlackHole.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/BlackHole/BP_BlackHole.uasset -------------------------------------------------------------------------------- /Content/Challenges/BlackHole/BlackHoleMap_P.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/BlackHole/BlackHoleMap_P.umap -------------------------------------------------------------------------------- /Content/Challenges/BlackHole/M_BlackHole.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/BlackHole/M_BlackHole.uasset -------------------------------------------------------------------------------- /Content/Challenges/LaunchPad/BP_LauchPad.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/LaunchPad/BP_LauchPad.uasset -------------------------------------------------------------------------------- /Content/Challenges/LaunchPad/LaunchPadMap_P.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/LaunchPad/LaunchPadMap_P.umap -------------------------------------------------------------------------------- /Content/Challenges/LaunchPad/M_LaunchPAd.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/LaunchPad/M_LaunchPAd.uasset -------------------------------------------------------------------------------- /Content/Challenges/LaunchPad/M_LaunchPadBase.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/LaunchPad/M_LaunchPadBase.uasset -------------------------------------------------------------------------------- /Content/Challenges/LaunchPad/T_Arrow.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Challenges/LaunchPad/T_Arrow.uasset -------------------------------------------------------------------------------- /Content/Character/M_PlayerArms.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/M_PlayerArms.uasset -------------------------------------------------------------------------------- /Content/Character/Mesh/SK_Mannequin_Arms.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Mesh/SK_Mannequin_Arms.uasset -------------------------------------------------------------------------------- /Content/Character/Mesh/SK_Mannequin_Arms_PhysicsAsset.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Mesh/SK_Mannequin_Arms_PhysicsAsset.uasset -------------------------------------------------------------------------------- /Content/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset -------------------------------------------------------------------------------- /Content/Character/Textures/UE4_LOGO_CARD.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Textures/UE4_LOGO_CARD.uasset -------------------------------------------------------------------------------- /Content/Character/Textures/UE4_Mannequin_MAT_MASKA.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Textures/UE4_Mannequin_MAT_MASKA.uasset -------------------------------------------------------------------------------- /Content/Character/Textures/UE4_Mannequin__normals.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Character/Textures/UE4_Mannequin__normals.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Anims/Idle_1_new.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Anims/Idle_1_new.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Materials/Dwarf_Grunt_Equipment_Blue_MIC.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Materials/Dwarf_Grunt_Equipment_Blue_MIC.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Materials/M_Dwarf_Grunt.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Materials/M_Dwarf_Grunt.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/SkelMesh/DwarfGrunt_R_new.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/SkelMesh/DwarfGrunt_R_new.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/SkelMesh/DwarfGrunt_R_new_Skeleton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/SkelMesh/DwarfGrunt_R_new_Skeleton.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Blue_D.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Blue_D.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_Blue_D.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_Blue_D.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_Blue_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_Blue_N.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_M.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_Equipment_M.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_M.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_M.uasset -------------------------------------------------------------------------------- /Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Characters/DwarfGrunt/Textures/T_Dwarf_Grunt_N.uasset -------------------------------------------------------------------------------- /Content/Effects/Coin2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Coin2.uasset -------------------------------------------------------------------------------- /Content/Effects/M_Volumetric_Streaks.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/M_Volumetric_Streaks.uasset -------------------------------------------------------------------------------- /Content/Effects/M_single_ray_01.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/M_single_ray_01.uasset -------------------------------------------------------------------------------- /Content/Effects/M_wind_swirl_02.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/M_wind_swirl_02.uasset -------------------------------------------------------------------------------- /Content/Effects/Materials/M_Burst.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Materials/M_Burst.uasset -------------------------------------------------------------------------------- /Content/Effects/Materials/M_explosion_subUV.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Materials/M_explosion_subUV.uasset -------------------------------------------------------------------------------- /Content/Effects/Materials/M_radial_ramp.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Materials/M_radial_ramp.uasset -------------------------------------------------------------------------------- /Content/Effects/Materials/M_smoke_subUV.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Materials/M_smoke_subUV.uasset -------------------------------------------------------------------------------- /Content/Effects/Materials/m_flare_01.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Materials/m_flare_01.uasset -------------------------------------------------------------------------------- /Content/Effects/P_Explosion.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/P_Explosion.uasset -------------------------------------------------------------------------------- /Content/Effects/P_gold_ore_appearance.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/P_gold_ore_appearance.uasset -------------------------------------------------------------------------------- /Content/Effects/P_gold_ore_aura.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/P_gold_ore_aura.uasset -------------------------------------------------------------------------------- /Content/Effects/P_gold_ore_lost.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/P_gold_ore_lost.uasset -------------------------------------------------------------------------------- /Content/Effects/P_gold_ore_received.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/P_gold_ore_received.uasset -------------------------------------------------------------------------------- /Content/Effects/SM_plane_pivot_down.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/SM_plane_pivot_down.uasset -------------------------------------------------------------------------------- /Content/Effects/S_SandSwirl.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/S_SandSwirl.uasset -------------------------------------------------------------------------------- /Content/Effects/T_FX_RollingFlame.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/T_FX_RollingFlame.uasset -------------------------------------------------------------------------------- /Content/Effects/T_Fire_tile.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/T_Fire_tile.uasset -------------------------------------------------------------------------------- /Content/Effects/T_Flame_Tile.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/T_Flame_Tile.uasset -------------------------------------------------------------------------------- /Content/Effects/T_MeshFire_Mask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/T_MeshFire_Mask.uasset -------------------------------------------------------------------------------- /Content/Effects/T_Smoke2_Tile.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/T_Smoke2_Tile.uasset -------------------------------------------------------------------------------- /Content/Effects/Textures/T_Burst_M.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Textures/T_Burst_M.uasset -------------------------------------------------------------------------------- /Content/Effects/Textures/T_Explosion_SubUV.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Textures/T_Explosion_SubUV.uasset -------------------------------------------------------------------------------- /Content/Effects/Textures/T_Smoke_SubUV.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Textures/T_Smoke_SubUV.uasset -------------------------------------------------------------------------------- /Content/Effects/Textures/T_Smoke_Tiled_D.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/Textures/T_Smoke_Tiled_D.uasset -------------------------------------------------------------------------------- /Content/Effects/clouds_dust_detail_01.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/clouds_dust_detail_01.uasset -------------------------------------------------------------------------------- /Content/Effects/gold_ore_circle2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/gold_ore_circle2.uasset -------------------------------------------------------------------------------- /Content/Effects/gold_ore_effect.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/gold_ore_effect.uasset -------------------------------------------------------------------------------- /Content/Effects/m_flare_03.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/m_flare_03.uasset -------------------------------------------------------------------------------- /Content/Effects/round_mask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/round_mask.uasset -------------------------------------------------------------------------------- /Content/Effects/sunflare.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Effects/sunflare.uasset -------------------------------------------------------------------------------- /Content/Environment/AntiAliasedTextMaterialTranslucent_Glow.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/AntiAliasedTextMaterialTranslucent_Glow.uasset -------------------------------------------------------------------------------- /Content/Environment/MF_WorldUVs.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/MF_WorldUVs.uasset -------------------------------------------------------------------------------- /Content/Environment/MI_BlockoutSimple_Inst.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/MI_BlockoutSimple_Inst.uasset -------------------------------------------------------------------------------- /Content/Environment/M_BlockoutSimple.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/M_BlockoutSimple.uasset -------------------------------------------------------------------------------- /Content/Environment/M_Cube.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/M_Cube.uasset -------------------------------------------------------------------------------- /Content/Environment/M_Cube_Inst.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/M_Cube_Inst.uasset -------------------------------------------------------------------------------- /Content/Environment/Shape_Cube.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Environment/Shape_Cube.uasset -------------------------------------------------------------------------------- /Content/Maps/FirstPersonExampleMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Maps/FirstPersonExampleMap.umap -------------------------------------------------------------------------------- /Content/Materials/M_Objective.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Materials/M_Objective.uasset -------------------------------------------------------------------------------- /Content/Materials/SpawnBox_M.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Materials/SpawnBox_M.uasset -------------------------------------------------------------------------------- /Content/Materials/SpawnBox_M_Inst.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Materials/SpawnBox_M_Inst.uasset -------------------------------------------------------------------------------- /Content/Materials/T_DevPatterns.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Materials/T_DevPatterns.uasset -------------------------------------------------------------------------------- /Content/UI/FirstPersonCrosshair.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/UI/FirstPersonCrosshair.uasset -------------------------------------------------------------------------------- /Content/UI/WBP_GameOver.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/UI/WBP_GameOver.uasset -------------------------------------------------------------------------------- /Content/UI/WBP_GuardState.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/UI/WBP_GuardState.uasset -------------------------------------------------------------------------------- /Content/UI/WBP_ObjectiveInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/UI/WBP_ObjectiveInfo.uasset -------------------------------------------------------------------------------- /Content/Weapon/FirstPersonProjectileMesh.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/FirstPersonProjectileMesh.uasset -------------------------------------------------------------------------------- /Content/Weapon/M_FPGun.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/M_FPGun.uasset -------------------------------------------------------------------------------- /Content/Weapon/M_Projectile.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/M_Projectile.uasset -------------------------------------------------------------------------------- /Content/Weapon/SK_FPGun.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/SK_FPGun.uasset -------------------------------------------------------------------------------- /Content/Weapon/SK_FPGun_PhysicsAsset.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/SK_FPGun_PhysicsAsset.uasset -------------------------------------------------------------------------------- /Content/Weapon/SK_FPGun_Skeleton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/SK_FPGun_Skeleton.uasset -------------------------------------------------------------------------------- /Content/Weapon/T_FPGun_M.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/T_FPGun_M.uasset -------------------------------------------------------------------------------- /Content/Weapon/T_FPGun_N.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomlooman/StealthGameUdemy/9c4760e0fca90a30c8355ff55edb759906d07a5d/Content/Weapon/T_FPGun_N.uasset -------------------------------------------------------------------------------- /FPSGame.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.27", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "FPSGame", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default", 11 | "AdditionalDependencies": [ 12 | "Engine" 13 | ] 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stealth Game - Unreal Engine 4 C++ Udemy Course [Project 1] 2 | 3 | Contains finished project for "Stealth Game" as part of the Udemy Course: **[Unreal Engine 4 Mastery: Create Multiplayer Games with C++](https://www.udemy.com/unrealengine-cpp/?couponCode=TLGH14)** 4 | 5 | **Current Engine Version: 4.27** 6 | 7 | **Important:** Check the "Branches" dropdown on GitHub for all supported Unreal Engine versions** 8 | 9 | ![GitHub Branch Selection Info](https://www.tomlooman.com/wp-content/uploads/2021/01/github_branchesinfo.jpg) 10 | 11 | ![alt text](http://www.tomlooman.com/wp-content/uploads/2017/12/Thumb_MainUE4Course30_header.jpg) 12 | 13 | Features 14 | 15 | - Game Objective to Extract to an 'extraction zone' 16 | - AI Guard that senses players and noises 17 | - First Person Weapon that can distract Guard AI (Shoot Projectiles at wall) 18 | - Game loop with 'game over' spectating. 19 | - Works fully in multiplayer! 20 | 21 | Includes solutions to several challenges you create during the Udemy Course: 22 | 23 | - Black Hole (Sucking up nearby Actors) 24 | - Launch Pad (Launch Players and Actors) 25 | - Patrolling AI 26 | 27 | 28 | Based on my simplified FPS Template: https://github.com/tomlooman/SimpleFPSTemplate 29 | 30 | **Looking for a step-by-step guide to C++?** I released my **[Unreal Engine 4 Mastery: Create Multiplayer Games with C++](https://www.udemy.com/unrealengine-cpp/?couponCode=TLGH14)!** Which includes two games teaching you C++, Networking for multiplayer and multiple AI including advanced behavior trees for ranged shooter AI. 31 | 32 | Get the Udemy Course now and learn C++ for Unreal Engine 4: [DISCOUNT LINK](https://www.udemy.com/unrealengine-cpp/?couponCode=TLGH14) 33 | 34 | (Content in this project may only be used in Unreal Engine projects as per the Unreal Engine EULA) 35 | -------------------------------------------------------------------------------- /Source/FPSGame.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 FPSGameTarget : TargetRules 7 | { 8 | public FPSGameTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | ExtraModuleNames.Add("FPSGame"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/FPSGame/FPSGame.Build.cs: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class FPSGame : ModuleRules 6 | { 7 | public FPSGame(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "AIModule" }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/FPSGame/FPSGame.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "FPSGame.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, FPSGame, "FPSGame" ); 7 | -------------------------------------------------------------------------------- /Source/FPSGame/FPSGame.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/Challenges/FPSBlackHole.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSBlackHole.h" 4 | #include "Components/SphereComponent.h" 5 | #include "Components/StaticMeshComponent.h" 6 | 7 | 8 | // Sets default values 9 | AFPSBlackHole::AFPSBlackHole() 10 | { 11 | // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. 12 | PrimaryActorTick.bCanEverTick = true; 13 | 14 | MeshComp = CreateDefaultSubobject(TEXT("MeshComp")); 15 | MeshComp->SetCollisionEnabled(ECollisionEnabled::NoCollision); 16 | RootComponent = MeshComp; 17 | 18 | InnerSphereComponent = CreateDefaultSubobject(TEXT("InnerSphereComp")); 19 | InnerSphereComponent->SetSphereRadius(100); 20 | InnerSphereComponent->SetupAttachment(MeshComp); 21 | 22 | // Bind to Event 23 | InnerSphereComponent->OnComponentBeginOverlap.AddDynamic(this, &AFPSBlackHole::OverlapInnerSphere); 24 | 25 | OuterSphereComponent = CreateDefaultSubobject(TEXT("OuterSphereComp")); 26 | OuterSphereComponent->SetSphereRadius(3000); 27 | OuterSphereComponent->SetupAttachment(MeshComp); 28 | } 29 | 30 | 31 | void AFPSBlackHole::OverlapInnerSphere(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, 32 | int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) 33 | { 34 | if (OtherActor) 35 | { 36 | OtherActor->Destroy(); 37 | } 38 | } 39 | 40 | // Called every frame 41 | void AFPSBlackHole::Tick(float DeltaTime) 42 | { 43 | Super::Tick(DeltaTime); 44 | 45 | // Find all overlapping components that can collide and may be physically simulating. 46 | TArray OverlappingComps; 47 | OuterSphereComponent->GetOverlappingComponents(OverlappingComps); 48 | 49 | for (int32 i = 0; i < OverlappingComps.Num(); i++) 50 | { 51 | UPrimitiveComponent* PrimComp = OverlappingComps[i]; 52 | if (PrimComp && PrimComp->IsSimulatingPhysics()) 53 | { 54 | // the component we are looking for! It needs to be simulating in order to apply forces. 55 | 56 | const float SphereRadius = OuterSphereComponent->GetScaledSphereRadius(); 57 | const float ForceStrength = -2000; // Negative value to make it pull towards the origin instead of pushing away 58 | 59 | PrimComp->AddRadialForce(GetActorLocation(), SphereRadius, ForceStrength, ERadialImpulseFalloff::RIF_Constant, true); 60 | } 61 | } 62 | } 63 | 64 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/Challenges/FPSLaunchPad.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSLaunchPad.h" 4 | #include "Components/BoxComponent.h" 5 | #include "Components/StaticMeshComponent.h" 6 | #include "Components/ArrowComponent.h" 7 | #include "GameFramework/Character.h" 8 | #include "Kismet/GameplayStatics.h" 9 | 10 | 11 | // Sets default values 12 | AFPSLaunchPad::AFPSLaunchPad() 13 | { 14 | OverlapComp = CreateDefaultSubobject(TEXT("OverlapComp")); 15 | OverlapComp->SetBoxExtent(FVector(75, 75, 50)); 16 | RootComponent = OverlapComp; 17 | 18 | MeshComp = CreateDefaultSubobject(TEXT("MeshComp")); 19 | MeshComp->SetupAttachment(RootComponent); 20 | 21 | // Bind to Event 22 | OverlapComp->OnComponentBeginOverlap.AddDynamic(this, &AFPSLaunchPad::OverlapLaunchPad); 23 | 24 | LaunchStrength = 1500; 25 | LaunchPitchAngle = 35.0f; 26 | } 27 | 28 | 29 | void AFPSLaunchPad::OverlapLaunchPad(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) 30 | { 31 | // Make rotator with our specified 'pitch' and convert to a direction vector * intensity 32 | FRotator LaunchDirection = GetActorRotation(); 33 | LaunchDirection.Pitch += LaunchPitchAngle; 34 | FVector LaunchVelocity = LaunchDirection.Vector() * LaunchStrength; 35 | 36 | ACharacter* OtherCharacter = Cast(OtherActor); 37 | if (OtherCharacter) 38 | { 39 | // Launch Player! Both booleans give consistent launch velocity by ignoring the current player velocity 40 | OtherCharacter->LaunchCharacter(LaunchVelocity, true, true); 41 | 42 | // Spawn FX 43 | UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), ActivateLaunchPadEffect, GetActorLocation()); 44 | } 45 | // Did not overlap a player, so check if it's a physics simulating actor we can launch 46 | else if (OtherComp && OtherComp->IsSimulatingPhysics()) 47 | { 48 | OtherComp->AddImpulse(LaunchVelocity, NAME_None, true); 49 | 50 | // Spawn FX 51 | UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), ActivateLaunchPadEffect, GetActorLocation()); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSAIGuard.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSAIGuard.h" 4 | #include "Perception/PawnSensingComponent.h" 5 | #include "DrawDebugHelpers.h" 6 | #include "FPSGameMode.h" 7 | #include "Net/UnrealNetwork.h" 8 | #include "Blueprint/AIBlueprintHelperLibrary.h" 9 | 10 | 11 | // Sets default values 12 | AFPSAIGuard::AFPSAIGuard() 13 | { 14 | // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it. 15 | PrimaryActorTick.bCanEverTick = true; 16 | 17 | PawnSensingComp = CreateDefaultSubobject(TEXT("PawnSensingComp")); 18 | 19 | PawnSensingComp->OnSeePawn.AddDynamic(this, &AFPSAIGuard::OnPawnSeen); 20 | PawnSensingComp->OnHearNoise.AddDynamic(this, &AFPSAIGuard::OnNoiseHeard); 21 | 22 | GuardState = EAIState::Idle; 23 | } 24 | 25 | // Called when the game starts or when spawned 26 | void AFPSAIGuard::BeginPlay() 27 | { 28 | Super::BeginPlay(); 29 | 30 | OriginalRotation = GetActorRotation(); 31 | 32 | if (bPatrol) 33 | { 34 | MoveToNextPatrolPoint(); 35 | } 36 | } 37 | 38 | void AFPSAIGuard::OnPawnSeen(APawn* SeenPawn) 39 | { 40 | if (SeenPawn == nullptr) 41 | { 42 | return; 43 | } 44 | 45 | DrawDebugSphere(GetWorld(), SeenPawn->GetActorLocation(), 32.0f, 12, FColor::Red, false, 10.0f); 46 | 47 | AFPSGameMode* GM = Cast(GetWorld()->GetAuthGameMode()); 48 | if (GM) 49 | { 50 | GM->CompleteMission(SeenPawn, false); 51 | } 52 | 53 | SetGuardState(EAIState::Alerted); 54 | 55 | // Stop Movement if Patrolling 56 | if (Controller) 57 | { 58 | Controller->StopMovement(); 59 | } 60 | } 61 | 62 | 63 | void AFPSAIGuard::OnNoiseHeard(APawn* NoiseInstigator, const FVector& Location, float Volume) 64 | { 65 | if (GuardState == EAIState::Alerted) 66 | { 67 | return; 68 | } 69 | 70 | DrawDebugSphere(GetWorld(), Location, 32.0f, 12, FColor::Green, false, 10.0f); 71 | 72 | FVector Direction = Location - GetActorLocation(); 73 | Direction.Normalize(); 74 | 75 | FRotator NewLookAt = FRotationMatrix::MakeFromX(Direction).Rotator(); 76 | NewLookAt.Pitch = 0.0f; 77 | NewLookAt.Roll = 0.0f; 78 | 79 | SetActorRotation(NewLookAt); 80 | 81 | GetWorldTimerManager().ClearTimer(TimerHandle_ResetOrientation); 82 | GetWorldTimerManager().SetTimer(TimerHandle_ResetOrientation, this, &AFPSAIGuard::ResetOrientation, 3.0f); 83 | 84 | SetGuardState(EAIState::Suspicious); 85 | 86 | // Stop Movement if Patrolling 87 | if (Controller) 88 | { 89 | Controller->StopMovement(); 90 | } 91 | } 92 | 93 | 94 | void AFPSAIGuard::ResetOrientation() 95 | { 96 | if (GuardState == EAIState::Alerted) 97 | { 98 | return; 99 | } 100 | 101 | SetActorRotation(OriginalRotation); 102 | 103 | SetGuardState(EAIState::Idle); 104 | 105 | // Stopped investigating...if we are a patrolling pawn, pick a new patrol point to move to 106 | if (bPatrol) 107 | { 108 | MoveToNextPatrolPoint(); 109 | } 110 | } 111 | 112 | 113 | void AFPSAIGuard::OnRep_GuardState() 114 | { 115 | OnStateChanged(GuardState); 116 | } 117 | 118 | 119 | void AFPSAIGuard::SetGuardState(EAIState NewState) 120 | { 121 | if (GuardState == NewState) 122 | { 123 | return; 124 | } 125 | 126 | GuardState = NewState; 127 | OnRep_GuardState(); 128 | } 129 | 130 | 131 | // Called every frame 132 | void AFPSAIGuard::Tick(float DeltaTime) 133 | { 134 | Super::Tick(DeltaTime); 135 | 136 | // Patrol Goal Checks 137 | if (CurrentPatrolPoint) 138 | { 139 | FVector Delta = GetActorLocation() - CurrentPatrolPoint->GetActorLocation(); 140 | float DistanceToGoal = Delta.Size(); 141 | 142 | // Check if we are within 75 units of our goal, if so - pick a new patrol point 143 | // Keep in mind this includes vertical height difference! If your patrol point is in the floor, the distance to the pivot of guard is higher 144 | // In that case you may need to increase this value in your project or better align control points (ideally you remove Z axis all together by using 145 | // Alternative: float DistanceToGoal = FMath::Distance2D(GetActorLocation(), CurrentPatrolPoint->GetActorLocation()); 146 | 147 | if (DistanceToGoal < 75) 148 | { 149 | MoveToNextPatrolPoint(); 150 | } 151 | } 152 | } 153 | 154 | void AFPSAIGuard::MoveToNextPatrolPoint() 155 | { 156 | // Assign next patrol point. 157 | if (CurrentPatrolPoint == nullptr || CurrentPatrolPoint == SecondPatrolPoint) 158 | { 159 | CurrentPatrolPoint = FirstPatrolPoint; 160 | } 161 | else 162 | { 163 | CurrentPatrolPoint = SecondPatrolPoint; 164 | } 165 | 166 | UAIBlueprintHelperLibrary::SimpleMoveToActor(GetController(), CurrentPatrolPoint); 167 | } 168 | 169 | 170 | void AFPSAIGuard::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const 171 | { 172 | Super::GetLifetimeReplicatedProps(OutLifetimeProps); 173 | 174 | DOREPLIFETIME(AFPSAIGuard, GuardState); 175 | } 176 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSCharacter.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "FPSCharacter.h" 4 | #include "FPSProjectile.h" 5 | #include "Animation/AnimInstance.h" 6 | #include "Camera/CameraComponent.h" 7 | #include "Components/CapsuleComponent.h" 8 | #include "Kismet/GameplayStatics.h" 9 | #include "Components/PawnNoiseEmitterComponent.h" 10 | #include "Net/UnrealNetwork.h" 11 | 12 | 13 | AFPSCharacter::AFPSCharacter() 14 | { 15 | // Create a CameraComponent 16 | CameraComponent = CreateDefaultSubobject(TEXT("FirstPersonCamera")); 17 | CameraComponent->SetupAttachment(GetCapsuleComponent()); 18 | CameraComponent->SetRelativeLocation(FVector(0, 0, BaseEyeHeight)); // Position the camera 19 | CameraComponent->bUsePawnControlRotation = true; 20 | 21 | // Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn) 22 | Mesh1PComponent = CreateDefaultSubobject(TEXT("CharacterMesh")); 23 | Mesh1PComponent->SetupAttachment(CameraComponent); 24 | Mesh1PComponent->CastShadow = false; 25 | Mesh1PComponent->SetRelativeRotation(FRotator(2.0f, -15.0f, 5.0f)); 26 | Mesh1PComponent->SetRelativeLocation(FVector(0, 0, -160.0f)); 27 | 28 | // Create a gun mesh component 29 | GunMeshComponent = CreateDefaultSubobject(TEXT("FP_Gun")); 30 | GunMeshComponent->CastShadow = false; 31 | GunMeshComponent->SetupAttachment(Mesh1PComponent, "GripPoint"); 32 | 33 | NoiseEmitterComponent = CreateDefaultSubobject(TEXT("NoiseEmitter")); 34 | } 35 | 36 | 37 | void AFPSCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) 38 | { 39 | // set up gameplay key bindings 40 | check(PlayerInputComponent); 41 | 42 | PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump); 43 | PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AFPSCharacter::Fire); 44 | 45 | PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward); 46 | PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight); 47 | 48 | PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput); 49 | PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput); 50 | } 51 | 52 | 53 | void AFPSCharacter::Tick(float DeltaTime) 54 | { 55 | Super::Tick(DeltaTime); 56 | 57 | if (!IsLocallyControlled()) 58 | { 59 | FRotator NewRot = CameraComponent->GetRelativeRotation(); 60 | NewRot.Pitch = RemoteViewPitch * 360.0f / 255.0f; 61 | 62 | CameraComponent->SetRelativeRotation(NewRot); 63 | } 64 | } 65 | 66 | 67 | void AFPSCharacter::Fire() 68 | { 69 | ServerFire(); 70 | 71 | // try and play the sound if specified 72 | if (FireSound) 73 | { 74 | UGameplayStatics::PlaySoundAtLocation(this, FireSound, GetActorLocation()); 75 | } 76 | 77 | // try and play a firing animation if specified 78 | if (FireAnimation) 79 | { 80 | // Get the animation object for the arms mesh 81 | UAnimInstance* AnimInstance = Mesh1PComponent->GetAnimInstance(); 82 | if (AnimInstance) 83 | { 84 | AnimInstance->PlaySlotAnimationAsDynamicMontage(FireAnimation, "Arms", 0.0f); 85 | } 86 | } 87 | } 88 | 89 | 90 | void AFPSCharacter::ServerFire_Implementation() 91 | { 92 | // try and fire a projectile 93 | if (ProjectileClass) 94 | { 95 | FVector MuzzleLocation = GunMeshComponent->GetSocketLocation("Muzzle"); 96 | FRotator MuzzleRotation = GunMeshComponent->GetSocketRotation("Muzzle"); 97 | 98 | //Set Spawn Collision Handling Override 99 | FActorSpawnParameters ActorSpawnParams; 100 | ActorSpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButDontSpawnIfColliding; 101 | ActorSpawnParams.Instigator = this; 102 | 103 | // spawn the projectile at the muzzle 104 | GetWorld()->SpawnActor(ProjectileClass, MuzzleLocation, MuzzleRotation, ActorSpawnParams); 105 | } 106 | } 107 | 108 | 109 | bool AFPSCharacter::ServerFire_Validate() 110 | { 111 | return true; 112 | } 113 | 114 | 115 | void AFPSCharacter::MoveForward(float Value) 116 | { 117 | if (Value != 0.0f) 118 | { 119 | // add movement in that direction 120 | AddMovementInput(GetActorForwardVector(), Value); 121 | } 122 | } 123 | 124 | 125 | void AFPSCharacter::MoveRight(float Value) 126 | { 127 | if (Value != 0.0f) 128 | { 129 | // add movement in that direction 130 | AddMovementInput(GetActorRightVector(), Value); 131 | } 132 | } 133 | 134 | 135 | void AFPSCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const 136 | { 137 | Super::GetLifetimeReplicatedProps(OutLifetimeProps); 138 | 139 | DOREPLIFETIME(AFPSCharacter, bIsCarryingObjective); 140 | 141 | //DOREPLIFETIME_CONDITION(AFPSCharacter, bIsCarryingObjective, COND_OwnerOnly); 142 | } 143 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSExtractionZone.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSExtractionZone.h" 4 | #include "Components/BoxComponent.h" 5 | #include "Components/DecalComponent.h" 6 | #include "FPSCharacter.h" 7 | #include "FPSGameMode.h" 8 | #include "Kismet/GameplayStatics.h" 9 | 10 | 11 | // Sets default values 12 | AFPSExtractionZone::AFPSExtractionZone() 13 | { 14 | OverlapComp = CreateDefaultSubobject(TEXT("OverlapComp")); 15 | OverlapComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly); 16 | OverlapComp->SetCollisionResponseToAllChannels(ECR_Ignore); 17 | OverlapComp->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap); 18 | OverlapComp->SetBoxExtent(FVector(200.0f)); 19 | RootComponent = OverlapComp; 20 | 21 | OverlapComp->SetHiddenInGame(false); 22 | 23 | OverlapComp->OnComponentBeginOverlap.AddDynamic(this, &AFPSExtractionZone::HandleOverlap); 24 | 25 | DecalComp = CreateDefaultSubobject(TEXT("DecalComp")); 26 | DecalComp->DecalSize = FVector(200.0f, 200.0f, 200.0f); 27 | DecalComp->SetupAttachment(RootComponent); 28 | } 29 | 30 | 31 | void AFPSExtractionZone::HandleOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, 32 | int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) 33 | { 34 | AFPSCharacter* MyPawn = Cast(OtherActor); 35 | if (MyPawn == nullptr) 36 | { 37 | return; 38 | } 39 | 40 | if (MyPawn->bIsCarryingObjective) 41 | { 42 | AFPSGameMode* GM = Cast(GetWorld()->GetAuthGameMode()); 43 | if (GM) 44 | { 45 | GM->CompleteMission(MyPawn, true); 46 | } 47 | } 48 | else 49 | { 50 | UGameplayStatics::PlaySound2D(this, ObjectiveMissingSound); 51 | } 52 | 53 | UE_LOG(LogTemp, Log, TEXT("Overlapped with extraction zone!")); 54 | } 55 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSGameMode.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "FPSGameMode.h" 4 | #include "FPSHUD.h" 5 | #include "FPSCharacter.h" 6 | #include "UObject/ConstructorHelpers.h" 7 | #include "Kismet/GameplayStatics.h" 8 | #include "FPSGameState.h" 9 | 10 | AFPSGameMode::AFPSGameMode() 11 | { 12 | // set default pawn class to our Blueprinted character 13 | static ConstructorHelpers::FClassFinder PlayerPawnClassFinder(TEXT("/Game/Blueprints/BP_Player")); 14 | DefaultPawnClass = PlayerPawnClassFinder.Class; 15 | 16 | // use our custom HUD class 17 | HUDClass = AFPSHUD::StaticClass(); 18 | 19 | GameStateClass = AFPSGameState::StaticClass(); 20 | } 21 | 22 | 23 | void AFPSGameMode::CompleteMission(APawn* InstigatorPawn, bool bMissionSuccess) 24 | { 25 | if (InstigatorPawn) 26 | { 27 | if (SpectatingViewpointClass) 28 | { 29 | TArray ReturnedActors; 30 | UGameplayStatics::GetAllActorsOfClass(this, SpectatingViewpointClass, ReturnedActors); 31 | 32 | // Change viewtarget if any valid actor found 33 | if (ReturnedActors.Num() > 0) 34 | { 35 | AActor* NewViewTarget = ReturnedActors[0]; 36 | 37 | for (FConstPlayerControllerIterator It = GetWorld()->GetPlayerControllerIterator(); It; It++) 38 | { 39 | APlayerController* PC = It->Get(); 40 | if (PC) 41 | { 42 | PC->SetViewTargetWithBlend(NewViewTarget, 0.5f, EViewTargetBlendFunction::VTBlend_Cubic); 43 | } 44 | } 45 | } 46 | } 47 | else 48 | { 49 | UE_LOG(LogTemp, Warning, TEXT("SpectatingViewpointClass is nullptr. Please update GameMode class with valid subclass. Cannot change spectating view target.")); 50 | } 51 | } 52 | 53 | AFPSGameState* GS = GetGameState(); 54 | if (GS) 55 | { 56 | GS->MulticastOnMissionComplete(InstigatorPawn, bMissionSuccess); 57 | } 58 | 59 | 60 | OnMissionCompleted(InstigatorPawn, bMissionSuccess); 61 | } 62 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSGameState.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSGameState.h" 4 | #include "FPSPlayerController.h" 5 | 6 | 7 | 8 | void AFPSGameState::MulticastOnMissionComplete_Implementation(APawn* InstigatorPawn, bool bMissionSuccess) 9 | { 10 | for (FConstPlayerControllerIterator It = GetWorld()->GetPlayerControllerIterator(); It; It++) 11 | { 12 | AFPSPlayerController* PC = Cast(It->Get()); 13 | if (PC && PC->IsLocalController()) 14 | { 15 | PC->OnMissionCompleted(InstigatorPawn, bMissionSuccess); 16 | 17 | // Disable Input 18 | APawn* MyPawn = PC->GetPawn(); 19 | if (MyPawn) 20 | { 21 | MyPawn->DisableInput(PC); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSHUD.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "FPSHUD.h" 4 | #include "Engine/Canvas.h" 5 | #include "Engine/Texture2D.h" 6 | #include "TextureResource.h" 7 | #include "CanvasItem.h" 8 | #include "UObject/ConstructorHelpers.h" 9 | 10 | AFPSHUD::AFPSHUD() 11 | { 12 | // Set the crosshair texture 13 | static ConstructorHelpers::FObjectFinder CrosshairTexObj(TEXT("/Game/UI/FirstPersonCrosshair")); 14 | CrosshairTex = CrosshairTexObj.Object; 15 | } 16 | 17 | 18 | void AFPSHUD::DrawHUD() 19 | { 20 | Super::DrawHUD(); 21 | 22 | // Draw very simple crosshair 23 | 24 | // find center of the Canvas 25 | const FVector2D Center(Canvas->ClipX * 0.5f, Canvas->ClipY * 0.5f); 26 | 27 | // offset by half the texture's dimensions so that the center of the texture aligns with the center of the Canvas 28 | const FVector2D CrosshairDrawPosition( (Center.X), 29 | (Center.Y + 20.0f)); 30 | 31 | // draw the crosshair 32 | FCanvasTileItem TileItem( CrosshairDrawPosition, CrosshairTex->Resource, FLinearColor::White); 33 | TileItem.BlendMode = SE_BLEND_Translucent; 34 | Canvas->DrawItem( TileItem ); 35 | } 36 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSObjectiveActor.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSObjectiveActor.h" 4 | #include "Components/StaticMeshComponent.h" 5 | #include "Components/SphereComponent.h" 6 | #include "Kismet/GameplayStatics.h" 7 | #include "FPSCharacter.h" 8 | 9 | 10 | // Sets default values 11 | AFPSObjectiveActor::AFPSObjectiveActor() 12 | { 13 | MeshComp = CreateDefaultSubobject(TEXT("MeshComp")); 14 | MeshComp->SetCollisionEnabled(ECollisionEnabled::NoCollision); 15 | RootComponent = MeshComp; 16 | 17 | SphereComp = CreateDefaultSubobject(TEXT("SphereComp")); 18 | SphereComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly); 19 | SphereComp->SetCollisionResponseToAllChannels(ECR_Ignore); 20 | SphereComp->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap); 21 | SphereComp->SetupAttachment(MeshComp); 22 | 23 | SetReplicates(true); 24 | } 25 | 26 | // Called when the game starts or when spawned 27 | void AFPSObjectiveActor::BeginPlay() 28 | { 29 | Super::BeginPlay(); 30 | 31 | PlayEffects(); 32 | } 33 | 34 | void AFPSObjectiveActor::PlayEffects() 35 | { 36 | UGameplayStatics::SpawnEmitterAtLocation(this, PickupFX, GetActorLocation()); 37 | } 38 | 39 | 40 | void AFPSObjectiveActor::NotifyActorBeginOverlap(AActor* OtherActor) 41 | { 42 | Super::NotifyActorBeginOverlap(OtherActor); 43 | 44 | PlayEffects(); 45 | 46 | if (HasAuthority()) 47 | { 48 | AFPSCharacter* MyCharacter = Cast(OtherActor); 49 | if (MyCharacter) 50 | { 51 | MyCharacter->bIsCarryingObjective = true; 52 | 53 | Destroy(); 54 | } 55 | } 56 | } 57 | 58 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSPlayerController.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "FPSPlayerController.h" 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Source/FPSGame/Private/FPSProjectile.cpp: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "FPSProjectile.h" 4 | #include "GameFramework/ProjectileMovementComponent.h" 5 | #include "Components/SphereComponent.h" 6 | 7 | AFPSProjectile::AFPSProjectile() 8 | { 9 | // Use a sphere as a simple collision representation 10 | CollisionComp = CreateDefaultSubobject(TEXT("SphereComp")); 11 | CollisionComp->InitSphereRadius(5.0f); 12 | CollisionComp->SetCollisionProfileName("Projectile"); 13 | CollisionComp->OnComponentHit.AddDynamic(this, &AFPSProjectile::OnHit); // set up a notification for when this component hits something blocking 14 | 15 | // Players can't walk on it 16 | CollisionComp->SetWalkableSlopeOverride(FWalkableSlopeOverride(WalkableSlope_Unwalkable, 0.f)); 17 | CollisionComp->CanCharacterStepUpOn = ECB_No; 18 | 19 | // Set as root component 20 | RootComponent = CollisionComp; 21 | 22 | // Use a ProjectileMovementComponent to govern this projectile's movement 23 | ProjectileMovement = CreateDefaultSubobject(TEXT("ProjectileComp")); 24 | ProjectileMovement->UpdatedComponent = CollisionComp; 25 | ProjectileMovement->InitialSpeed = 3000.f; 26 | ProjectileMovement->MaxSpeed = 3000.f; 27 | ProjectileMovement->bRotationFollowsVelocity = true; 28 | ProjectileMovement->bShouldBounce = true; 29 | 30 | // Die after 3 seconds by default 31 | InitialLifeSpan = 3.0f; 32 | 33 | SetReplicates(true); 34 | SetReplicateMovement(true); 35 | } 36 | 37 | 38 | void AFPSProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) 39 | { 40 | // Only add impulse and destroy projectile if we hit a physics 41 | if ((OtherActor != NULL) && (OtherActor != this) && (OtherComp != NULL) && OtherComp->IsSimulatingPhysics()) 42 | { 43 | OtherComp->AddImpulseAtLocation(GetVelocity() * 100.0f, GetActorLocation()); 44 | } 45 | 46 | if (HasAuthority()) 47 | { 48 | MakeNoise(1.0f, GetInstigator()); 49 | 50 | Destroy(); 51 | } 52 | } -------------------------------------------------------------------------------- /Source/FPSGame/Public/Challenges/FPSBlackHole.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 "GameFramework/Actor.h" 7 | #include "FPSBlackHole.generated.h" 8 | 9 | class USphereComponent; 10 | class UStaticMeshComponent; 11 | 12 | UCLASS() 13 | class FPSGAME_API AFPSBlackHole : public AActor 14 | { 15 | GENERATED_BODY() 16 | 17 | public: 18 | // Sets default values for this actor's properties 19 | AFPSBlackHole(); 20 | 21 | protected: 22 | 23 | UPROPERTY(VisibleAnywhere, Category = "Components") 24 | UStaticMeshComponent* MeshComp; 25 | 26 | /* Inner sphere destroys the overlapping components */ 27 | UPROPERTY(VisibleAnywhere, Category = "Components") 28 | USphereComponent* InnerSphereComponent; 29 | 30 | /* Outer sphere pulls components (that are physically simulating) towards the centre of the actor */ 31 | UPROPERTY(VisibleAnywhere, Category = "Components") 32 | USphereComponent* OuterSphereComponent; 33 | 34 | // Marked with ufunction to bind to overlap event 35 | UFUNCTION() 36 | void OverlapInnerSphere(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); 37 | 38 | public: 39 | // Called every frame 40 | virtual void Tick(float DeltaTime) override; 41 | 42 | 43 | 44 | }; 45 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/Challenges/FPSLaunchPad.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 "GameFramework/Actor.h" 7 | #include "FPSLaunchPad.generated.h" 8 | 9 | class UBoxComponent; 10 | class UStaticMeshComponent; 11 | class UArrowComponent; 12 | 13 | 14 | UCLASS() 15 | class FPSGAME_API AFPSLaunchPad : public AActor 16 | { 17 | GENERATED_BODY() 18 | 19 | public: 20 | // Sets default values for this actor's properties 21 | AFPSLaunchPad(); 22 | 23 | protected: 24 | 25 | UPROPERTY(VisibleAnywhere, Category = "Components") 26 | UStaticMeshComponent* MeshComp; 27 | 28 | UPROPERTY(VisibleAnywhere, Category = "Components") 29 | UBoxComponent* OverlapComp; 30 | 31 | // Marked with ufunction to bind to overlap event 32 | UFUNCTION() 33 | void OverlapLaunchPad(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); 34 | 35 | /* Total impulse added to the character on overlap 36 | Marked 'EditInstanceOnly' to allow in-level editing of this property per instance. */ 37 | UPROPERTY(EditInstanceOnly, Category = "LaunchPad") 38 | float LaunchStrength; 39 | 40 | /* Angle added on top of actor rotation to launch the character. 41 | Marked 'EditInstanceOnly' to allow in-level editing of this property per instance. */ 42 | UPROPERTY(EditInstanceOnly, Category = "LaunchPad") 43 | float LaunchPitchAngle; 44 | 45 | /* Effect to play when activating launch pad */ 46 | UPROPERTY(EditDefaultsOnly, Category = "LaunchPad") 47 | UParticleSystem* ActivateLaunchPadEffect; 48 | 49 | }; 50 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSAIGuard.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 "GameFramework/Character.h" 7 | #include "FPSAIGuard.generated.h" 8 | 9 | class UPawnSensingComponent; 10 | 11 | 12 | UENUM(BlueprintType) 13 | enum class EAIState : uint8 14 | { 15 | Idle, 16 | 17 | Suspicious, 18 | 19 | Alerted 20 | }; 21 | 22 | 23 | UCLASS() 24 | class FPSGAME_API AFPSAIGuard : public ACharacter 25 | { 26 | GENERATED_BODY() 27 | 28 | public: 29 | // Sets default values for this character's properties 30 | AFPSAIGuard(); 31 | 32 | protected: 33 | // Called when the game starts or when spawned 34 | virtual void BeginPlay() override; 35 | 36 | UPROPERTY(VisibleAnywhere, Category = "Components") 37 | UPawnSensingComponent* PawnSensingComp; 38 | 39 | UFUNCTION() 40 | void OnPawnSeen(APawn* SeenPawn); 41 | 42 | UFUNCTION() 43 | void OnNoiseHeard(APawn* NoiseInstigator, const FVector& Location, float Volume); 44 | 45 | FRotator OriginalRotation; 46 | 47 | UFUNCTION() 48 | void ResetOrientation(); 49 | 50 | FTimerHandle TimerHandle_ResetOrientation; 51 | 52 | UPROPERTY(ReplicatedUsing=OnRep_GuardState) 53 | EAIState GuardState; 54 | 55 | UFUNCTION() 56 | void OnRep_GuardState(); 57 | 58 | void SetGuardState(EAIState NewState); 59 | 60 | UFUNCTION(BlueprintImplementableEvent, Category = "AI") 61 | void OnStateChanged(EAIState NewState); 62 | 63 | public: 64 | // Called every frame 65 | virtual void Tick(float DeltaTime) override; 66 | 67 | 68 | protected: 69 | 70 | // CHALLENGE CODE 71 | 72 | /* Let the guard go on patrol */ 73 | UPROPERTY(EditInstanceOnly, Category = "AI") 74 | bool bPatrol; 75 | 76 | /* First of two patrol points to patrol between */ 77 | UPROPERTY(EditInstanceOnly, Category = "AI", meta = (EditCondition="bPatrol")) 78 | AActor* FirstPatrolPoint; 79 | 80 | /* Second of two patrol points to patrol between */ 81 | UPROPERTY(EditInstanceOnly, Category = "AI", meta = (EditCondition = "bPatrol")) 82 | AActor* SecondPatrolPoint; 83 | 84 | // The current point the actor is either moving to or standing at 85 | AActor* CurrentPatrolPoint; 86 | 87 | void MoveToNextPatrolPoint(); 88 | 89 | 90 | }; 91 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSCharacter.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 "FPSCharacter.generated.h" 8 | 9 | class UInputComponent; 10 | class USkeletalMeshComponent; 11 | class UCameraComponent; 12 | class AFPSProjectile; 13 | class USoundBase; 14 | class UAnimSequence; 15 | class UPawnNoiseEmitterComponent; 16 | 17 | 18 | UCLASS() 19 | class AFPSCharacter : public ACharacter 20 | { 21 | GENERATED_BODY() 22 | 23 | protected: 24 | 25 | /** Pawn mesh: 1st person view */ 26 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Mesh") 27 | USkeletalMeshComponent* Mesh1PComponent; 28 | 29 | /** Gun mesh: 1st person view (seen only by self) */ 30 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Mesh") 31 | USkeletalMeshComponent* GunMeshComponent; 32 | 33 | /** First person camera */ 34 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera") 35 | UCameraComponent* CameraComponent; 36 | 37 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "AI") 38 | UPawnNoiseEmitterComponent* NoiseEmitterComponent; 39 | 40 | public: 41 | AFPSCharacter(); 42 | 43 | /** Projectile class to spawn */ 44 | UPROPERTY(EditDefaultsOnly, Category="Projectile") 45 | TSubclassOf ProjectileClass; 46 | 47 | /** Sound to play each time we fire */ 48 | UPROPERTY(EditDefaultsOnly, Category="Gameplay") 49 | USoundBase* FireSound; 50 | 51 | /** AnimMontage to play each time we fire */ 52 | UPROPERTY(EditDefaultsOnly, Category = "Gameplay") 53 | UAnimSequence* FireAnimation; 54 | 55 | UPROPERTY(Replicated, BlueprintReadOnly, Category = "Gameplay") 56 | bool bIsCarryingObjective; 57 | 58 | protected: 59 | 60 | /** Fires a projectile. */ 61 | void Fire(); 62 | 63 | UFUNCTION(Server, Reliable, WithValidation) 64 | void ServerFire(); 65 | 66 | /** Handles moving forward/backward */ 67 | void MoveForward(float Val); 68 | 69 | /** Handles strafing movement, left and right */ 70 | void MoveRight(float Val); 71 | 72 | virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override; 73 | 74 | public: 75 | /** Returns Mesh1P subobject **/ 76 | USkeletalMeshComponent* GetMesh1P() const { return Mesh1PComponent; } 77 | 78 | /** Returns FirstPersonCameraComponent subobject **/ 79 | UCameraComponent* GetFirstPersonCameraComponent() const { return CameraComponent; } 80 | 81 | virtual void Tick(float DeltaTime) override; 82 | }; 83 | 84 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSExtractionZone.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 "GameFramework/Actor.h" 7 | #include "FPSExtractionZone.generated.h" 8 | 9 | class UBoxComponent; 10 | 11 | UCLASS() 12 | class FPSGAME_API AFPSExtractionZone : public AActor 13 | { 14 | GENERATED_BODY() 15 | 16 | public: 17 | // Sets default values for this actor's properties 18 | AFPSExtractionZone(); 19 | 20 | protected: 21 | 22 | UPROPERTY(VisibleAnywhere, Category = "Components") 23 | UBoxComponent* OverlapComp; 24 | 25 | UPROPERTY(VisibleAnywhere, Category = "Components") 26 | UDecalComponent* DecalComp; 27 | 28 | UFUNCTION() 29 | void HandleOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); 30 | 31 | UPROPERTY(EditDefaultsOnly, Category = "Sounds") 32 | USoundBase* ObjectiveMissingSound; 33 | 34 | }; 35 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSGameMode.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 "FPSGameMode.generated.h" 8 | 9 | UCLASS() 10 | class AFPSGameMode : public AGameModeBase 11 | { 12 | GENERATED_BODY() 13 | 14 | protected: 15 | 16 | UPROPERTY(EditDefaultsOnly, Category = "Spectating") 17 | TSubclassOf SpectatingViewpointClass; 18 | 19 | public: 20 | 21 | AFPSGameMode(); 22 | 23 | void CompleteMission(APawn* InstigatorPawn, bool bMissionSuccess); 24 | 25 | UFUNCTION(BlueprintImplementableEvent, Category = "GameMode") 26 | void OnMissionCompleted(APawn* InstigatorPawn, bool bMissionSuccess); 27 | }; 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSGameState.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 "GameFramework/GameStateBase.h" 7 | #include "FPSGameState.generated.h" 8 | 9 | /** 10 | * 11 | */ 12 | UCLASS() 13 | class FPSGAME_API AFPSGameState : public AGameStateBase 14 | { 15 | GENERATED_BODY() 16 | 17 | public: 18 | 19 | UFUNCTION(NetMulticast, Reliable) 20 | void MulticastOnMissionComplete(APawn* InstigatorPawn, bool bMissionSuccess); 21 | 22 | 23 | }; 24 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSHUD.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 "FPSHUD.generated.h" 8 | 9 | class UTexture2D; 10 | 11 | UCLASS() 12 | class AFPSHUD : public AHUD 13 | { 14 | GENERATED_BODY() 15 | 16 | protected: 17 | 18 | /** Crosshair asset pointer */ 19 | UTexture2D* CrosshairTex; 20 | 21 | public: 22 | 23 | AFPSHUD(); 24 | 25 | /** Primary draw call for the HUD */ 26 | virtual void DrawHUD() override; 27 | 28 | }; 29 | 30 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSObjectiveActor.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 "GameFramework/Actor.h" 7 | #include "FPSObjectiveActor.generated.h" 8 | 9 | class USphereComponent; 10 | 11 | UCLASS() 12 | class FPSGAME_API AFPSObjectiveActor : public AActor 13 | { 14 | GENERATED_BODY() 15 | 16 | public: 17 | // Sets default values for this actor's properties 18 | AFPSObjectiveActor(); 19 | 20 | protected: 21 | 22 | UPROPERTY(VisibleAnywhere, Category = "Components") 23 | UStaticMeshComponent* MeshComp; 24 | 25 | UPROPERTY(VisibleAnywhere, Category = "Components") 26 | USphereComponent* SphereComp; 27 | 28 | UPROPERTY(EditDefaultsOnly, Category = "Effects") 29 | UParticleSystem* PickupFX; 30 | 31 | // Called when the game starts or when spawned 32 | virtual void BeginPlay() override; 33 | 34 | void PlayEffects(); 35 | 36 | public: 37 | 38 | virtual void NotifyActorBeginOverlap(AActor* OtherActor) override; 39 | 40 | }; 41 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSPlayerController.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 "GameFramework/PlayerController.h" 7 | #include "FPSPlayerController.generated.h" 8 | 9 | /** 10 | * 11 | */ 12 | UCLASS() 13 | class FPSGAME_API AFPSPlayerController : public APlayerController 14 | { 15 | GENERATED_BODY() 16 | 17 | public: 18 | 19 | UFUNCTION(BlueprintImplementableEvent, Category = "PlayerController") 20 | void OnMissionCompleted(APawn* InstigatorPawn, bool bMissionSuccess); 21 | 22 | 23 | }; 24 | -------------------------------------------------------------------------------- /Source/FPSGame/Public/FPSProjectile.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/Actor.h" 7 | #include "FPSProjectile.generated.h" 8 | 9 | 10 | class UProjectileMovementComponent; 11 | class USphereComponent; 12 | 13 | 14 | UCLASS() 15 | class AFPSProjectile : public AActor 16 | { 17 | GENERATED_BODY() 18 | 19 | protected: 20 | 21 | /** Sphere collision component */ 22 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category= "Projectile") 23 | USphereComponent* CollisionComp; 24 | 25 | /** Projectile movement component */ 26 | UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Movement") 27 | UProjectileMovementComponent* ProjectileMovement; 28 | 29 | public: 30 | 31 | AFPSProjectile(); 32 | 33 | /** called when projectile hits something */ 34 | UFUNCTION() 35 | void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); 36 | 37 | /** Returns CollisionComp subobject **/ 38 | USphereComponent* GetCollisionComp() const { return CollisionComp; } 39 | 40 | /** Returns ProjectileMovement subobject **/ 41 | UProjectileMovementComponent* GetProjectileMovement() const { return ProjectileMovement; } 42 | }; 43 | 44 | -------------------------------------------------------------------------------- /Source/FPSGameEditor.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 FPSGameEditorTarget : TargetRules 7 | { 8 | public FPSGameEditorTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | ExtraModuleNames.Add("FPSGame"); 12 | } 13 | } 14 | --------------------------------------------------------------------------------