孟宇 6 ماه پیش
والد
کامیت
c7d5b9843d

+ 1 - 0
.gitignore

@@ -113,3 +113,4 @@ Ability/Intermediate/
 Ability/Saved/
 Ability/Plugins/EzAbility/Intermediate/
 Ability/Plugins/EzAbility/Binaries/
+Ability/Plugins/Developer/

+ 4 - 0
Ability/Ability.uproject

@@ -17,6 +17,10 @@
 			"TargetAllowList": [
 				"Editor"
 			]
+		},
+		{
+			"Name": "EzAbility",
+			"Enabled": true
 		}
 	]
 }

BIN
Ability/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset


BIN
Ability/Content/ThirdPerson/Input/Actions/IA_Attack.uasset


BIN
Ability/Content/ThirdPerson/Input/IMC_Default.uasset


+ 1 - 0
Ability/Plugins/EzAbility/Source/EzAbility/EzAbility.Build.cs

@@ -27,6 +27,7 @@ public class EzAbility : ModuleRules
 			{
 				"Core",
 				// ... add other public dependencies that you statically link with here ...
+				"DeveloperSettings",
 			}
 			);
 			

+ 4 - 0
Ability/Plugins/EzAbility/Source/EzAbility/Private/EzAbilityLog.cpp

@@ -0,0 +1,4 @@
+
+#include "EzAbilityLog.h"
+
+DEFINE_LOG_CATEGORY(LogEzAbility);

+ 10 - 0
Ability/Plugins/EzAbility/Source/EzAbility/Private/EzAbilitySettings.cpp

@@ -0,0 +1,10 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "EzAbilitySettings.h"
+
+UEzAbilitySettings::UEzAbilitySettings(const FObjectInitializer& ObjectInitializer)
+{
+	CategoryName = TEXT("Plugins");
+	SectionName = TEXT("EzAbility");
+}

+ 2 - 0
Ability/Plugins/EzAbility/Source/EzAbility/Public/EzAbility.h

@@ -5,6 +5,8 @@
 #include "CoreMinimal.h"
 #include "Modules/ModuleManager.h"
 
+DECLARE_LOG_CATEGORY_EXTERN(LogEzAbility, Log, All);
+
 class FEzAbilityModule : public IModuleInterface
 {
 public:

+ 2 - 4
Ability/Plugins/EzAbility/Source/EzAbility/Public/EzAbilityComponent.h

@@ -24,10 +24,8 @@ public:
 	// Called every frame
 	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
 
-	UFUNCTION()
+	UFUNCTION(BlueprintCallable)
 	void ActiveAbility();
 
 protected:
-};
-
-//DECLARE_LOG_CATEGORY_EXTERN(LogEzAbility, Log, All);
+};

+ 8 - 0
Ability/Plugins/EzAbility/Source/EzAbility/Public/EzAbilityLog.h

@@ -0,0 +1,8 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Modules/ModuleManager.h"
+
+DECLARE_LOG_CATEGORY_EXTERN(LogEzAbility, Log, All);

+ 22 - 0
Ability/Plugins/EzAbility/Source/EzAbility/Public/EzAbilitySettings.h

@@ -0,0 +1,22 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Engine/DeveloperSettings.h"
+#include "EzAbilitySettings.generated.h"
+
+/**
+ * 
+ */
+UCLASS(Config=EzAbility)
+class EZABILITY_API UEzAbilitySettings : public UDeveloperSettings
+{
+	GENERATED_BODY()
+public:
+	UEzAbilitySettings(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
+
+protected:
+	UPROPERTY(Config, EditAnywhere, Category = Ability, meta = (DisplayName = "Log Verbose Output"))
+	bool bVerbose = false;
+};

+ 5 - 1
Ability/Source/Ability/Ability.Build.cs

@@ -8,6 +8,10 @@ public class Ability : ModuleRules
 	{
 		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
 
-		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" });
+		PublicDependencyModuleNames.AddRange(new string[]
+		{
+			"Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput",
+			"EzAbility"
+		});
 	}
 }

+ 15 - 0
Ability/Source/Ability/AbilityCharacter.cpp

@@ -9,6 +9,7 @@
 #include "GameFramework/Controller.h"
 #include "EnhancedInputComponent.h"
 #include "EnhancedInputSubsystems.h"
+#include "EzAbilityComponent.h"
 #include "InputActionValue.h"
 
 DEFINE_LOG_CATEGORY(LogTemplateCharacter);
@@ -52,6 +53,16 @@ AAbilityCharacter::AAbilityCharacter()
 
 	// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) 
 	// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
+	AbilityComponent = CreateDefaultSubobject<UEzAbilityComponent>(TEXT("Ability"));
+}
+
+void AAbilityCharacter::OnAttackPress()
+{
+}
+
+void AAbilityCharacter::OnAttackRelease()
+{
+	AbilityComponent->ActiveAbility();
 }
 
 void AAbilityCharacter::BeginPlay()
@@ -86,6 +97,10 @@ void AAbilityCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCo
 
 		// Looking
 		EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AAbilityCharacter::Look);
+
+		//Attack
+		EnhancedInputComponent->BindAction(AttackAction, ETriggerEvent::Started, this, &AAbilityCharacter::OnAttackPress);
+		EnhancedInputComponent->BindAction(AttackAction, ETriggerEvent::Completed, this, &AAbilityCharacter::OnAttackRelease);
 	}
 	else
 	{

+ 12 - 1
Ability/Source/Ability/AbilityCharacter.h

@@ -9,6 +9,7 @@
 
 class USpringArmComponent;
 class UCameraComponent;
+class UEzAbilityComponent;
 class UInputMappingContext;
 class UInputAction;
 struct FInputActionValue;
@@ -27,6 +28,9 @@ class AAbilityCharacter : public ACharacter
 	/** Follow camera */
 	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
 	UCameraComponent* FollowCamera;
+
+	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Ability, meta = (AllowPrivateAccess = "true"))
+	TObjectPtr<UEzAbilityComponent>	AbilityComponent;
 	
 	/** MappingContext */
 	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
@@ -44,12 +48,18 @@ class AAbilityCharacter : public ACharacter
 	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
 	UInputAction* LookAction;
 
+	/** Attack Input Action */
+	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+	UInputAction* AttackAction;
 public:
 	AAbilityCharacter();
 	
 
 protected:
 
+	void OnAttackPress();
+	void OnAttackRelease();
+	
 	/** Called for movement input */
 	void Move(const FInputActionValue& Value);
 
@@ -62,12 +72,13 @@ protected:
 	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
 	
 	// To add mapping context
-	virtual void BeginPlay();
+	virtual void BeginPlay() override;
 
 public:
 	/** Returns CameraBoom subobject **/
 	FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
 	/** Returns FollowCamera subobject **/
 	FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }
+	FORCEINLINE class UEzAbilityComponent* GetAbilityComponent() const { return AbilityComponent; }
 };