From 55a923487125f89b068f4cc2c62978be21159806 Mon Sep 17 00:00:00 2001 From: CatChow0 Date: Wed, 15 Oct 2025 12:48:33 +0200 Subject: [PATCH] =?UTF-8?q?Minor=20-=20Initialise=20le=20contr=C3=B4leur?= =?UTF-8?q?=20et=20le=20pawn=20-=20V01.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initialise le contrôleur du joueur avec une caméra orthographique et la gestion des inputs, et initialise le pawn du joueur avec un mesh par défaut. Ceci permet d'avoir un setup de base fonctionnel pour le joueur. --- Content/CTP/01_Level/L_Default.umap | Bin 48503 -> 48646 bytes Content/CTP/04_Mesh/SM_Cube.uasset | Bin 0 -> 17031 bytes Source/M4_CPP/private/M4_PlayerController.cpp | 88 +++++++++++++++++- Source/M4_CPP/private/M4_PlayerPawn.cpp | 53 +++++------ Source/M4_CPP/public/M4_CTP_Macros.h | 8 ++ Source/M4_CPP/public/M4_PlayerController.h | 21 +++++ Source/M4_CPP/public/M4_PlayerPawn.h | 19 ++-- 7 files changed, 147 insertions(+), 42 deletions(-) create mode 100644 Content/CTP/04_Mesh/SM_Cube.uasset create mode 100644 Source/M4_CPP/public/M4_CTP_Macros.h diff --git a/Content/CTP/01_Level/L_Default.umap b/Content/CTP/01_Level/L_Default.umap index e564e01f532b54b6e9c58a3d84c7523d575a1bbe..b92d96f7f22cb53736a22ed211c10cdb7cfb0e8a 100644 GIT binary patch literal 48646 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 I(2-r_j%(&EIsGETh8IPsRm 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�nYrY8i^04{z$dGenOAV-!@frR`vOoJY~Ly_+Q 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 literal 0 HcmV?d00001 diff --git a/Source/M4_CPP/private/M4_PlayerController.cpp b/Source/M4_CPP/private/M4_PlayerController.cpp index 3574487..ec25868 100644 --- a/Source/M4_CPP/private/M4_PlayerController.cpp +++ b/Source/M4_CPP/private/M4_PlayerController.cpp @@ -1,8 +1,7 @@ // Fill out your copyright notice in the Description page of Project Settings. - - #include "M4_PlayerController.h" +#include "EnhancedInputComponent.h" #include "Camera/CameraComponent.h" AM4_PlayerController::AM4_PlayerController() @@ -10,7 +9,11 @@ AM4_PlayerController::AM4_PlayerController() CameraComponent = CreateDefaultSubobject(TEXT("CameraComponent")); CameraComponent->ProjectionMode = ECameraProjectionMode::Orthographic; CameraComponent->OrthoWidth = 2048.0f; - CameraComponent->SetupAttachment(RootComponent); + CameraComponent->SetAspectRatio(160.0f/192.0f); + + // attach the camera to the controller's root component + CameraComponent->SetupAttachment(GetRootComponent()); + } void AM4_PlayerController::BeginPlay() @@ -21,15 +24,94 @@ void AM4_PlayerController::BeginPlay() { CameraComponent->SetRelativeLocation(FVector(0, 0, 1000)); CameraComponent->SetRelativeRotation(FRotator(-90.0f, 0.0f, 0.0f)); + + // Set the camera as the view target + SetViewTarget(this); } + + if (!GetLocalPlayer()) + { + PRINT_SCREEN(TEXT("No Local Player found!"), FColor::Red); + return; + } + + if (!ULocalPlayer::GetSubsystem(GetLocalPlayer())) + { + PRINT_SCREEN(TEXT("No Enhanced Input Local Player Subsystem found!"), FColor::Red); + return; + } + + // load the default mapping ctx + ULocalPlayer::GetSubsystem(GetLocalPlayer())->AddMappingContext(DefaultMappingContext.LoadSynchronous(), 0); + + if (!DefaultMappingContext.IsValid()) + { + PRINT_SCREEN(TEXT("No Default Mapping Context found!"), FColor::Red); + return; + } + PRINT_SCREEN(TEXT("Default Mapping Context loaded"), FColor::Green); } void AM4_PlayerController::SetupInputComponent() { Super::SetupInputComponent(); + + if (!InputComponent) + { + PRINT_SCREEN(TEXT("No Input Component found!"), FColor::Red); + return; + } + + if (!InputComponent->IsA(UEnhancedInputComponent::StaticClass())) + { + PRINT_SCREEN(TEXT("Input Component is not an Enhanced Input Component!"), FColor::Red); + return; + } + + // load the Move Action + UInputAction* MoveActionLoaded = MoveAction.LoadSynchronous(); + if (MoveActionLoaded) + { + PRINT_SCREEN(TEXT("Move Action loaded"), FColor::Green); + } + else + { + PRINT_SCREEN(TEXT("No Move Action found!"), FColor::Red); + return; + } + + // Bind the Move Action + UEnhancedInputComponent* EnhancedInputComponent = CastChecked(InputComponent); + if (EnhancedInputComponent) + { + EnhancedInputComponent->BindAction(MoveActionLoaded, ETriggerEvent::Triggered, this, &AM4_PlayerController::Move); + PRINT_SCREEN(TEXT("Move Action bound"), FColor::Green); + } +} + +void AM4_PlayerController::Move(const FInputActionValue& Value) +{ + GEngine->AddOnScreenDebugMessage(-1, 0.0f, FColor::Green, FString::Printf(TEXT("Move Value: %s"), *Value.ToString())); + + FVector2D MovementVector = Value.Get(); + + if (APawn* ControlledPawn = GetPawn()) + { + FVector NewLocation = ControlledPawn->GetActorLocation() + FVector(MovementVector.X, MovementVector.Y, 0.0f) * 10.0f; + ControlledPawn->SetActorLocation(NewLocation); + } } void AM4_PlayerController::OnPossess(APawn* InPawn) { Super::OnPossess(InPawn); + + PRINT_SCREEN(TEXT("PlayerController Possess"), FColor::Green); + + if (InPawn && CameraComponent) + { + CameraComponent->AttachToComponent(InPawn->GetRootComponent(), FAttachmentTransformRules::KeepRelativeTransform); + CameraComponent->SetRelativeLocation(FVector(0, 0, 1000)); + CameraComponent->SetRelativeRotation(FRotator(-90.0f, 0.0f, 0.0f)); + } } \ No newline at end of file diff --git a/Source/M4_CPP/private/M4_PlayerPawn.cpp b/Source/M4_CPP/private/M4_PlayerPawn.cpp index a612cfc..6cc2111 100644 --- a/Source/M4_CPP/private/M4_PlayerPawn.cpp +++ b/Source/M4_CPP/private/M4_PlayerPawn.cpp @@ -1,6 +1,4 @@ // Fill out your copyright notice in the Description page of Project Settings. - - #include "M4_PlayerPawn.h" AM4_PlayerPawn::AM4_PlayerPawn() @@ -14,46 +12,37 @@ AM4_PlayerPawn::AM4_PlayerPawn() MeshComponent = CreateDefaultSubobject(TEXT("MeshComponent")); + MeshComponent->SetMobility(EComponentMobility::Movable); MeshComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); MeshComponent->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName); MeshComponent->SetRelativeScale3D(FVector(1.0f, 1.0f, 1.0f)); MeshComponent->SetupAttachment(RootComponent); -} + + LoadedMesh = DefaultMesh.LoadSynchronous(); + if (LoadedMesh) + { + PRINT_SCREEN(TEXT("DefaultMesh loaded"), FColor::Green); + } + else + { + PRINT_SCREEN(TEXT("Failed to load DefaultMesh"), FColor::Red); + } + +} + void AM4_PlayerPawn::BeginPlay() { Super::BeginPlay(); - + + if (MeshComponent && LoadedMesh) + { + PRINT_SCREEN(TEXT("LoadedMesh"), FColor::Green); + MeshComponent->SetStaticMesh(LoadedMesh); + } } + void AM4_PlayerPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); -} - -void AM4_PlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) -{ - Super::SetupPlayerInputComponent(PlayerInputComponent); - - if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked(PlayerInputComponent)) - { - if (MoveAction) - { - EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AM4_PlayerPawn::Move); - } - } -} - -void AM4_PlayerPawn::Move(const FInputActionValue& Value) -{ - // Récupérer la valeur du mouvement (vecteur 2D pour horizontal/vertical) - FVector2D MovementVector = Value.Get(); - - // Appliquer le mouvement - if (Controller) - { - FVector NewLocation = GetActorLocation(); - NewLocation.X += MovementVector.X; - NewLocation.Y += MovementVector.Y; - SetActorLocation(NewLocation); - } } \ No newline at end of file diff --git a/Source/M4_CPP/public/M4_CTP_Macros.h b/Source/M4_CPP/public/M4_CTP_Macros.h new file mode 100644 index 0000000..9760632 --- /dev/null +++ b/Source/M4_CPP/public/M4_CTP_Macros.h @@ -0,0 +1,8 @@ +#pragma once +#include "Engine/EngineTypes.h" + +#define C_FOLDER TEXT("/Game/CTP/") +#define C_INPUT_FOLDER TEXT("/Game/CTP/03_Input/") +#define C_MESH_FOLDER TEXT("Game/CTP/04_Mesh/") + +#define PRINT_SCREEN(Text, Color) if(GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, Color, Text); \ No newline at end of file diff --git a/Source/M4_CPP/public/M4_PlayerController.h b/Source/M4_CPP/public/M4_PlayerController.h index 134320f..37aaa6c 100644 --- a/Source/M4_CPP/public/M4_PlayerController.h +++ b/Source/M4_CPP/public/M4_PlayerController.h @@ -1,10 +1,21 @@ // Fill out your copyright notice in the Description page of Project Settings. #pragma once +// Include General Macros +#include "M4_CTP_Macros.h" + +#define IMC_DEFAULT TEXT("IMC_Default.IMC_Default") +#define IA_MOVE_DEFAULT TEXT("IA_Move.IA_Move") + +// Include necessary Unreal Engine headers #include "CoreMinimal.h" +#include "InputAction.h" +#include "InputMappingContext.h" #include "GameFramework/PlayerController.h" #include "Camera/CameraComponent.h" +#include "EnhancedInputComponent.h" +#include "EnhancedInputSubsystems.h" #include "M4_PlayerController.generated.h" /** @@ -20,6 +31,14 @@ public: virtual void BeginPlay() override; + UPROPERTY(EditAnywhere) + TSoftObjectPtr DefaultMappingContext = \ + TSoftObjectPtr(FSoftObjectPath(FString(C_INPUT_FOLDER) + IMC_DEFAULT)); + + UPROPERTY(EditAnywhere) + TSoftObjectPtr MoveAction = \ + TSoftObjectPtr(FSoftObjectPath(FString(C_INPUT_FOLDER) + IA_MOVE_DEFAULT)); + protected: virtual void SetupInputComponent() override; virtual void OnPossess(APawn* InPawn) override; @@ -27,5 +46,7 @@ protected: private: UPROPERTY(VisibleAnywhere,BlueprintReadOnly ,Category="Centipede", meta = (AllowPrivateAccess = "true")) TObjectPtr CameraComponent; + + void Move(const FInputActionValue& Value); }; diff --git a/Source/M4_CPP/public/M4_PlayerPawn.h b/Source/M4_CPP/public/M4_PlayerPawn.h index 58e4c70..679ec92 100644 --- a/Source/M4_CPP/public/M4_PlayerPawn.h +++ b/Source/M4_CPP/public/M4_PlayerPawn.h @@ -1,11 +1,18 @@ // Fill out your copyright notice in the Description page of Project Settings. #pragma once +// Include General Macros +#include "M4_CTP_Macros.h" + +#define MESH_DEFAULT TEXT("SM_Cube.SM_Cube") + +// Include necessary Unreal Engine headers #include "CoreMinimal.h" #include "GameFramework/Pawn.h" #include "InputAction.h" #include "InputActionValue.h" +#include "InputMappingContext.h" #include "Components/StaticMeshComponent.h" #include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" @@ -26,21 +33,19 @@ public : UStaticMeshComponent* GetMeshComponent() const { return MeshComponent; } - virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override; - - UPROPERTY(EditAnywhere, Category="centipede") - TObjectPtr MoveAction; protected: virtual void BeginPlay() override; private: - UPROPERTY(Category = "Centipede", VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) + UPROPERTY(EditAnywhere,Category = "Centipede") TObjectPtr MeshComponent; - void Move(const FInputActionValue& Value); + UPROPERTY(EditAnywhere, Category = "Centipede") + TSoftObjectPtr DefaultMesh = \ + TSoftObjectPtr(FSoftObjectPath(FString(C_MESH_FOLDER) + MESH_DEFAULT)); - + UStaticMesh* LoadedMesh; };