From d3b4f002d361d10852d4ae7519ae5d0360875f9e Mon Sep 17 00:00:00 2001 From: Jonasz Bigda Date: Sun, 30 Jul 2023 16:30:14 +0200 Subject: [PATCH] Init --- Config/DefaultEditor.ini | 0 Config/DefaultEngine.ini | 70 +++++++++++++++ Config/DefaultGame.ini | 3 + Config/DefaultInput.ini | 85 ++++++++++++++++++ Content/Blueprints/BP_LevelChunk.uasset | Bin 0 -> 51525 bytes .../SpawnableElements/BP_SpawnableBox.uasset | Bin 0 -> 39918 bytes .../BP_SpawnableElementBase.uasset | Bin 0 -> 22333 bytes .../BP_SpawnableSphere.uasset | Bin 0 -> 40513 bytes Content/Levels/Main.umap | Bin 0 -> 74492 bytes Source/UE5_GridTool.Target.cs | 15 ++++ Source/UE5_GridTool/LevelChunk.cpp | 84 +++++++++++++++++ Source/UE5_GridTool/LevelChunk.h | 55 ++++++++++++ Source/UE5_GridTool/LevelGridSlot.cpp | 37 ++++++++ Source/UE5_GridTool/LevelGridSlot.h | 36 ++++++++ Source/UE5_GridTool/SpawnableElement.cpp | 7 ++ Source/UE5_GridTool/SpawnableElement.h | 21 +++++ Source/UE5_GridTool/UE5_GridTool.Build.cs | 23 +++++ Source/UE5_GridTool/UE5_GridTool.cpp | 6 ++ Source/UE5_GridTool/UE5_GridTool.h | 6 ++ .../UE5_GridTool/UE5_GridToolGameModeBase.cpp | 5 ++ .../UE5_GridTool/UE5_GridToolGameModeBase.h | 17 ++++ Source/UE5_GridToolEditor.Target.cs | 15 ++++ UE5_GridTool.uproject | 25 ++++++ 23 files changed, 510 insertions(+) create mode 100644 Config/DefaultEditor.ini create mode 100644 Config/DefaultEngine.ini create mode 100644 Config/DefaultGame.ini create mode 100644 Config/DefaultInput.ini create mode 100644 Content/Blueprints/BP_LevelChunk.uasset create mode 100644 Content/Blueprints/SpawnableElements/BP_SpawnableBox.uasset create mode 100644 Content/Blueprints/SpawnableElements/BP_SpawnableElementBase.uasset create mode 100644 Content/Blueprints/SpawnableElements/BP_SpawnableSphere.uasset create mode 100644 Content/Levels/Main.umap create mode 100644 Source/UE5_GridTool.Target.cs create mode 100644 Source/UE5_GridTool/LevelChunk.cpp create mode 100644 Source/UE5_GridTool/LevelChunk.h create mode 100644 Source/UE5_GridTool/LevelGridSlot.cpp create mode 100644 Source/UE5_GridTool/LevelGridSlot.h create mode 100644 Source/UE5_GridTool/SpawnableElement.cpp create mode 100644 Source/UE5_GridTool/SpawnableElement.h create mode 100644 Source/UE5_GridTool/UE5_GridTool.Build.cs create mode 100644 Source/UE5_GridTool/UE5_GridTool.cpp create mode 100644 Source/UE5_GridTool/UE5_GridTool.h create mode 100644 Source/UE5_GridTool/UE5_GridToolGameModeBase.cpp create mode 100644 Source/UE5_GridTool/UE5_GridToolGameModeBase.h create mode 100644 Source/UE5_GridToolEditor.Target.cs create mode 100644 UE5_GridTool.uproject diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000..e69de29 diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000..ee01ca3 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,70 @@ + + +[/Script/EngineSettings.GameMapsSettings] +GameDefaultMap=/Game/Levels/Main.Main +EditorStartupMap=/Game/Levels/Main.Main + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +-D3D12TargetedShaderFormats=PCD3D_SM5 ++D3D12TargetedShaderFormats=PCD3D_SM6 +-D3D11TargetedShaderFormats=PCD3D_SM5 ++D3D11TargetedShaderFormats=PCD3D_SM5 +Compiler=Default +AudioSampleRate=48000 +AudioCallbackBufferFrameSize=1024 +AudioNumBuffersToEnqueue=1 +AudioMaxChannels=0 +AudioNumSourceWorkers=4 +SpatializationPlugin= +SourceDataOverridePlugin= +ReverbPlugin= +OcclusionPlugin= +CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0) +CacheSizeKB=65536 +MaxChunkSizeOverrideKB=0 +bResampleForDevice=False +MaxSampleRate=48000.000000 +HighSampleRate=32000.000000 +MedSampleRate=24000.000000 +LowSampleRate=12000.000000 +MinSampleRate=8000.000000 +CompressionQualityModifier=1.000000 +AutoStreamingThreshold=0.000000 +SoundCueCookQualityIndex=-1 + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/Engine.RendererSettings] +r.GenerateMeshDistanceFields=True +r.DynamicGlobalIlluminationMethod=1 +r.ReflectionMethod=1 +r.Shadow.Virtual.Enable=1 +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True + +[/Script/WorldPartitionEditor.WorldPartitionEditorSettings] +CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' + +[/Script/Engine.Engine] ++ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/UE5_GridTool") ++ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/UE5_GridTool") ++ActiveClassRedirects=(OldClassName="TP_BlankGameModeBase",NewClassName="UE5_GridToolGameModeBase") + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=1E5C251E4FE5E97D0DE06C9C4F292D89 +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000..fea94ae --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,3 @@ + +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=8541077E41E6FCEB2E0EE49C8DCD06BF diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..4cc3605 --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,85 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bShouldFlushPressedKeysOnViewportFocusLost=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde ++ConsoleKeys=Caret + diff --git a/Content/Blueprints/BP_LevelChunk.uasset b/Content/Blueprints/BP_LevelChunk.uasset new file mode 100644 index 0000000000000000000000000000000000000000..062e92f536f6c926b87526f12bdf70b6e6349cd5 GIT binary patch literal 51525 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 literal 0 HcmV?d00001 diff --git a/Content/Blueprints/SpawnableElements/BP_SpawnableBox.uasset b/Content/Blueprints/SpawnableElements/BP_SpawnableBox.uasset new file mode 100644 index 0000000000000000000000000000000000000000..4b122d2166cc0c659267594368a5deb36e26dfb6 GIT binary patch literal 39918 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 MGf(7kW{LLy2Zb6NP5=M^ literal 0 HcmV?d00001 diff --git a/Content/Blueprints/SpawnableElements/BP_SpawnableSphere.uasset b/Content/Blueprints/SpawnableElements/BP_SpawnableSphere.uasset new file mode 100644 index 0000000000000000000000000000000000000000..14991e28cca369db471df3753df0d09ca2947e1d GIT binary patch literal 40513 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
m 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 literal 0 HcmV?d00001 diff --git a/Content/Levels/Main.umap b/Content/Levels/Main.umap new file mode 100644 index 0000000000000000000000000000000000000000..5990bf337c7e1d0517a9ec4071d248c3ec38c3c5 GIT binary patch literal 74492 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 d?{w{}JF5YK?htWD?oI4l(TEXT("RootComponent")); + SetupGrid(); +} + +// Called when the game starts or when spawned +void ALevelChunk::BeginPlay() +{ + Super::BeginPlay(); + CleanupComponents(); +} + +void ALevelChunk::SetupGrid() { + // Set XYZ base points. Next we will offset each next slot from these points + float ZBase = -(100.f * (SizeZ - 1) / 2); + float XBase = -(100.f * (SizeX - 1) / 2); + float YBase = -(100.f * (SizeY - 1) / 2); + int32 Count = 0; + + // Z axis loop + for (int32 z = 0; z < SizeZ; ++z) { + float ZOffset = ZBase + (100.f * z); + + // X axis loop + for (int32 x = 0; x < SizeX; ++x) { + float XOffset = XBase + (100.f * x); + + // Y axis loop + for (int32 y = 0; y < SizeY; ++y) { + float YOffset = YBase + (100.f * y); + ULevelGridSlot* ThisSlot = CreateDefaultSubobject(*FString::Printf(TEXT("GridSlot %i"), Count)); + UStaticMeshComponent* PreviewMesh = CreateDefaultSubobject(*FString::Printf(TEXT("PreviewMesh %i"), Count)); + ThisSlot->Index = Count; + ThisSlot->SetupAttachment(RootComponent); + ThisSlot->EditorScale = 0.25f; + ThisSlot->SetRelativeLocation(FVector(XOffset, YOffset, ZOffset)); + PreviewMesh->SetRelativeLocation(FVector(XOffset, YOffset, ZOffset)); + Slots.Add(ThisSlot); + PreviewMeshes.Add(PreviewMesh); + Count++; + } + } + } +} + +// Preview elements --- Go through all of the slots and if given slot has any class chosen, and that class has any static mesh, set corresponding PreviewMesh to display that mesh. +void ALevelChunk::PreviewElements() { + for (ULevelGridSlot* Slot : Slots) { + if (IsValid(Slot)) { + + UClass* Class = Slot->ResolveClass(); + if (IsValid(Class)) { + + ASpawnableElement* DefaultObject = Cast(Class->GetDefaultObject()); + if (IsValid(DefaultObject->StaticMesh)) { + PreviewMeshes[Slot->Index]->SetStaticMesh(DefaultObject->StaticMesh->GetStaticMesh()); + } + } + } + } +} + +// Set all PreviewMeshes to nullptr +void ALevelChunk::HidePreview() { + int32 Count = 0; + for (UStaticMeshComponent* PreviewMesh : PreviewMeshes) { + if (IsValid(PreviewMesh)) { + + PreviewMesh->SetStaticMesh(nullptr); + } + Count++; + } +} + +void ALevelChunk::CleanupComponents() { + for (UStaticMeshComponent* PreviewMesh : PreviewMeshes) { + PreviewMesh->UnregisterComponent(); + } + PreviewMeshes.Empty(); +} \ No newline at end of file diff --git a/Source/UE5_GridTool/LevelChunk.h b/Source/UE5_GridTool/LevelChunk.h new file mode 100644 index 0000000..99289dc --- /dev/null +++ b/Source/UE5_GridTool/LevelChunk.h @@ -0,0 +1,55 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "LevelGridSlot.h" +#include "Components/SceneComponent.h" +#include "Components/StaticMeshComponent.h" +#include "SpawnableElement.h" +#include "LevelChunk.generated.h" + +UCLASS() +class UE5_GRIDTOOL_API ALevelChunk : public AActor +{ + GENERATED_BODY() + +public: + ALevelChunk(); + + // --- Variables + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Actor Setup") + int32 SizeX = 6; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Actor Setup") + int32 SizeY = 6; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Actor Setup") + int32 SizeZ = 4; + + UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) + TArray Slots; + + UPROPERTY() + TArray PreviewMeshes; + + // --- Functions + + // Remove preview elements + UFUNCTION(BlueprintCallable, CallInEditor, Category = "Actor Methods") + void HidePreview(); + + // Temporarily spawn each element in this chunk + UFUNCTION(BlueprintCallable, CallInEditor, Category = "Actor Methods") + void PreviewElements(); + +private: + void BeginPlay() override; + + UFUNCTION() + void SetupGrid(); + + UFUNCTION() + void CleanupComponents(); + +}; diff --git a/Source/UE5_GridTool/LevelGridSlot.cpp b/Source/UE5_GridTool/LevelGridSlot.cpp new file mode 100644 index 0000000..a642fed --- /dev/null +++ b/Source/UE5_GridTool/LevelGridSlot.cpp @@ -0,0 +1,37 @@ +#include "LevelGridSlot.h" + +// Sets default values for this component's properties +ULevelGridSlot::ULevelGridSlot() +{ + PrimaryComponentTick.bCanEverTick = false; +} + +// Called when the game starts +void ULevelGridSlot::BeginPlay() +{ + Super::BeginPlay(); + Spawn(); +} + +UClass* ULevelGridSlot::ResolveClass() { + UClass* Class = nullptr; + if (!Object.IsNull()) { + if (!Object.IsValid()) { + Class = Object.LoadSynchronous(); + } + else { + Class = Object.Get(); + } + } + return Class; +} + +void ULevelGridSlot::Spawn() { + UClass* Class = ResolveClass(); + + if (IsValid(Class)) { + FActorSpawnParameters SpawnParams; + GetWorld()->SpawnActor(Class, this->GetComponentLocation(), this->GetComponentRotation(), SpawnParams); + } + this->DestroyComponent(); +} \ No newline at end of file diff --git a/Source/UE5_GridTool/LevelGridSlot.h b/Source/UE5_GridTool/LevelGridSlot.h new file mode 100644 index 0000000..9eebf55 --- /dev/null +++ b/Source/UE5_GridTool/LevelGridSlot.h @@ -0,0 +1,36 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "SpawnableElement.h" +#include "Components/BillboardComponent.h" +#include "LevelGridSlot.generated.h" + + +UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) +class UE5_GRIDTOOL_API ULevelGridSlot : public UBillboardComponent +{ + GENERATED_BODY() + +public: + // Sets default values for this component's properties + ULevelGridSlot(); + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Actor Setup") + TSoftClassPtr Object; + + UPROPERTY() + int32 Index; + + UFUNCTION() + UClass* ResolveClass(); + +protected: + // Called when the game starts + virtual void BeginPlay() override; + +private: + UFUNCTION() + void Spawn(); +}; diff --git a/Source/UE5_GridTool/SpawnableElement.cpp b/Source/UE5_GridTool/SpawnableElement.cpp new file mode 100644 index 0000000..1cb7ec6 --- /dev/null +++ b/Source/UE5_GridTool/SpawnableElement.cpp @@ -0,0 +1,7 @@ +#include "SpawnableElement.h" + +ASpawnableElement::ASpawnableElement() +{ + PrimaryActorTick.bCanEverTick = false; + StaticMesh = CreateDefaultSubobject(TEXT("StaticMesh")); +} \ No newline at end of file diff --git a/Source/UE5_GridTool/SpawnableElement.h b/Source/UE5_GridTool/SpawnableElement.h new file mode 100644 index 0000000..b00a1ab --- /dev/null +++ b/Source/UE5_GridTool/SpawnableElement.h @@ -0,0 +1,21 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "Components/StaticMeshComponent.h" +#include "SpawnableElement.generated.h" + +UCLASS() +class UE5_GRIDTOOL_API ASpawnableElement : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + ASpawnableElement(); + + UPROPERTY(EditAnywhere, BlueprintReadOnly) + UStaticMeshComponent* StaticMesh; +}; diff --git a/Source/UE5_GridTool/UE5_GridTool.Build.cs b/Source/UE5_GridTool/UE5_GridTool.Build.cs new file mode 100644 index 0000000..401019f --- /dev/null +++ b/Source/UE5_GridTool/UE5_GridTool.Build.cs @@ -0,0 +1,23 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class UE5_GridTool : ModuleRules +{ + public UE5_GridTool(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); + + PrivateDependencyModuleNames.AddRange(new string[] { }); + + // Uncomment if you are using Slate UI + // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + // Uncomment if you are using online features + // PrivateDependencyModuleNames.Add("OnlineSubsystem"); + + // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true + } +} diff --git a/Source/UE5_GridTool/UE5_GridTool.cpp b/Source/UE5_GridTool/UE5_GridTool.cpp new file mode 100644 index 0000000..971579b --- /dev/null +++ b/Source/UE5_GridTool/UE5_GridTool.cpp @@ -0,0 +1,6 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "UE5_GridTool.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, UE5_GridTool, "UE5_GridTool" ); diff --git a/Source/UE5_GridTool/UE5_GridTool.h b/Source/UE5_GridTool/UE5_GridTool.h new file mode 100644 index 0000000..677c8e2 --- /dev/null +++ b/Source/UE5_GridTool/UE5_GridTool.h @@ -0,0 +1,6 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + diff --git a/Source/UE5_GridTool/UE5_GridToolGameModeBase.cpp b/Source/UE5_GridTool/UE5_GridToolGameModeBase.cpp new file mode 100644 index 0000000..ac42876 --- /dev/null +++ b/Source/UE5_GridTool/UE5_GridToolGameModeBase.cpp @@ -0,0 +1,5 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + + +#include "UE5_GridToolGameModeBase.h" + diff --git a/Source/UE5_GridTool/UE5_GridToolGameModeBase.h b/Source/UE5_GridTool/UE5_GridToolGameModeBase.h new file mode 100644 index 0000000..763a155 --- /dev/null +++ b/Source/UE5_GridTool/UE5_GridToolGameModeBase.h @@ -0,0 +1,17 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "UE5_GridToolGameModeBase.generated.h" + +/** + * + */ +UCLASS() +class UE5_GRIDTOOL_API AUE5_GridToolGameModeBase : public AGameModeBase +{ + GENERATED_BODY() + +}; diff --git a/Source/UE5_GridToolEditor.Target.cs b/Source/UE5_GridToolEditor.Target.cs new file mode 100644 index 0000000..8bf8900 --- /dev/null +++ b/Source/UE5_GridToolEditor.Target.cs @@ -0,0 +1,15 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class UE5_GridToolEditorTarget : TargetRules +{ + public UE5_GridToolEditorTarget( TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V2; + IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; + ExtraModuleNames.Add("UE5_GridTool"); + } +} diff --git a/UE5_GridTool.uproject b/UE5_GridTool.uproject new file mode 100644 index 0000000..22bc685 --- /dev/null +++ b/UE5_GridTool.uproject @@ -0,0 +1,25 @@ +{ + "FileVersion": 3, + "EngineAssociation": "5.1", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "UE5_GridTool", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine" + ] + } + ], + "Plugins": [ + { + "Name": "ModelingToolsEditorMode", + "Enabled": true, + "TargetAllowList": [ + "Editor" + ] + } + ] +} \ No newline at end of file