Files
utad-ui/Source/UTAD_UI/UTAD_UICharacter.cpp

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);
}
}