blaster/Source/Blaster/Weapon/Weapon.cpp

63 lines
2.0 KiB
C++
Raw Normal View History

2022-04-29 22:26:35 +00:00
// Fill out your copyright notice in the Description page of Project Settings.
#include "Weapon.h"
2022-04-29 23:19:55 +00:00
#include "Blaster/Character/BlasterCharacter.h"
2022-04-29 22:26:35 +00:00
#include "Components/SphereComponent.h"
2022-04-29 23:19:55 +00:00
#include "Components/WidgetComponent.h"
2022-04-29 22:26:35 +00:00
AWeapon::AWeapon()
{
PrimaryActorTick.bCanEverTick = false;
bReplicates = true;
2022-04-29 23:19:55 +00:00
2022-04-29 22:26:35 +00:00
WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMesh"));
2022-04-29 23:19:55 +00:00
WeaponMesh->SetupAttachment(WeaponMesh); // WeaponMesh instead?
SetRootComponent(WeaponMesh);
2022-04-29 22:26:35 +00:00
WeaponMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);
WeaponMesh->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Ignore);
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
AreaSphere = CreateDefaultSubobject<USphereComponent>(TEXT("AreaSphere"));
AreaSphere->SetupAttachment(RootComponent);
AreaSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
AreaSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision);
2022-04-29 23:19:55 +00:00
PickupWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("PickupWidget"));
PickupWidget->SetupAttachment(RootComponent);
2022-04-29 22:26:35 +00:00
}
void AWeapon::BeginPlay()
{
Super::BeginPlay();
if (HasAuthority())
{
AreaSphere->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
AreaSphere->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Overlap);
2022-04-29 23:19:55 +00:00
AreaSphere->OnComponentBeginOverlap.AddDynamic(this, &AWeapon::OnSphereOverlap);
2022-04-29 22:26:35 +00:00
}
2022-04-29 23:19:55 +00:00
if (PickupWidget)
{
PickupWidget->SetVisibility(false);
}
}
2022-04-29 22:26:35 +00:00
2022-04-29 23:19:55 +00:00
void AWeapon::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult)
{
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(OtherActor);
if (BlasterCharacter && PickupWidget)
{
PickupWidget->SetVisibility(true);
}
}