104 - Disable Movement when Eliminated

This commit is contained in:
Bert 2022-05-08 19:31:58 +02:00
parent 018013cb5d
commit c837a3f86d
5 changed files with 61 additions and 9 deletions

View File

@ -114,6 +114,10 @@ void ABlasterCharacter::PlayEliminatedMontage()
void ABlasterCharacter::Eliminated()
{
if (Combat && Combat->EquippedWeapon)
{
Combat->EquippedWeapon->Dropped();
}
MulticastEliminated();
GetWorldTimerManager().SetTimer(EliminationTimer, this, &ABlasterCharacter::EliminationTimerFinished, EliminationDelay);
}
@ -123,6 +127,7 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
bEliminated = true;
PlayEliminatedMontage();
// Start dissolve effect
if (DissolveMaterialInstance)
{
DynamicDissolveMaterialInstance = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
@ -131,6 +136,18 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Glow"), 200.f);
}
StartDissolve();
// Disable character movement
GetCharacterMovement()->DisableMovement();
GetCharacterMovement()->StopMovementImmediately();
if (BlasterPlayerController)
{
DisableInput(BlasterPlayerController);
}
// Disable collision
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
GetMesh()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
void ABlasterCharacter::EliminationTimerFinished()

View File

@ -164,15 +164,6 @@ void UCombatComponent::ServerSetAiming_Implementation(bool bIsAiming)
}
}
void UCombatComponent::OnRep_EquippedWeapon()
{
if (EquippedWeapon && Character)
{
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
Character->bUseControllerRotationYaw = true;
}
}
void UCombatComponent::Fire()
{
if (bCanFire)
@ -295,3 +286,18 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
Character->bUseControllerRotationYaw = true;
}
void UCombatComponent::OnRep_EquippedWeapon()
{
if (EquippedWeapon && Character)
{
EquippedWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
const USkeletalMeshSocket* HandSocket = Character->GetMesh()->GetSocketByName(FName("RightHandSocket"));
if (HandSocket)
{
HandSocket->AttachActor(EquippedWeapon, Character->GetMesh());
}
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
Character->bUseControllerRotationYaw = true;
}
}

View File

@ -89,6 +89,18 @@ void AWeapon::SetWeaponState(EWeaponState State)
case EWeaponState::EWS_Equipped:
ShowPickupWidget(false);
GetAreaSphere()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
WeaponMesh->SetSimulatePhysics(false);
WeaponMesh->SetEnableGravity(false);
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
break;
case EWeaponState::EWS_Dropped:
if (HasAuthority())
{
GetAreaSphere()->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
}
WeaponMesh->SetSimulatePhysics(true);
WeaponMesh->SetEnableGravity(true);
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
break;
}
}
@ -99,6 +111,14 @@ void AWeapon::OnRep_WeaponState()
{
case EWeaponState::EWS_Equipped:
ShowPickupWidget(false);
WeaponMesh->SetSimulatePhysics(false);
WeaponMesh->SetEnableGravity(false);
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
break;
case EWeaponState::EWS_Dropped:
WeaponMesh->SetSimulatePhysics(true);
WeaponMesh->SetEnableGravity(true);
WeaponMesh->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
break;
}
}
@ -136,3 +156,11 @@ void AWeapon::Fire(const FVector& HitTarget)
}
}
}
void AWeapon::Dropped()
{
SetWeaponState(EWeaponState::EWS_Dropped);
const FDetachmentTransformRules DetachRules(EDetachmentRule::KeepWorld, true);
WeaponMesh->DetachFromComponent(DetachRules);
SetOwner(nullptr);
}

View File

@ -26,6 +26,7 @@ public:
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
void ShowPickupWidget(bool bShowWidget);
virtual void Fire(const FVector& HitTarget);
void Dropped();
// Textures for the weapon crosshairs