8#include "Components/BoxComponent.h"
9#include "Components/StaticMeshComponent.h"
10#include "Components/SkeletalMeshComponent.h"
11#include "Animation/AnimationAsset.h"
12#include "Net/UnrealNetwork.h"
16 PrimaryActorTick.bCanEverTick =
true;
22 USceneComponent* Root = CreateDefaultSubobject<USceneComponent>(TEXT(
"DefaultSceneRoot"));
26 MeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT(
"MeshComponent"));
30 BoxCollision = CreateDefaultSubobject<UBoxComponent>(TEXT(
"BoxCollision"));
33 BoxCollision->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
34 BoxCollision->SetCollisionResponseToAllChannels(ECR_Overlap);
37 HoldPos = CreateDefaultSubobject<USceneComponent>(TEXT(
"HoldPos"));
53 Super::Tick(DeltaTime);
58 FRotator CurrentRotation =
CurTarget->GetActorRotation();
60 CurTarget->SetActorRotation(CurrentRotation);
66 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
85 Luggage->SetAllCollision(
false);
86 PRINTLOG(TEXT(
"AHolder::OnRep_CurTarget - Disabled collision for Luggage on client"));
98 UPrimitiveComponent* OverlappedComponent,
100 UPrimitiveComponent* OtherComp,
101 int32 OtherBodyIndex,
103 const FHitResult& SweepResult)
119 if (
auto Luggage = Cast<Aluggage>(OtherActor))
142 bool bSuccess = bColorMatch && bPatternMatch;
144 PRINTLOG(TEXT(
"ColorIdx: %d (Answer: %d), PatternIdx: %d (Answer: %d), Result: %s"),
147 bSuccess ? TEXT(
"Success") : TEXT(
"Fail"));
154 FVector ActivatedLocation =
HoldPos->GetComponentLocation();
156 TargetLuggage->SetActorLocation(ActivatedLocation);
157 TargetLuggage->SetActorRotation(
HoldPos->GetComponentRotation());
174 TargetLuggage->Destroy();
188 UMaterialInstanceDynamic* DynamicMaterial = Cast<UMaterialInstanceDynamic>(
MeshComponent->GetMaterial(0));
189 if (!DynamicMaterial)
190 DynamicMaterial =
MeshComponent->CreateDynamicMaterialInstance(0);
193 DynamicMaterial->SetScalarParameterValue(FName(
"Activate"), State ? 1.0f : 0.0f);
네트워크 복제를 위한 전역 브로드캐스트 Actor
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
void OnBoxOverlapBegin(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
virtual void GetLifetimeReplicatedProps(TArray< class FLifetimeProperty > &OutLifetimeProps) const override
virtual void Tick(float DeltaTime) override
virtual void BeginPlay() override
TObjectPtr< class UBoxComponent > BoxCollision
bool CheckLuggage(class Aluggage *TargetLuggage)
void UpdateActivateState(bool State)
float ActivatedHeightOffset
TObjectPtr< class AActor > CurTarget
void OnActivate(bool bSuccess)
void SetAnswerData(const int32 InAnswerColorIdx, const int32 InAnswerPatternIdx)
TObjectPtr< class USkeletalMeshComponent > MeshComponent
TObjectPtr< class USceneComponent > HoldPos
static ANetworkBroadcastActor * Get(const UObject *WorldContextObject)
싱글톤 인스턴스 가져오기
void SetAllCollision(bool bEnable)
모든 컴포넌트의 충돌과 물리를 설정합니다.
static const FString Holder_Fail
static const FString Holder_Success