Merge branch 'HappyTanuki' into SJW1024

# Conflicts:
#	Content/Character/BP_Folder/DefaultClass.uasset
#	Content/Character/Lb/Animation/ABP_Lb.uasset
#	Content/Character/Lb/Animation/R2_Anim.uasset
#	Content/Maps/DevMap.umap
#	Source/Promether/PlayerGeneric/DefaultPlayerController.cpp
#	Source/Promether/PlayerGeneric/DefaultPlayerController.h
This commit is contained in:
2023-10-10 20:53:38 +09:00
14 changed files with 227 additions and 384 deletions

Binary file not shown.

Binary file not shown.

BIN
Content/Character/Lb/BP_Lb.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Content/Maps/DevMap.umap (Stored with Git LFS)

Binary file not shown.

BIN
Content/Maps/Untitled.umap (Stored with Git LFS)

Binary file not shown.

View File

@@ -25,39 +25,11 @@ ADefaultPlayerCharacter::ADefaultPlayerCharacter()
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera")); Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
Camera->SetupAttachment(CameraSpringArm, USpringArmComponent::SocketName); Camera->SetupAttachment(CameraSpringArm, USpringArmComponent::SocketName);
Health = 0.0f; for (uint8 i = 0; i < (uint8)EStats::SIZE; i++)
HPRegeneration = 0.0f; DefaultStats.Add((EStats)i, 0.0f);
HealAndShieldpower = 0.0f;
Armor = 0.0f; for (uint8 i = 0; i < (uint8)CooldownType::SIZE; i++)
MagicResistance = 0.0f; CooldownDuration.Add((CooldownType)i, 0.0f);
Tenacity = 0.0f;
SlowRisist = 0.0f;
AttackSpeed = 0.0f;
AttackDamage = 0.0f;
AbilityPower = 0.0f;
CriticalStrikeChance = 0.0f;
CriticalStrikeDamage = 0.0f;
ArmorPenetration = 0.0f;
MagicPenetration = 0.0f;
LifeSteal = 0.0f;
PhysicalVamp = 0.0f;
Omnivamp = 0.0f;
AbilityHaste = 0.0f;
Mana = 0.0f;
ManaRegeneration = 0.0f;
Energy = 0.0f;
EnergyRegeneration = 0.0f;
AttackRange = 0.0f;
MovementSpeed = 0.0f;
GoldGeneration = 0.0f;
AttackDamageGrowth = 0.0f;
AttackSpeedGrowth = 0.0f;
ArmorGrowth = 0.0f;
MagicResistanceGrowth = 0.0f;
HealthGrowth = 0.0f;
HealthRegenerationGrowth = 0.0f;
ManaGrowth = 0.0f;
ManaRegenerationGrowth = 0.0f;
} }
void ADefaultPlayerCharacter::Tick(float DeltaTime) void ADefaultPlayerCharacter::Tick(float DeltaTime)
@@ -104,15 +76,15 @@ float ADefaultPlayerCharacter::TakeDamage_Implementation(float DamageAmount, str
float ADDamageMultiplier = 0; float ADDamageMultiplier = 0;
float APDamageMultiplier = 0; float APDamageMultiplier = 0;
if (MyState->Stats.Armor >= 0) if (MyState->Stats[(uint8)EStats::Armor] >= 0)
ADDamageMultiplier = 100 / (100 + MyState->Stats.Armor); ADDamageMultiplier = 100 / (100 + MyState->Stats[(uint8)EStats::Armor]);
else else
ADDamageMultiplier = 2 - 100 / (100 - MyState->Stats.Armor); ADDamageMultiplier = 2 - 100 / (100 - MyState->Stats[(uint8)EStats::Armor]);
if (MyState->Stats.MagicResistance >= 0) if (MyState->Stats[(uint8)EStats::MagicResistance] >= 0)
APDamageMultiplier = 100 / (100 + MyState->Stats.MagicResistance); APDamageMultiplier = 100 / (100 + MyState->Stats[(uint8)EStats::MagicResistance]);
else else
APDamageMultiplier = 2 - 100 / (100 - MyState->Stats.MagicResistance); APDamageMultiplier = 2 - 100 / (100 - MyState->Stats[(uint8)EStats::MagicResistance]);
UE_LOG(LogTemp, Warning, TEXT("%s : ADDamageMultiplier : %f CalculatedDamage : %f"), *DamageCauser->GetName(), ADDamageMultiplier, DamageAmount * ADDamageMultiplier); UE_LOG(LogTemp, Warning, TEXT("%s : ADDamageMultiplier : %f CalculatedDamage : %f"), *DamageCauser->GetName(), ADDamageMultiplier, DamageAmount * ADDamageMultiplier);
@@ -122,17 +94,17 @@ float ADefaultPlayerCharacter::TakeDamage_Implementation(float DamageAmount, str
{ {
UE_LOG(LogTemp, Warning, TEXT("DamageType : BaseAttack")); UE_LOG(LogTemp, Warning, TEXT("DamageType : BaseAttack"));
float UpdatedHealth = MyState->Stats.Health - EventInstigatorState->Stats.AttackDamage * ADDamageMultiplier; float UpdatedHealth = MyState->Stats[(uint8)EStats::Health] - EventInstigatorState->Stats[(uint8)EStats::AttackDamage] * ADDamageMultiplier;
if (UpdatedHealth < 0) if (UpdatedHealth < 0)
{ {
MyState->Stats.Health = 0; MyState->Stats[(uint8)EStats::Health] = 0;
} }
else else
{ {
MyState->Stats.Health = UpdatedHealth; MyState->Stats[(uint8)EStats::Health] = UpdatedHealth;
} }
UE_LOG(LogTemp, Warning, TEXT("Current Health : %f"), MyState->Stats.Health); UE_LOG(LogTemp, Warning, TEXT("Current Health : %f"), MyState->Stats[(uint8)EStats::Health]);
} }
} }

View File

@@ -97,121 +97,14 @@ public:
UFUNCTION(NetMulticast, Reliable) UFUNCTION(NetMulticast, Reliable)
void NetMulticast_Skill7(); void NetMulticast_Skill7();
float GetHealth() const { return Health; } UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats")
float GetHPRegeneration() const { return HPRegeneration; } TMap<EStats, float> DefaultStats;
float GetHealAndShieldpower() const { return HealAndShieldpower; }
float GetArmor() const { return Armor; }
float GetMagicResistance() const { return MagicResistance; }
float GetTenacity() const { return Tenacity; }
float GetSlowRisist() const { return SlowRisist; }
float GetAttackSpeed() const { return AttackSpeed; }
float GetAttackDamage() const { return AttackDamage; }
float GetAbilityPower() const { return AbilityPower; }
float GetCriticalStrikeChance() const { return CriticalStrikeChance; }
float GetCriticalStrikeDamage() const { return CriticalStrikeDamage; }
float GetArmorPenetration() const { return ArmorPenetration; }
float GetMagicPenetration() const { return MagicPenetration; }
float GetLifeSteal() const { return LifeSteal; }
float GetPhysicalVamp() const { return PhysicalVamp; }
float GetOmnivamp() const { return Omnivamp; }
float GetAbilityHaste() const { return AbilityHaste; }
const float* GetCooldownDuration() const { return CooldownDuration; }
float GetMana() const { return Mana; }
float GetManaRegeneration() const { return ManaRegeneration; }
float GetEnergy() const { return Energy; }
float GetEnergyRegeneration() const { return EnergyRegeneration; }
float GetAttackRange() const { return AttackRange; }
float GetMovementSpeed() const { return MovementSpeed; }
float GetGoldGeneration() const { return GoldGeneration; }
float GetAttackDamageGrowth() const { return AttackDamageGrowth; }
float GetAttackSpeedGrowth() const { return AttackSpeedGrowth; }
float GetArmorGrowth() const { return ArmorGrowth; }
float GetMagicResistanceGrowth() const { return MagicResistanceGrowth; }
float GetHealthGrowth() const { return HealthGrowth; }
float GetHealthRegenerationGrowth() const { return HealthRegenerationGrowth; }
float GetManaGrowth() const { return ManaGrowth; }
float GetManaRegenerationGrowth() const { return ManaRegenerationGrowth; }
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats")
TMap<CooldownType, float> CooldownDuration;
protected: protected:
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
USpringArmComponent* CameraSpringArm; USpringArmComponent* CameraSpringArm;
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
UCameraComponent* Camera; UCameraComponent* Camera;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float Health;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float HPRegeneration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float HealAndShieldpower;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float Armor;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float MagicResistance;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float Tenacity;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Defensive")
float SlowRisist;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float AttackSpeed;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float AttackDamage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float AbilityPower;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float CriticalStrikeChance;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float CriticalStrikeDamage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float ArmorPenetration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float MagicPenetration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float LifeSteal;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float PhysicalVamp;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Offensive")
float Omnivamp;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Haste")
float AbilityHaste;
UPROPERTY(EditAnywhere, Category = "Stats|Utility|Haste")
float CooldownDuration[(uint8)CooldownType::SIZE] = { 0.0f, };
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Resource")
float Mana;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Resource")
float ManaRegeneration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Resource")
float Energy;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Resource")
float EnergyRegeneration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility")
float AttackRange;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility")
float MovementSpeed;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Utility|Non-Combat")
float GoldGeneration;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float AttackDamageGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float AttackSpeedGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float ArmorGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float MagicResistanceGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float HealthGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float HealthRegenerationGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float ManaGrowth;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats|Increasing Statistics")
float ManaRegenerationGrowth;
}; };

View File

@@ -18,17 +18,19 @@ void ADefaultPlayerController::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
if (ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player)) { ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player);
if (UEnhancedInputLocalPlayerSubsystem* InputSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>()) { if (!LocalPlayer) return;
if (!PlayerInputMapping.IsNull()) {
InputSystem->AddMappingContext(PlayerInputMapping.LoadSynchronous(), 0); UEnhancedInputLocalPlayerSubsystem* InputSystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>();
} if (!InputSystem) return;
else {
if (PlayerInputMapping.IsNull())
{
UE_LOG(LogTemp, Error, TEXT("AddMappingContext Failed")); UE_LOG(LogTemp, Error, TEXT("AddMappingContext Failed"));
} return;
}
} }
InputSystem->AddMappingContext(PlayerInputMapping.LoadSynchronous(), 0);
this->bShowMouseCursor = true; this->bShowMouseCursor = true;
} }
@@ -39,16 +41,29 @@ void ADefaultPlayerController::OnPossess(APawn* aPawn)
Server_SpawnPlayerCamera(); Server_SpawnPlayerCamera();
AActor *PlayerCamera = GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera(); AActor *PlayerCamera = GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera();
if (PlayerCamera) if (!PlayerCamera)
{ {
UE_LOG(LogTemp, Error, TEXT("GetPlayerCamera Failed."));
return;
}
SetViewTarget(PlayerCamera); SetViewTarget(PlayerCamera);
UE_LOG(LogTemp, Warning, TEXT("SetViewTarget Success : %s"), *GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera()->GetName()); UE_LOG(LogTemp, Warning, TEXT("SetViewTarget Success : %s"), *GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera()->GetName());
}
else ADefaultPlayerCharacter* ControlledPawn = GetPawn<ADefaultPlayerCharacter>();
{ if (!ControlledPawn) return;
UE_LOG(LogTemp, Error, TEXT("GetPlayerCamera Failed."));
} ADefaultPlayerState* MyPlayerState = GetPlayerState<ADefaultPlayerState>();
if (!MyPlayerState) return;
TArray<float> DefaultStatsValue;
TArray<float> CooldownDurationValue;
ControlledPawn->DefaultStats.GenerateValueArray(DefaultStatsValue);
ControlledPawn->CooldownDuration.GenerateValueArray(CooldownDurationValue);
MyPlayerState->InitPlayerStats(DefaultStatsValue, CooldownDurationValue);
} }
void ADefaultPlayerController::OnUnPossess() void ADefaultPlayerController::OnUnPossess()
@@ -66,33 +81,37 @@ void ADefaultPlayerController::Server_SpawnPlayerCamera_Implementation()
UE_LOG(LogTemp, Warning, TEXT("SpawnPlayerCamera")); UE_LOG(LogTemp, Warning, TEXT("SpawnPlayerCamera"));
if (APawn* MyPawn = GetPawn()) APawn* MyPawn = GetPawn();
{ if (!MyPawn) return;
FTransform SpawnTransform = FTransform(); FTransform SpawnTransform = FTransform();
SpawnTransform.SetLocation(MyPawn->GetActorLocation()); SpawnTransform.SetLocation(MyPawn->GetActorLocation());
OutContextPlayerCamera = GetWorld()->SpawnActor<AActor>(ADefaultPlayerCamera::StaticClass(), SpawnTransform, SpawnInfo); OutContextPlayerCamera = GetWorld()->SpawnActor<AActor>(ADefaultPlayerCamera::StaticClass(), SpawnTransform, SpawnInfo);
if (OutContextPlayerCamera) if (!OutContextPlayerCamera)
{ {
UE_LOG(LogTemp, Error, TEXT("Camera Spawn Failed."));
return;
}
GetPlayerState<ADefaultPlayerState>()->SetPlayerCamera(OutContextPlayerCamera); GetPlayerState<ADefaultPlayerState>()->SetPlayerCamera(OutContextPlayerCamera);
OutContextPlayerCamera->AttachToActor(GetPawn(), FAttachmentTransformRules(EAttachmentRule::SnapToTarget, EAttachmentRule::KeepWorld, EAttachmentRule::KeepWorld, false)); OutContextPlayerCamera->AttachToActor(GetPawn(), FAttachmentTransformRules(EAttachmentRule::SnapToTarget, EAttachmentRule::KeepWorld, EAttachmentRule::KeepWorld, false));
UE_LOG(LogTemp, Warning, TEXT("SetPlayerCamera Success : %s, %d"), *GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera()->GetName(), GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera()); UE_LOG(LogTemp, Warning, TEXT("SetPlayerCamera Success : %s, %d"), *GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera()->GetName(), GetPlayerState<ADefaultPlayerState>()->GetPlayerCamera());
}
else
{
UE_LOG(LogTemp, Error, TEXT("Camera Spawn Failed."));
}
}
} }
void ADefaultPlayerController::SetACharacterOutlineColor(ACharacter* Target, bool Visible) void ADefaultPlayerController::SetACharacterOutlineColor(ACharacter* Target, bool Visible)
{ {
if (!HasAuthority()) if (HasAuthority()) return;
{
if (ADefaultPlayerState* State = Target->GetPlayerState<ADefaultPlayerState>()) ADefaultPlayerState* State = Target->GetPlayerState<ADefaultPlayerState>();
if (!State)
{ {
UE_LOG(LogTemp, Error, TEXT("GetPlayerState<ADefaultPlayerState> Failed"));
return;
}
if (State->GetTeam() == GetPlayerState<ADefaultPlayerState>()->GetTeam()) if (State->GetTeam() == GetPlayerState<ADefaultPlayerState>()->GetTeam())
{ {
Target->GetMesh()->SetRenderCustomDepth(Visible); Target->GetMesh()->SetRenderCustomDepth(Visible);
@@ -103,12 +122,6 @@ void ADefaultPlayerController::SetACharacterOutlineColor(ACharacter* Target, boo
Target->GetMesh()->SetRenderCustomDepth(Visible); Target->GetMesh()->SetRenderCustomDepth(Visible);
Target->GetMesh()->CustomDepthStencilValue = 2; Target->GetMesh()->CustomDepthStencilValue = 2;
} }
}
else
{
UE_LOG(LogTemp, Error, TEXT("GetPlayerState<ADefaultPlayerState> Failed"));
}
}
} }
ADefaultPlayerController::ADefaultPlayerController() ADefaultPlayerController::ADefaultPlayerController()
@@ -133,7 +146,6 @@ ADefaultPlayerController::ADefaultPlayerController()
IA_SKILL2(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill2.Skill2'")), IA_SKILL2(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill2.Skill2'")),
IA_SKILL3(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill3.Skill3'")), IA_SKILL3(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill3.Skill3'")),
IA_SKILL4(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill4.Skill4'")), IA_SKILL4(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill4.Skill4'")),
IA_SKILL4_End(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Skill4_End.Skill4_End'")),
IA_RUNESPELL1(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/RuneSpell1.RuneSpell1'")), IA_RUNESPELL1(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/RuneSpell1.RuneSpell1'")),
IA_RUNESPELL2(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/RuneSpell2.RuneSpell2'")), IA_RUNESPELL2(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/RuneSpell2.RuneSpell2'")),
IA_WARD(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Ward.Ward'")), IA_WARD(TEXT("/Script/EnhancedInput.InputAction'/Game/InputActions/Ward.Ward'")),
@@ -161,11 +173,6 @@ ADefaultPlayerController::ADefaultPlayerController()
UE_LOG(LogTemp, Error, TEXT("IA_ULTIMATESKILL load failed.")); UE_LOG(LogTemp, Error, TEXT("IA_ULTIMATESKILL load failed."));
return; return;
} }
if (!IA_SKILL4_End.Succeeded())
{
UE_LOG(LogTemp, Error, TEXT("IA_ULTIMATESKILL load failed."));
return;
}
if (!IA_RUNESPELL1.Succeeded()) if (!IA_RUNESPELL1.Succeeded())
{ {
UE_LOG(LogTemp, Error, TEXT("IA_RUNESPELL1 load failed.")); UE_LOG(LogTemp, Error, TEXT("IA_RUNESPELL1 load failed."));
@@ -202,7 +209,6 @@ ADefaultPlayerController::ADefaultPlayerController()
Skill2Action = IA_SKILL2.Object; Skill2Action = IA_SKILL2.Object;
Skill3Action = IA_SKILL3.Object; Skill3Action = IA_SKILL3.Object;
Skill4Action = IA_SKILL4.Object; Skill4Action = IA_SKILL4.Object;
Skill4_EndAction = IA_SKILL4_End.Object;
RuneSpell1Action = IA_RUNESPELL1.Object; RuneSpell1Action = IA_RUNESPELL1.Object;
RuneSpell2Action = IA_RUNESPELL2.Object; RuneSpell2Action = IA_RUNESPELL2.Object;
WardAction = IA_WARD.Object; WardAction = IA_WARD.Object;
@@ -222,21 +228,20 @@ void ADefaultPlayerController::SetupInputComponent()
{ {
Super::SetupInputComponent(); Super::SetupInputComponent();
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent)) UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent);
{ if (!EnhancedInputComponent) return;
EnhancedInputComponent->BindAction(Skill1Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill1); EnhancedInputComponent->BindAction(Skill1Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill1);
EnhancedInputComponent->BindAction(Skill2Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill2); EnhancedInputComponent->BindAction(Skill2Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill2);
EnhancedInputComponent->BindAction(Skill3Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill3); EnhancedInputComponent->BindAction(Skill3Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill3);
EnhancedInputComponent->BindAction(Skill4Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill4); EnhancedInputComponent->BindAction(Skill4Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill4Triggered);
EnhancedInputComponent->BindAction(Skill4_EndAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Skill4_End); EnhancedInputComponent->BindAction(Skill4Action.Get(), ETriggerEvent::Completed, this, &ADefaultPlayerController::Skill4Completed);
EnhancedInputComponent->BindAction(RuneSpell1Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::RuneSpell1); EnhancedInputComponent->BindAction(RuneSpell1Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::RuneSpell1);
EnhancedInputComponent->BindAction(RuneSpell2Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::RuneSpell2); EnhancedInputComponent->BindAction(RuneSpell2Action.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::RuneSpell2);
EnhancedInputComponent->BindAction(WardAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Ward); EnhancedInputComponent->BindAction(WardAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Ward);
EnhancedInputComponent->BindAction(BombAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Bomb); EnhancedInputComponent->BindAction(BombAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Bomb);
EnhancedInputComponent->BindAction(ObjectSelectAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::ObjectSelect); EnhancedInputComponent->BindAction(ObjectSelectAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::ObjectSelect);
EnhancedInputComponent->BindAction(MoveAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::MoveTriggered); EnhancedInputComponent->BindAction(MoveAction.Get(), ETriggerEvent::Triggered, this, &ADefaultPlayerController::Move);
EnhancedInputComponent->BindAction(MoveAction.Get(), ETriggerEvent::Started, this, &ADefaultPlayerController::MoveStarted);
}
} }
void ADefaultPlayerController::Skill1() void ADefaultPlayerController::Skill1()
@@ -250,7 +255,7 @@ void ADefaultPlayerController::Skill1()
SimpleMoveToLocation(this, Location); SimpleMoveToLocation(this, Location);
this->MoveToLocation(Location); this->MoveToLocation(Location);
GetPawn()->SetActorRotation((GetMouseHitLocation() - Location).Rotation()); Server_SetRotation(GetMouseHitLocation());
UE_LOG(LogTemp, Warning, TEXT("Skill1")); UE_LOG(LogTemp, Warning, TEXT("Skill1"));
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack);
@@ -265,7 +270,7 @@ void ADefaultPlayerController::Skill2()
SimpleMoveToLocation(this, Location); SimpleMoveToLocation(this, Location);
this->MoveToLocation(Location); this->MoveToLocation(Location);
GetPawn()->SetActorRotation((GetMouseHitLocation() - Location).Rotation()); Server_SetRotation(GetMouseHitLocation());
UE_LOG(LogTemp, Warning, TEXT("Skill2")); UE_LOG(LogTemp, Warning, TEXT("Skill2"));
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack);
@@ -280,14 +285,14 @@ void ADefaultPlayerController::Skill3()
SimpleMoveToLocation(this, Location); SimpleMoveToLocation(this, Location);
this->MoveToLocation(Location); this->MoveToLocation(Location);
GetPawn()->SetActorRotation((GetMouseHitLocation() - Location).Rotation()); Server_SetRotation(GetMouseHitLocation());
UE_LOG(LogTemp, Warning, TEXT("Skill3")); UE_LOG(LogTemp, Warning, TEXT("Skill3"));
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack);
GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill3); GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill3);
} }
void ADefaultPlayerController::Skill4() void ADefaultPlayerController::Skill4Triggered()
{ {
FVector Location = GetPawn()->GetActorLocation(); FVector Location = GetPawn()->GetActorLocation();
Location.Z = 0; Location.Z = 0;
@@ -295,14 +300,14 @@ void ADefaultPlayerController::Skill4()
SimpleMoveToLocation(this, Location); SimpleMoveToLocation(this, Location);
this->MoveToLocation(Location); this->MoveToLocation(Location);
GetPawn()->SetActorRotation((GetMouseHitLocation() - Location).Rotation()); Server_SetRotation(GetMouseHitLocation());
UE_LOG(LogTemp, Warning, TEXT("Skill4")); UE_LOG(LogTemp, Warning, TEXT("Skill4 Triggered"));
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack);
GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill4Started); GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill4Triggered);
} }
void ADefaultPlayerController::Skill4_End() void ADefaultPlayerController::Skill4Completed()
{ {
FVector Location = GetPawn()->GetActorLocation(); FVector Location = GetPawn()->GetActorLocation();
Location.Z = 0; Location.Z = 0;
@@ -310,9 +315,9 @@ void ADefaultPlayerController::Skill4_End()
SimpleMoveToLocation(this, Location); SimpleMoveToLocation(this, Location);
this->MoveToLocation(Location); this->MoveToLocation(Location);
GetPawn()->SetActorRotation((GetMouseHitLocation() - Location).Rotation()); Server_SetRotation(GetMouseHitLocation());
UE_LOG(LogTemp, Warning, TEXT("Skill4_End")); UE_LOG(LogTemp, Warning, TEXT("Skill4 Completed"));
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Attack);
GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill4Comlpleted); GetPlayerState<ADefaultPlayerState>()->SetAttackType(CooldownType::Skill4Comlpleted);
} }
@@ -354,21 +359,11 @@ void ADefaultPlayerController::ObjectSelect()
GetHitResultUnderCursorForObjects(ObjectTypes, true, HitResult); GetHitResultUnderCursorForObjects(ObjectTypes, true, HitResult);
if (ACharacter* HitObject = Cast<ACharacter>(HitResult.GetActor())) ACharacter* HitObject = Cast<ACharacter>(HitResult.GetActor());
{ if (!HitObject) return;
UE_LOG(LogTemp, Warning, TEXT("%s"), *HitObject->GetName()); UE_LOG(LogTemp, Warning, TEXT("%s"), *HitObject->GetName());
SetACharacterOutlineColor(HitObject, true); SetACharacterOutlineColor(HitObject, true);
}
}
void ADefaultPlayerController::MoveTriggered()
{
Move();
}
void ADefaultPlayerController::MoveStarted()
{
Move();
} }
void ADefaultPlayerController::Move() void ADefaultPlayerController::Move()
@@ -380,13 +375,26 @@ void ADefaultPlayerController::Move()
this->MoveToLocation(Destination); this->MoveToLocation(Destination);
} }
void ADefaultPlayerController::Multicast_SetRotation_Implementation(FVector MouseHitLocation)
{
FVector Location = GetPawn()->GetActorLocation();
Location.Z = 0;
GetPawn()->SetActorRotation((MouseHitLocation - Location).Rotation());
}
void ADefaultPlayerController::Server_SetRotation_Implementation(FVector MouseHitLocation)
{
Multicast_SetRotation(MouseHitLocation);
}
FVector ADefaultPlayerController::GetMouseHitLocation() FVector ADefaultPlayerController::GetMouseHitLocation()
{ {
FHitResult HitResult; FHitResult HitResult;
GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, HitResult); GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, HitResult);
HitResult.Location.Z = 0; HitResult.Location.Z = 0;
UE_LOG(LogTemp, Warning, TEXT("Client%d MoveTo : (%f, %f)"), GPlayInEditorID, HitResult.Location.X, HitResult.Location.Y); //UE_LOG(LogTemp, Warning, TEXT("Client%d MoveTo : (%f, %f)"), GPlayInEditorID, HitResult.Location.X, HitResult.Location.Y);
FVector ActorLocation = GetPawn()->GetActorLocation(); FVector ActorLocation = GetPawn()->GetActorLocation();
ActorLocation.Z = 0; ActorLocation.Z = 0;
@@ -399,8 +407,8 @@ FVector ADefaultPlayerController::GetMouseHitLocation()
DrawDebugLine(GetWorld(), HitResult.Location, Destination, FColor::Emerald, false, 1, 0, 1); DrawDebugLine(GetWorld(), HitResult.Location, Destination, FColor::Emerald, false, 1, 0, 1);
const UWorld* CurrentWorld = GetWorld(); const UWorld* CurrentWorld = GetWorld();
if (CurrentWorld) if (!CurrentWorld) return Destination;
{
FHitResult CollisionCheck; FHitResult CollisionCheck;
FCollisionQueryParams CollisionParams; FCollisionQueryParams CollisionParams;
@@ -409,12 +417,11 @@ FVector ADefaultPlayerController::GetMouseHitLocation()
FVector Start = HitResult.Location; FVector Start = HitResult.Location;
FVector End = Destination; FVector End = Destination;
if (CurrentWorld->LineTraceSingleByChannel(CollisionCheck, Start, End, ECC_Visibility, CollisionParams)) if (!CurrentWorld->LineTraceSingleByChannel(CollisionCheck, Start, End, ECC_Visibility, CollisionParams))
{ return Destination;
DrawDebugLine(CurrentWorld, Start, End, FColor::Red, false, 1.5, 0, 2); DrawDebugLine(CurrentWorld, Start, End, FColor::Red, false, 1.5, 0, 2);
Destination = HitResult.Location; Destination = HitResult.Location;
}
}
return Destination; return Destination;
} }
@@ -499,8 +506,8 @@ void ADefaultPlayerController::SimpleMoveToLocation(AController* Controller, con
void ADefaultPlayerController::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& MovementResult) void ADefaultPlayerController::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& MovementResult)
{ {
if (MovementResult.IsSuccess()) if (!MovementResult.IsSuccess()) return;
{
if (!GPlayInEditorID) if (!GPlayInEditorID)
{ {
UE_LOG(LogTemp, Warning, TEXT("Server MoveCompleted")); UE_LOG(LogTemp, Warning, TEXT("Server MoveCompleted"));
@@ -509,8 +516,8 @@ void ADefaultPlayerController::OnMoveCompleted(FAIRequestID RequestID, const FPa
{ {
UE_LOG(LogTemp, Warning, TEXT("Client%d MoveCompleted"), GPlayInEditorID); UE_LOG(LogTemp, Warning, TEXT("Client%d MoveCompleted"), GPlayInEditorID);
} }
GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Idle); GetPlayerState<ADefaultPlayerState>()->SetState(ECharacterState::Idle);
}
} }
void ADefaultPlayerController::Attack() void ADefaultPlayerController::Attack()

View File

@@ -34,20 +34,24 @@ public:
void Skill1(); void Skill1();
void Skill2(); void Skill2();
void Skill3(); void Skill3();
void Skill4(); void Skill4Triggered();
void Skill4_End(); void Skill4Completed();
void RuneSpell1(); void RuneSpell1();
void RuneSpell2(); void RuneSpell2();
void Ward(); void Ward();
void Bomb(); void Bomb();
void ObjectSelect(); void ObjectSelect();
void MoveTriggered();
void MoveStarted();
void Move(); void Move();
UFUNCTION(Server, Reliable) UFUNCTION(Server, Reliable)
void MoveToLocation(FVector Location); void MoveToLocation(FVector Location);
UFUNCTION(NetMulticast, Reliable)
void Multicast_SetRotation(FVector MouseHitLocation);
UFUNCTION(Server, Reliable)
void Server_SetRotation(FVector MouseHitLocation);
FVector GetMouseHitLocation(); FVector GetMouseHitLocation();
UFUNCTION(BlueprintCallable, Category = "AI|Navigation") UFUNCTION(BlueprintCallable, Category = "AI|Navigation")
@@ -72,8 +76,6 @@ private:
TSoftObjectPtr<UInputAction> Skill3Action; TSoftObjectPtr<UInputAction> Skill3Action;
UPROPERTY(EditAnywhere, Category = "Input") UPROPERTY(EditAnywhere, Category = "Input")
TSoftObjectPtr<UInputAction> Skill4Action; TSoftObjectPtr<UInputAction> Skill4Action;
UPROPERTY(EditAnywhere, Category = "Input")
TSoftObjectPtr<UInputAction> Skill4_EndAction;
UPROPERTY(EditAnywhere, Category = "Input") UPROPERTY(EditAnywhere, Category = "Input")
TSoftObjectPtr<UInputAction> RuneSpell1Action; TSoftObjectPtr<UInputAction> RuneSpell1Action;
UPROPERTY(EditAnywhere, Category = "Input") UPROPERTY(EditAnywhere, Category = "Input")

View File

@@ -26,46 +26,18 @@ void ADefaultPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>&
DOREPLIFETIME(ADefaultPlayerState, PlayerCamera); DOREPLIFETIME(ADefaultPlayerState, PlayerCamera);
} }
void ADefaultPlayerState::InitPlayerStats() void ADefaultPlayerState::InitPlayerStats_Implementation(const TArray<float>& StatsValue, const TArray<float>& CooldownDurationValue)
{ {
ADefaultPlayerCharacter* Initializer = Cast<ADefaultPlayerCharacter>(CharacterBPRef); MaxStats.Append(StatsValue);
Stats.Append(StatsValue);
CooldownDuration.Append(CooldownDurationValue);
MaxCooldownDuration.Append(CooldownDurationValue);
Stats.Health = Initializer->GetHealth();
Stats.HPRegeneration = Initializer->GetHPRegeneration();
Stats.HealAndShieldpower = Initializer->GetHealAndShieldpower();
Stats.Armor = Initializer->GetArmor();
Stats.MagicResistance = Initializer->GetMagicResistance();
Stats.Tenacity = Initializer->GetTenacity();
Stats.SlowRisist = Initializer->GetSlowRisist();
Stats.AttackSpeed = Initializer->GetAttackSpeed();
Stats.AttackDamage = Initializer->GetAttackDamage();
Stats.AbilityPower = Initializer->GetAbilityPower();
Stats.CriticalStrikeChance = Initializer->GetCriticalStrikeChance();
Stats.CriticalStrikeDamage = Initializer->GetCriticalStrikeDamage();
Stats.ArmorPenetration = Initializer->GetArmorPenetration();
Stats.MagicPenetration = Initializer->GetMagicPenetration();
Stats.LifeSteal = Initializer->GetLifeSteal();
Stats.PhysicalVamp = Initializer->GetPhysicalVamp();
Stats.Omnivamp = Initializer->GetOmnivamp();
Stats.AbilityHaste = Initializer->GetAbilityHaste();
SetMultipleCooldownDuration(Initializer->GetCooldownDuration()); for (float Value : StatsValue)
{
Stats.Mana = Initializer->GetMana(); UE_LOG(LogTemp, Warning, TEXT("Values: %f"), Value);
Stats.ManaRegeneration = Initializer->GetManaRegeneration(); }
Stats.Energy = Initializer->GetEnergy();
Stats.EnergyRegeneration = Initializer->GetEnergyRegeneration();
Stats.AttackRange = Initializer->GetAttackRange();
Stats.MovementSpeed = Initializer->GetMovementSpeed();
Stats.GoldGeneration = Initializer->GetGoldGeneration();
Stats.AttackDamageGrowth = Initializer->GetAttackDamageGrowth();
Stats.AttackSpeedGrowth = Initializer->GetAttackSpeedGrowth();
Stats.ArmorGrowth = Initializer->GetArmorGrowth();
Stats.MagicResistanceGrowth = Initializer->GetMagicResistanceGrowth();
Stats.HealthGrowth = Initializer->GetHealthGrowth();
Stats.HealthRegenerationGrowth = Initializer->GetHealthRegenerationGrowth();
Stats.ManaGrowth = Initializer->GetManaGrowth();
Stats.ManaRegenerationGrowth = Initializer->GetManaRegenerationGrowth();
} }
void ADefaultPlayerState::NetMulticast_SetAttackType_Implementation(CooldownType Value) void ADefaultPlayerState::NetMulticast_SetAttackType_Implementation(CooldownType Value)
@@ -92,8 +64,3 @@ int32 ADefaultPlayerState::GetCharacterLevel() const
{ {
return int32(); return int32();
} }
void ADefaultPlayerState::SetMultipleCooldownDuration(const float* Value)
{
std::memcpy(&CooldownDuration, Value, sizeof(float) * (uint8)CooldownType::SIZE);
}

View File

@@ -21,7 +21,8 @@ public:
ADefaultPlayerState(); ADefaultPlayerState();
void GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const override; void GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const override;
void InitPlayerStats(); UFUNCTION(Server, Reliable)
void InitPlayerStats(const TArray<float>& StatsValue, const TArray<float>& CooldownDurationValue);
void SetCharacterBPRef(UClass* Value) { CharacterBPRef = Value; } void SetCharacterBPRef(UClass* Value) { CharacterBPRef = Value; }
UClass* GetCharacterBPRef() const { return CharacterBPRef; } UClass* GetCharacterBPRef() const { return CharacterBPRef; }
@@ -34,10 +35,11 @@ public:
void SetPlayerCamera(AActor* Actor) { PlayerCamera = Actor; } void SetPlayerCamera(AActor* Actor) { PlayerCamera = Actor; }
AActor* GetPlayerCamera() const { return PlayerCamera; } AActor* GetPlayerCamera() const { return PlayerCamera; }
UFUNCTION(BlueprintCallable) //fix later
void SetCooldownDuration(CooldownType Key, float Value) { CooldownDuration[(uint8)Key] = Value; } //UFUNCTION(BlueprintCallable)
UFUNCTION(BlueprintCallable) //void SetCooldownDuration(CooldownType Key, float Value) { CooldownDuration[(uint8)Key] = Value; }
float GetCooldownDuration(CooldownType Key) const { return CooldownDuration[(uint8)Key]; } //UFUNCTION(BlueprintCallable)
//float GetCooldownDuration(CooldownType Key) const { return CooldownDuration[(uint8)Key]; }
//Execute on server //Execute on server
UFUNCTION(BlueprintCallable, Server, Reliable) UFUNCTION(BlueprintCallable, Server, Reliable)
@@ -58,13 +60,15 @@ public:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
int32 GetCharacterLevel() const; int32 GetCharacterLevel() const;
//Should be ONLY executed on server!! UPROPERTY(Replicated, Transient, EditAnywhere, BlueprintReadWrite)
void SetMultipleCooldownDuration(const float* Value) ; TArray<float> Stats;
UPROPERTY(Replicated, Transient, EditAnywhere, BlueprintReadWrite)
TArray<float> MaxStats;
UPROPERTY(Replicated, EditAnywhere, BlueprintReadWrite) UPROPERTY(Replicated, Transient, BlueprintReadWrite)
FDefaultStats Stats; TArray<float> CooldownDuration;
UPROPERTY(Replicated, EditAnywhere, BlueprintReadWrite) UPROPERTY(Replicated, Transient, BlueprintReadWrite)
FDefaultStats MaxStats; TArray<float> MaxCooldownDuration;
private: private:
UPROPERTY(Replicated, Transient) UPROPERTY(Replicated, Transient)
@@ -72,9 +76,6 @@ private:
UPROPERTY(Replicated, Transient) UPROPERTY(Replicated, Transient)
TeamType Team; TeamType Team;
UPROPERTY(Replicated, Transient)
float CooldownDuration[(uint8)CooldownType::SIZE] = { 0.0f, };
UPROPERTY(Replicated, Transient) UPROPERTY(Replicated, Transient)
ECharacterState State; ECharacterState State;
UPROPERTY(Replicated, Transient) UPROPERTY(Replicated, Transient)

View File

@@ -1,6 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "PerformSkill.h"
// Add default functionality here for any IPerformSkill functions that are not pure virtual.

View File

@@ -1,28 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "PerformSkill.generated.h"
// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UPerformSkill : public UInterface
{
GENERATED_BODY()
};
/**
*
*/
class PROMETHER_API IPerformSkill
{
GENERATED_BODY()
// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
virtual void Skill4Started() = 0;
virtual void Skill4Triggered() = 0;
virtual void Skill4Completed() = 0;
};

View File

@@ -91,3 +91,41 @@ struct FUniqueObjectID
int32 RandomUniqueNumber; int32 RandomUniqueNumber;
}; };
UENUM(BlueprintType)
enum class EStats : uint8
{
Health,
HPRegeneration,
HealAndShieldpower,
Armor,
MagicResistance,
Tenacity,
SlowRisist,
AttackSpeed,
AttackDamage,
AbilityPower,
CriticalStrikeChance,
CriticalStrikeDamage,
ArmorPenetration,
MagicPenetration,
LifeSteal,
PhysicalVamp,
Omnivamp,
AbilityHaste,
Mana,
ManaRegeneration,
Energy,
EnergyRegeneration,
AttackRange,
MovementSpeed,
GoldGeneration,
AttackDamageGrowth,
AttackSpeedGrowth,
ArmorGrowth,
MagicResistanceGrowth,
HealthGrowth,
HealthRegenerationGrowth,
ManaGrowth,
ManaRegenerationGrowth,
SIZE
};