캐릭터 스탯을 관리하기 위해서
ActorComponet를 상속받아 StatComponet를 새롭게 만듬
앞으로 캐릭터의 스탯은 이 클래스가 관리하도록 함
무기도 여기에서 관리를 하도록 함
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class KGAME_API UKCharacterStatComponent : public UActorComponent
{
GENERATED_BODY()
public:
UKCharacterStatComponent();
protected:
virtual void BeginPlay() override;
// virtual void InitializeComponent() override;
public:
void SetCharacterStat(enum ECharacterType type);
//void SetDamage(float NewDamage);
//void SetHP(float NewHP);
//float GetAttack() const;
//float GetHPRatio() const;
//FOnHPIsZeroDelegate OnHPIsZero;
//FOnHPChangedDelegate OnHPChanged;
//FAmmoChangeDelgate OnAmmoChange;
float GetCharacterHP();
float GetCharacterSpeed();
void SetCharacterSpeed(float value);
void SetCharacterWeapon(class AKWeapon* NewWeapon, class AKCharacter* character);
AKWeapon* GetCharacterWeapon();
private:
struct FCharacterData* CurrentStatData = nullptr;
ECharacterType Type;
UPROPERTY(VisibleAnywhere, Category =" Stat", Meta = (AllowPirvateAccess = true))
float CurrentHP;
UPROPERTY(VisibleAnywhere, Category = "Stat", Meta = (AllowPirvateAccess = true))
float CurrentSpeed;
UPROPERTY(VisibleAnywhere, Category = "Weapon", Meta = (AllowPirvateAccess = true))
class AKWeapon* CurrentWeapon;
int32 CurrentAmmo;
int32 MaxAmmo;
};
void UKCharacterStatComponent::SetCharacterStat(enum ECharacterType type)
{
auto KGameInstance = Cast<UKGameInstance>(UGameplayStatics::GetGameInstance(GetWorld()));
KGameInstance->GetCharacterData(type);
if (nullptr != CurrentStatData)
{
Type = type;
CurrentHP = CurrentStatData->MaxHP;
CurrentSpeed = CurrentStatData->Speed;
}
else
{
//레벨존재 X
//KLOG(Warning,TEXT("SetCharacterStat Error"));
}
}
void UKCharacterStatComponent::SetCharacterWeapon(class AKWeapon* NewWeapon, class AKCharacter* character)
{
FName WeaponSocket(TEXT("hand_rSocket"));
if (nullptr != NewWeapon)
{
NewWeapon->AttachToComponent(character->GetMesh(), FAttachmentTransformRules::SnapToTargetNotIncludingScale, WeaponSocket);
NewWeapon->SetOwner(character);
CurrentWeapon = NewWeapon;
CurrentAmmo = CurrentWeapon->GetCurAmmo();
MaxAmmo = CurrentWeapon->GetMaxAmmo();
}
}
float UKCharacterStatComponent::GetCharacterHP()
{
return CurrentHP;
}
float UKCharacterStatComponent::GetCharacterSpeed()
{
return CurrentSpeed;
}
void UKCharacterStatComponent::SetCharacterSpeed(float value)
{
CurrentSpeed = value;
}
AKWeapon* UKCharacterStatComponent::GetCharacterWeapon()
{
return CurrentWeapon;
}
'Unreal > Game 2 ' 카테고리의 다른 글
9.3 PlayerState - 작성 중 (0) | 2019.06.30 |
---|---|
9.2 플레이어 HUD (0) | 2019.06.30 |
9. GameInstace 및 DataTable (0) | 2019.06.27 |
8.3 Screen Center Aim Shooting (0) | 2019.06.25 |
8.2 Aim CrossHair (0) | 2019.06.24 |