12#include "Components/ArrowComponent.h"
13#include "Components/BoxComponent.h"
20 PrimaryActorTick.bCanEverTick =
true;
22 RootSceneComp = CreateDefaultSubobject<USceneComponent>(TEXT(
"RootSceneComp"));
25 BeltComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT(
"BeltComp"));
26 ConstructorHelpers::FObjectFinder<UStaticMesh> beltMeshRef(TEXT(
"/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_ChamferCube.SM_ChamferCube'"));
27 if (beltMeshRef.Succeeded())
29 BeltComp->SetStaticMesh(beltMeshRef.Object);
30 BeltComp->SetRelativeScale3D(FVector(1.5,5.5,0.05));
31 BeltComp->SetupAttachment(GetRootComponent());
34 BeltBoxComp = CreateDefaultSubobject<UBoxComponent>(TEXT(
"BeltBoxComp"));
38 MoveDirArrowComp = CreateDefaultSubobject<UArrowComponent>(TEXT(
"MoveDirArrowComp"));
43 BeltComp->SetCollisionProfileName(TEXT(
"BlockAllDynamic"));
44 BeltBoxComp->SetCollisionProfileName(TEXT(
"ConveyorBelt"));
61 Super::Tick(DeltaTime);
76void AConveyorBelt::ServerRPC_InitConveyorBelt_Implementation()
81void AConveyorBelt::MulticastRPC_InitConveyorBelt_Implementation()
91void AConveyorBelt::ServerRPC_ChangeConveyorMovement_Implementation()
96void AConveyorBelt::MulticastRPC_ChangeConveyorMovement_Implementation()
107void AConveyorBelt::Multicast_ChangeConveyorSpeed_Implementation(
float NewSpeed)
112void AConveyorBelt::Server_ChangeConveyorSpeed_Implementation(
float NewSpeed)
119 TArray<AActor*> overlappedActors;
120 BeltBoxComp->GetOverlappingActors(overlappedActors);
121 for (
const auto& actor : overlappedActors)
123 if (Cast<APlayerActor>(actor) || Cast<ANPCBase>(actor))
127 actor->AddActorWorldOffset(deltaLoc);
144 TArray<UPrimitiveComponent*> overlappedComponents;
145 BeltBoxComp->GetOverlappingComponents(overlappedComponents);
147 for (
const auto& comp : overlappedComponents)
149 AActor* owner = comp->GetOwner();
150 Aluggage* luggage = Cast<Aluggage>(owner);
153 if (!
Food && !luggage)
continue;
154 if (!Cast<UStaticMeshComponent>(comp))
continue;
173 moveDirection =
bIsForward ? moveDirection : -moveDirection;
176 UPrimitiveComponent* primComp = Cast<UPrimitiveComponent>(comp);
177 if (primComp && primComp->IsSimulatingPhysics())
185 FVector targetVelocity = moveDirection *
MoveSpeed;
186 FVector currentVelocity = primComp->GetPhysicsLinearVelocity();
189 FVector newVelocity = targetVelocity;
190 newVelocity.Z = currentVelocity.Z;
192 primComp->SetPhysicsLinearVelocity(newVelocity,
false);
Declares the player-controlled character actor.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
void MulticastRPC_InitConveyorBelt()
void Multicast_ChangeConveyorSpeed(float NewSpeed)
virtual void Tick(float DeltaTime) override
컨베이어 벨트 Tick
TObjectPtr< class USceneComponent > RootSceneComp
void ServerRPC_InitConveyorBelt()
void Server_ChangeConveyorSpeed(float NewSpeed)
TObjectPtr< class UStaticMeshComponent > BeltComp
TObjectPtr< class UBoxComponent > BeltBoxComp
void ServerRPC_ChangeConveyorMovement()
TObjectPtr< class UArrowComponent > MoveDirArrowComp
void MulticastRPC_ChangeConveyorMovement()
void ChangeConveyorSpeed(float NewSpeed)
void MoveOverlappedStatics(float deltaDistance)
정적 오브젝트 (Luggage) 이동 처리
void MoveOverlappedSkeletals(float deltaDistance)
void ChangeConveyorMovement()
virtual void BeginPlay() override
bool bIsBeingHooked
훅 중 플래그 (복제됨)
TObjectPtr< class UInteractableComponent > InteractableComp