From 1a9364c821429974b2f07f35f0daf4a119950772 Mon Sep 17 00:00:00 2001 From: Kukukakhew <100251983+Kukukakhew@users.noreply.github.com> Date: Sat, 22 Nov 2025 13:06:39 -0500 Subject: [PATCH] Test Character and controller --- Config/DefaultEngine.ini | 14 ++- Content/TEST/MyCharacter_BP.uasset | Bin 0 -> 23743 bytes Content/TEST/MyGameModeBase_BP.uasset | Bin 0 -> 21000 bytes Content/TEST/MyPlayerController_BP.uasset | Bin 0 -> 21179 bytes Content/UI_Menus/TEMP/IMC_Default.uasset | Bin 3160 -> 8900 bytes Content/Worlds/Playground1.umap | Bin 19097 -> 24308 bytes OpenConflict.uproject | 5 +- .../OpenConflict/Private/MyGameModeBase.cpp | 5 ++ .../Private/MyPlayerCharacter/MyCharacter.cpp | 23 +++++ .../MyPlayerCharacter/MyPlayerController.cpp | 85 ++++++++++++++++++ Source/OpenConflict/Public/MyGameModeBase.h | 17 ++++ .../Public/MyPlayerCharacter/MyCharacter.h | 28 ++++++ .../MyPlayerCharacter/MyPlayerController.h | 51 +++++++++++ 13 files changed, 226 insertions(+), 2 deletions(-) create mode 100644 Content/TEST/MyCharacter_BP.uasset create mode 100644 Content/TEST/MyGameModeBase_BP.uasset create mode 100644 Content/TEST/MyPlayerController_BP.uasset create mode 100644 Source/OpenConflict/Private/MyGameModeBase.cpp create mode 100644 Source/OpenConflict/Private/MyPlayerCharacter/MyCharacter.cpp create mode 100644 Source/OpenConflict/Private/MyPlayerCharacter/MyPlayerController.cpp create mode 100644 Source/OpenConflict/Public/MyGameModeBase.h create mode 100644 Source/OpenConflict/Public/MyPlayerCharacter/MyCharacter.h create mode 100644 Source/OpenConflict/Public/MyPlayerCharacter/MyPlayerController.h diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 3472834..b7a47c7 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -1,8 +1,20 @@ [/Script/EngineSettings.GameMapsSettings] -GameDefaultMap=/Game/Worlds/MainMenu.MainMenu EditorStartupMap=/Game/Worlds/Playground1.Playground1 +LocalMapOptions= +TransitionMap=None +bUseSplitscreen=True +TwoPlayerSplitscreenLayout=Horizontal +ThreePlayerSplitscreenLayout=FavorTop +FourPlayerSplitscreenLayout=Grid +bShowAllPlayerWidgetsWhenSplitscreenDisabled=False +bOffsetPlayerGamepadIds=False +GameInstanceClass=/Script/Engine.GameInstance +GameDefaultMap=/Game/Worlds/MainMenu.MainMenu +ServerDefaultMap=/Engine/Maps/Entry.Entry +GlobalDefaultGameMode=/Script/Engine.GameModeBase +GlobalDefaultServerGameMode=None [/Script/Engine.RendererSettings] r.AllowStaticLighting=False diff --git a/Content/TEST/MyCharacter_BP.uasset b/Content/TEST/MyCharacter_BP.uasset new file mode 100644 index 0000000000000000000000000000000000000000..ec406d2b3357030b75a2a4e0416e69d4b36e5d30 GIT binary patch literal 23743 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 diff --git a/OpenConflict.uproject b/OpenConflict.uproject index 48fb6e9..5c87fb6 100644 --- a/OpenConflict.uproject +++ b/OpenConflict.uproject @@ -7,7 +7,10 @@ { "Name": "OpenConflict", "Type": "Runtime", - "LoadingPhase": "Default" + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine" + ] } ], "Plugins": [ diff --git a/Source/OpenConflict/Private/MyGameModeBase.cpp b/Source/OpenConflict/Private/MyGameModeBase.cpp new file mode 100644 index 0000000..c474641 --- /dev/null +++ b/Source/OpenConflict/Private/MyGameModeBase.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MyGameModeBase.h" + diff --git a/Source/OpenConflict/Private/MyPlayerCharacter/MyCharacter.cpp b/Source/OpenConflict/Private/MyPlayerCharacter/MyCharacter.cpp new file mode 100644 index 0000000..f467a78 --- /dev/null +++ b/Source/OpenConflict/Private/MyPlayerCharacter/MyCharacter.cpp @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MyPlayerCharacter/MyCharacter.h" + +// Sets default values +AMyCharacter::AMyCharacter() +{ + // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + + CameraComponent = CreateDefaultSubobject(TEXT("CameraComponent")); + CameraComponent->SetupAttachment(RootComponent); + CameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f)); + CameraComponent->bUsePawnControlRotation = true; +} + +// Called when the game starts or when spawned +void AMyCharacter::BeginPlay() +{ + Super::BeginPlay(); + +} diff --git a/Source/OpenConflict/Private/MyPlayerCharacter/MyPlayerController.cpp b/Source/OpenConflict/Private/MyPlayerCharacter/MyPlayerController.cpp new file mode 100644 index 0000000..3f228ee --- /dev/null +++ b/Source/OpenConflict/Private/MyPlayerCharacter/MyPlayerController.cpp @@ -0,0 +1,85 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "MyPlayerCharacter/MyPlayerController.h" +#include "EnhancedInputComponent.h" +#include "EnhancedInputSubsystems.h" +#include "Components/SplineMeshComponent.h" + +AMyPlayerController::AMyPlayerController() +{ +} + +void AMyPlayerController::BeginPlay() +{ + Super::BeginPlay(); + PlayerCharacter = Cast(GetCharacter()); + + if (AMyPlayerController* PC = Cast(this)) + { + if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem(PC->GetLocalPlayer())) + { + if(PlayerInputContext) + { + Subsystem->AddMappingContext(PlayerInputContext, 0); + } + } + } +} + +void AMyPlayerController::SetupInputComponent() +{ + Super::SetupInputComponent(); + if (AMyPlayerController* PC = Cast(this)) + { + if (UEnhancedInputComponent* Subsystem = Cast(InputComponent)) + { + if (MoveAction) + { + Subsystem->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyPlayerController::Move); + } + if (JumpAction) + { + Subsystem->BindAction(JumpAction, ETriggerEvent::Started, this, &AMyPlayerController::Jump); + } + if (LookAction) + { + Subsystem->BindAction(LookAction, ETriggerEvent::Triggered, this, &AMyPlayerController::Look); + } + } + } +} + +void AMyPlayerController::Move(const FInputActionValue& Value) +{ + FVector2D MovementVector = Value.Get(); + + if (APawn* ControlledPawn = GetPawn()) + { + FRotator CameraRotation = GetControlRotation(); + FRotator YawRotation(0.f, CameraRotation.Yaw, 0.f); + + FVector ForwardDiection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); + FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); + + ControlledPawn->AddMovementInput(ForwardDiection, MovementVector.Y); + ControlledPawn->AddMovementInput(RightDirection,MovementVector.X); + + } +} + +void AMyPlayerController::Look(const FInputActionValue& Value) +{ + FVector2D LookAxisVector = Value.Get(); + + if (APawn* ControlledPawn = GetPawn()) + { + AddYawInput(LookAxisVector.X); + AddPitchInput(LookAxisVector.Y); + } +} + +void AMyPlayerController::Jump(const FInputActionValue& Value) +{ +} + diff --git a/Source/OpenConflict/Public/MyGameModeBase.h b/Source/OpenConflict/Public/MyGameModeBase.h new file mode 100644 index 0000000..e522ec5 --- /dev/null +++ b/Source/OpenConflict/Public/MyGameModeBase.h @@ -0,0 +1,17 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "MyGameModeBase.generated.h" + +/** + * + */ +UCLASS() +class OPENCONFLICT_API AMyGameModeBase : public AGameModeBase +{ + GENERATED_BODY() + +}; diff --git a/Source/OpenConflict/Public/MyPlayerCharacter/MyCharacter.h b/Source/OpenConflict/Public/MyPlayerCharacter/MyCharacter.h new file mode 100644 index 0000000..fef5a88 --- /dev/null +++ b/Source/OpenConflict/Public/MyPlayerCharacter/MyCharacter.h @@ -0,0 +1,28 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "Camera/CameraComponent.h" +#include "CoreMinimal.h" +#include "GameFramework/Character.h" +#include "MyCharacter.generated.h" + + +UCLASS() +class OPENCONFLICT_API AMyCharacter : public ACharacter +{ + GENERATED_BODY() + +public: + // Sets default values for this character's properties + AMyCharacter(); + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Camera") + UCameraComponent* CameraComponent; + +}; diff --git a/Source/OpenConflict/Public/MyPlayerCharacter/MyPlayerController.h b/Source/OpenConflict/Public/MyPlayerCharacter/MyPlayerController.h new file mode 100644 index 0000000..b75b6b6 --- /dev/null +++ b/Source/OpenConflict/Public/MyPlayerCharacter/MyPlayerController.h @@ -0,0 +1,51 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "EnhancedInputComponent.h" +#include "EnhancedInputSubsystems.h" +#include "MyCharacter.h" +#include "CoreMinimal.h" +#include "GameFramework/PlayerController.h" +#include "MyPlayerController.generated.h" + + +/** + * + */ +UCLASS() +class OPENCONFLICT_API AMyPlayerController : public APlayerController +{ + GENERATED_BODY() +public: + AMyPlayerController(); + +protected: + virtual void BeginPlay() override; + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input") + UInputMappingContext* PlayerInputContext; + + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input") + UInputAction* MoveAction; + + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input") + UInputAction* LookAction; + + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input") + UInputAction* JumpAction; + +public: + virtual void SetupInputComponent() override; + + UPROPERTY() + AMyCharacter* PlayerCharacter; + +private: + void Move(const FInputActionValue& Value); + void Look(const FInputActionValue& Value); + void Jump(const FInputActionValue& Value); + + + + +};