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() void ABlasterCharacter::Eliminated()
{ {
if (Combat && Combat->EquippedWeapon)
{
Combat->EquippedWeapon->Dropped();
}
MulticastEliminated(); MulticastEliminated();
GetWorldTimerManager().SetTimer(EliminationTimer, this, &ABlasterCharacter::EliminationTimerFinished, EliminationDelay); GetWorldTimerManager().SetTimer(EliminationTimer, this, &ABlasterCharacter::EliminationTimerFinished, EliminationDelay);
} }
@ -123,6 +127,7 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
bEliminated = true; bEliminated = true;
PlayEliminatedMontage(); PlayEliminatedMontage();
// Start dissolve effect
if (DissolveMaterialInstance) if (DissolveMaterialInstance)
{ {
DynamicDissolveMaterialInstance = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this); DynamicDissolveMaterialInstance = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
@ -131,6 +136,18 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Glow"), 200.f); DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Glow"), 200.f);
} }
StartDissolve(); 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() 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() void UCombatComponent::Fire()
{ {
if (bCanFire) if (bCanFire)
@ -295,3 +286,18 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
Character->GetCharacterMovement()->bOrientRotationToMovement = false; Character->GetCharacterMovement()->bOrientRotationToMovement = false;
Character->bUseControllerRotationYaw = true; 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: case EWeaponState::EWS_Equipped:
ShowPickupWidget(false); ShowPickupWidget(false);
GetAreaSphere()->SetCollisionEnabled(ECollisionEnabled::NoCollision); 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; break;
} }
} }
@ -99,6 +111,14 @@ void AWeapon::OnRep_WeaponState()
{ {
case EWeaponState::EWS_Equipped: case EWeaponState::EWS_Equipped:
ShowPickupWidget(false); 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; 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; virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
void ShowPickupWidget(bool bShowWidget); void ShowPickupWidget(bool bShowWidget);
virtual void Fire(const FVector& HitTarget); virtual void Fire(const FVector& HitTarget);
void Dropped();
// Textures for the weapon crosshairs // Textures for the weapon crosshairs