99 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright Epic Games, Inc. All Rights Reserved.
 | |
| 
 | |
| #include "UTAD_UICharacter.h"
 | |
| #include "UObject/ConstructorHelpers.h"
 | |
| #include "Camera/CameraComponent.h"
 | |
| #include "Components/DecalComponent.h"
 | |
| #include "Components/CapsuleComponent.h"
 | |
| #include "GameFramework/CharacterMovementComponent.h"
 | |
| #include "GameFramework/PlayerController.h"
 | |
| #include "GameFramework/SpringArmComponent.h"
 | |
| #include "Materials/Material.h"
 | |
| #include "Engine/World.h"
 | |
| #include "SkillTree/SkillTreeComponent.h"
 | |
| #include "SkillTree/SkillTreeSubsystem.h"
 | |
| #include "SkillTree/CharacterStatsComponent.h"
 | |
| 
 | |
| AUTAD_UICharacter::AUTAD_UICharacter()
 | |
| {
 | |
| 	// Set size for player capsule
 | |
| 	GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
 | |
| 
 | |
| 	// Don't rotate character to camera direction
 | |
| 	bUseControllerRotationPitch = false;
 | |
| 	bUseControllerRotationYaw	= false;
 | |
| 	bUseControllerRotationRoll	= false;
 | |
| 
 | |
| 	// Configure character movement
 | |
| 	GetCharacterMovement()->bOrientRotationToMovement =
 | |
| 		true; // Rotate character to moving direction
 | |
| 	GetCharacterMovement()->RotationRate		= FRotator(0.f, 640.f, 0.f);
 | |
| 	GetCharacterMovement()->bConstrainToPlane	= true;
 | |
| 	GetCharacterMovement()->bSnapToPlaneAtStart = true;
 | |
| 
 | |
| 	// Create a camera boom...
 | |
| 	CameraBoom =
 | |
| 		CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
 | |
| 	CameraBoom->SetupAttachment(RootComponent);
 | |
| 	CameraBoom->SetUsingAbsoluteRotation(
 | |
| 		true); // Don't want arm to rotate when character does
 | |
| 	CameraBoom->TargetArmLength = 800.f;
 | |
| 	CameraBoom->SetRelativeRotation(FRotator(-60.f, 0.f, 0.f));
 | |
| 	CameraBoom->bDoCollisionTest =
 | |
| 		false; // Don't want to pull camera in when it collides with level
 | |
| 
 | |
| 	// Create a camera...
 | |
| 	TopDownCameraComponent =
 | |
| 		CreateDefaultSubobject<UCameraComponent>(TEXT("TopDownCamera"));
 | |
| 	TopDownCameraComponent->SetupAttachment(CameraBoom,
 | |
| 											USpringArmComponent::SocketName);
 | |
| 	TopDownCameraComponent->bUsePawnControlRotation =
 | |
| 		false; // Camera does not rotate relative to arm
 | |
| 
 | |
| 	// Activate ticking in order to update the cursor every frame.
 | |
| 	PrimaryActorTick.bCanEverTick		   = true;
 | |
| 	PrimaryActorTick.bStartWithTickEnabled = true;
 | |
| 
 | |
| 	// Create the skill tree component
 | |
| 	SkillTreeComponent = CreateDefaultSubobject<USkillTreeComponent>(TEXT("SkillTreeComponent"));
 | |
| 
 | |
| 	// Create the character stats component
 | |
| 	CharacterStatsComponent = CreateDefaultSubobject<UCharacterStatsComponent>(TEXT("CharacterStatsComponent"));
 | |
| 
 | |
| 	// Initialize character level
 | |
| 	CharacterLevel = 1;
 | |
| }
 | |
| 
 | |
| void AUTAD_UICharacter::BeginPlay()
 | |
| {
 | |
| 	Super::BeginPlay();
 | |
| 
 | |
| 	// Register the skill tree component with the manager
 | |
| 	if (SkillTreeComponent)
 | |
| 	{
 | |
| 		if (USkillTreeSubsystem* Manager = USkillTreeSubsystem::GetSkillTreeManager(this))
 | |
| 		{
 | |
| 			Manager->RegisterPlayerSkillTree(SkillTreeComponent);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void AUTAD_UICharacter::Tick(float DeltaSeconds)
 | |
| {
 | |
| 	Super::Tick(DeltaSeconds);
 | |
| }
 | |
| 
 | |
| void AUTAD_UICharacter::LevelUp()
 | |
| {
 | |
| 	CharacterLevel++;
 | |
| 
 | |
| 	// Grant skill points on level up
 | |
| 	if (SkillTreeComponent)
 | |
| 	{
 | |
| 		// Grant 1 skill point per level (can be configured)
 | |
| 		SkillTreeComponent->AddSkillPoints(1);
 | |
| 
 | |
| 		UE_LOG(LogTemp, Log, TEXT("Character leveled up to %d! Gained 1 skill point."), CharacterLevel);
 | |
| 	}
 | |
| }
 |