원래는 진도를 확확 나가버릴 생각이었는데
가정사로 인해서 어제 만든 아이콘을 적용시켜보았다.
갈수록 짧아지는 개발 분량에 대해서 스스로 자괴감이 들 정도지만 내일부터는 좀 더 분발해보도록 할 예정.
간단하게 아이콘을 받아서 그대로 적용하는 역할이다.
class THEZOMBIES_API UUIWidget : public UUserWidget
{
GENERATED_BODY()
UPROPERTY(Meta = (WidgetBind))
class UProgressBar* HPbar;
UPROPERTY(Meta = (WidgetBind))
class UProgressBar* SPbar;
UPROPERTY(Meta = (WidgetBind))
class UTextBlock* HP;
UPROPERTY(Meta = (WidgetBind))
class UTextBlock* SP;
UPROPERTY(Meta = (WidgetBind))
class UTextBlock* CurrentEquipNum;
UPROPERTY(Meta = (WidgetBind))
class UTextBlock* MaxEquipNum;
UPROPERTY(Meta = (WidgetBind))
class UImage* WeaponImage;
UPROPERTY(Meta = (WidgetBind))
class UGridPanel* WeaponPanel;
public:
UFUNCTION()
void SetHPbarPercentage(float Percentage);
UFUNCTION()
void SetSPbarPercentage(float Percentage);
UFUNCTION()
void EquipWeapon(class AWeapon* CurWeapon);
};
//위젯에 EquipWeapon을 적용
void UUIWidget::EquipWeapon(AWeapon* CurWeapon) {
WeaponImage->SetBrushResourceObject(CurWeapon->GetIcon());
WeaponPanel->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
}
//감춰두었던 Panel을 오픈시킨다.
void ACurrentUseWidget::ShowUIWidget(class UPlayerStatus* PlayerStatus) {
if (CrossHair)
CrossHair->RemoveFromViewport();
CrossHair = CreateWidget(GetWorld(), CrossHairClass);
CrossHair->AddToViewport();
if (StateUI)
StateUI->RemoveFromViewport();
StateUI = CreateWidget(GetWorld(), StateUIClass);
PlayerStatus->OnSetHP.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::SetHPbarPercentage);
PlayerStatus->OnSetSP.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::SetSPbarPercentage);
PlayerStatus->OnEquipWeapon.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::EquipWeapon);
StateUI->AddToViewport();
}
//그리고 계속해서 HUD에 접근하게 되면 여러 Cast를 거쳐야 하므로 이 또한 델리게이트를 통해 보내준다.
//이것들은 여러 함수를 동시 참조할 가능성이 있는 행동이기 때문에 멀티캐스트로 시동
void UPlayerStatus::DoFarmingWeapon(){
if (FocusingWeapon.Num()) {
//if (Cast<AWeapon*>(FocusingWeapon[0])) {}
//무기일 경우
//무기의 종류 판별
//종류에 따라 배치, if Main Rifle & Sub Rilfe != nullptr, 인벤토리
if (MainWeapon == nullptr) MainWeapon = Cast<AGun>(FocusingWeapon[0]);
else if (SubWeapon == nullptr) SubWeapon = Cast<AGun>(FocusingWeapon[0]);
//else 무기 전송, state 세팅
CurWeapon = Cast<AWeapon>(FocusingWeapon[0]);
OnDoFarmingCurrentWeapon.Broadcast(CurWeapon);
OnEquipWeapon.Broadcast(CurWeapon);
//자원일 경우(탄창, 소모품 등)
//그대로 인벤토리에 전송
//TArray의 데이터 자료형을 변경할 필요가 있음.
}
}
//무기를 착용함과 동시에 델리게이트를 사용한다.
class THEZOMBIES_API AItem : public AActor
{
GENERATED_BODY()
//CurrentCount(현재수량), MaxCount(최대수량), Durability(내구도), FlavorText(플레이터 텍스트)
public:
// Sets default values for this actor's properties
AItem();
protected:
// Called when the game starts or when spawned
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Infomation)
int32 CurrentCount;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Infomation)
int32 MaxCount;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Infomation)
int32 Durability;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Infomation)
FText FlavorText;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Icon)
class UTexture* Icon;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Mesh)
class USkeletalMeshComponent* Body;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Mesh)
class UBoxComponent* Interaction;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Owner)
class ATheZombiesCharacter* MyOwner;
UFUNCTION()
void BindInteractionCharacter(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
UFUNCTION()
void UnBindInteractionCharacter(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);
virtual void BeginPlay() override;
public:
FORCEINLINE class USkeletalMeshComponent* GetBody() const { return Body; }
FORCEINLINE class UTexture* GetIcon() const { return Icon; }
// Called every frame
virtual void Tick(float DeltaTime) override;
void SetInteractionCollision(bool bUseCollision);
void SetOwner(class ATheZombiesCharacter* NewOwner);
};
//아이콘은 인벤토리에도 쓰일 가능성이 크기 때문에 AItem 클래스에 내부 변수로 둔다.
'게임프로그래밍 > TheZombie' 카테고리의 다른 글
게임 개발 - AI(2) (0) | 2022.02.04 |
---|---|
게임 개발 - 몬스터, AI(1) (0) | 2022.02.04 |
게임 개발 - UI(3) (0) | 2022.02.04 |
게임 개발 - UI(2), HP/SP (0) | 2022.02.04 |
게임 개발 - 본IK (0) | 2022.02.04 |
댓글