// 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(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(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(TEXT("SkillTreeComponent")); // Create the character stats component CharacterStatsComponent = CreateDefaultSubobject(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); } }