캐릭터 스탯을 관리하기 위해서

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

+ Recent posts