diff --git a/Source/Nakatomi/StaticMeshPickup.cpp b/Source/Nakatomi/StaticMeshPickup.cpp new file mode 100644 index 0000000..ee59af2 --- /dev/null +++ b/Source/Nakatomi/StaticMeshPickup.cpp @@ -0,0 +1,43 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "StaticMeshPickup.h" + +AStaticMeshPickup::AStaticMeshPickup() +{ + PrimaryActorTick.bCanEverTick = true; + + StaticMeshComponent = CreateDefaultSubobject(TEXT("StaticMesh")); + StaticMeshComponent->SetupAttachment(RootComponent); +} + +void AStaticMeshPickup::BeginPlay() +{ + Super::BeginPlay(); + + StaticMeshComponent->SetWorldLocation(this->GetActorLocation()); + StartingLocation = this->GetActorLocation(); + StaticMeshComponent->SetCollisionProfileName(FName("NoCollision")); +} + +void AStaticMeshPickup::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + + if (StaticMeshComponent) + { + // Rotate Weapon in desired direction + StaticMeshComponent->AddLocalRotation((SpinRotation * RotationSpeed) * DeltaTime); + + // Bob weapon up and down + const float Time = GetWorld()->GetRealTimeSeconds(); + const float Sine = FMath::Abs(FMath::Sin(Time * MovementSpeed)); + StaticMeshComponent->SetRelativeLocation(StartingLocation + ((MovementDirection * Sine) * MovementDistance)); + } +} + +void AStaticMeshPickup::OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) +{ + Super::OnOverlapBegin(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult); +} diff --git a/Source/Nakatomi/StaticMeshPickup.h b/Source/Nakatomi/StaticMeshPickup.h new file mode 100644 index 0000000..5322235 --- /dev/null +++ b/Source/Nakatomi/StaticMeshPickup.h @@ -0,0 +1,53 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Pickup.h" +#include "StaticMeshPickup.generated.h" + +/** + * + */ +UCLASS() +class NAKATOMI_API AStaticMeshPickup : public APickup +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + UStaticMeshComponent* StaticMeshComponent = nullptr; + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + FVector MovementDirection = FVector(0.0f, 0.0f, 1.0f); + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + float MovementDistance = 1.0f; + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + float MovementSpeed = 1.0f; + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + FRotator SpinRotation = FRotator(0.0, 1.0f, 0.0f); + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + float RotationSpeed = 50.0f; + +private: + UPROPERTY() + FVector StartingLocation; + +public: + + AStaticMeshPickup(); + +protected: + virtual void BeginPlay() override; + +public: + virtual void Tick(float DeltaTime) override; + + virtual void OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override; +};