diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 6e1fcf4..d05e43c 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -19,6 +19,7 @@ r.GenerateMeshDistanceFields=True r.DynamicGlobalIlluminationMethod=1 r.ReflectionMethod=1 r.Shadow.Virtual.Enable=1 +r.CustomDepth=3 [/Script/WorldPartitionEditor.WorldPartitionEditorSettings] bEnableWorldPartition=False @@ -139,3 +140,7 @@ bMirrorAchievementsToEOS=False bUseEOSSessions=False bMirrorPresenceToEAS=False +[/Script/Engine.PhysicsSettings] +bSubstepping=True +MaxSubstepDeltaTime=0.008000 + diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini index 331730b..4f7902d 100644 --- a/Config/DefaultInput.ini +++ b/Config/DefaultInput.ini @@ -69,6 +69,7 @@ bUseMouseForTouch=False bEnableMouseSmoothing=True bEnableFOVScaling=True bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True bAlwaysShowTouchInterface=False bShowConsoleOnFourFingerTap=True bEnableGestureRecognizer=False @@ -83,6 +84,7 @@ DoubleClickTime=0.200000 +ActionMappings=(ActionName="Aim",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=RightMouseButton) +ActionMappings=(ActionName="Fire",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftMouseButton) +ActionMappings=(ActionName="Reload",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=R) ++ActionMappings=(ActionName="ThrowGrenade",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=G) +AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=W) +AxisMappings=(AxisName="MoveForward",Scale=-1.000000,Key=S) +AxisMappings=(AxisName="MoveRight",Scale=1.000000,Key=D) diff --git a/Content/Assets/Animations/GrenadeToss.uasset b/Content/Assets/Animations/GrenadeToss.uasset new file mode 100644 index 0000000..8781637 Binary files /dev/null and b/Content/Assets/Animations/GrenadeToss.uasset differ diff --git a/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter.uasset b/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter.uasset index 1799127..5e77a65 100644 Binary files a/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter.uasset and b/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter.uasset differ diff --git a/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter_Skeleton.uasset b/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter_Skeleton.uasset index 5fb67a5..34440af 100644 Binary files a/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter_Skeleton.uasset and b/Content/Assets/LearningKit_Games/Assets/Characters/Character/Mesh/SK_EpicCharacter_Skeleton.uasset differ diff --git a/Content/Blueprints/Character/Animation/BlasterAnimBP.uasset b/Content/Blueprints/Character/Animation/BlasterAnimBP.uasset index b2e4f54..4e2d3db 100644 Binary files a/Content/Blueprints/Character/Animation/BlasterAnimBP.uasset and b/Content/Blueprints/Character/Animation/BlasterAnimBP.uasset differ diff --git a/Content/Blueprints/Character/Animation/ThrowGrenade.uasset b/Content/Blueprints/Character/Animation/ThrowGrenade.uasset new file mode 100644 index 0000000..f43e443 Binary files /dev/null and b/Content/Blueprints/Character/Animation/ThrowGrenade.uasset differ diff --git a/Content/Blueprints/Character/BP_BlasterCharacter.uasset b/Content/Blueprints/Character/BP_BlasterCharacter.uasset index 991dcba..ce6454e 100644 Binary files a/Content/Blueprints/Character/BP_BlasterCharacter.uasset and b/Content/Blueprints/Character/BP_BlasterCharacter.uasset differ diff --git a/Source/Blaster/Character/BlasterAnimInstance.cpp b/Source/Blaster/Character/BlasterAnimInstance.cpp index fd9afa0..1856f8c 100644 --- a/Source/Blaster/Character/BlasterAnimInstance.cpp +++ b/Source/Blaster/Character/BlasterAnimInstance.cpp @@ -73,7 +73,7 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime) } } - bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading; - bUseAimOffsets = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading && !BlasterCharacter->GetDisableGameplay(); - bTransformRightHand = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading && !BlasterCharacter->GetDisableGameplay(); + bUseFABRIK = BlasterCharacter->GetCombatState() == ECombatState::ECS_Unoccupied; + bUseAimOffsets = BlasterCharacter->GetCombatState() == ECombatState::ECS_Unoccupied && !BlasterCharacter->GetDisableGameplay(); + bTransformRightHand = BlasterCharacter->GetCombatState() == ECombatState::ECS_Unoccupied && !BlasterCharacter->GetDisableGameplay(); } diff --git a/Source/Blaster/Character/BlasterCharacter.cpp b/Source/Blaster/Character/BlasterCharacter.cpp index 6364d47..97416e1 100644 --- a/Source/Blaster/Character/BlasterCharacter.cpp +++ b/Source/Blaster/Character/BlasterCharacter.cpp @@ -231,6 +231,7 @@ void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCo PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &ABlasterCharacter::FireButtonPressed); PlayerInputComponent->BindAction("Fire", IE_Released, this, &ABlasterCharacter::FireButtonReleased); PlayerInputComponent->BindAction("Reload", IE_Pressed, this, &ABlasterCharacter::ReloadButtonPressed); + PlayerInputComponent->BindAction("ThrowGrenade", IE_Pressed, this, &ABlasterCharacter::GrenadeButtonPressed); } void ABlasterCharacter::PostInitializeComponents() @@ -307,6 +308,15 @@ void ABlasterCharacter::PlayEliminatedMontage() } } +void ABlasterCharacter::PlayThrowGrenadeMontage() +{ + UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); + if (AnimInstance && ThrowGrenadeMontage) + { + AnimInstance->Montage_Play(ThrowGrenadeMontage); + } +} + void ABlasterCharacter::PlayHitReactMontage() { if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return; @@ -434,6 +444,14 @@ void ABlasterCharacter::AimButtonReleased() } } +void ABlasterCharacter::GrenadeButtonPressed() +{ + if (Combat) + { + Combat->ThrowGrenade(); + } +} + float ABlasterCharacter::CalculateSpeed() { FVector Velocity = GetVelocity(); diff --git a/Source/Blaster/Character/BlasterCharacter.h b/Source/Blaster/Character/BlasterCharacter.h index 05ddd5a..a922ba1 100644 --- a/Source/Blaster/Character/BlasterCharacter.h +++ b/Source/Blaster/Character/BlasterCharacter.h @@ -28,6 +28,7 @@ public: void PlayFireMontage(bool bAiming); void PlayReloadMontage(); void PlayEliminatedMontage(); + void PlayThrowGrenadeMontage(); void Eliminated(); @@ -52,6 +53,7 @@ protected: void CrouchButtonPressed(); void AimButtonPressed(); void AimButtonReleased(); + void GrenadeButtonPressed(); void CalculateAO_Pitch(); void AimOffset(float DeltaTime); void SimProxiesTurn(); @@ -115,6 +117,9 @@ private: UPROPERTY(EditAnywhere, Category = Combat) class UAnimMontage* EliminatedMontage; + UPROPERTY(EditAnywhere, Category = Combat) + class UAnimMontage* ThrowGrenadeMontage; + void HideCameraIfCharacterClose(); UPROPERTY(EditAnywhere) diff --git a/Source/Blaster/Components/CombatComponent.cpp b/Source/Blaster/Components/CombatComponent.cpp index cdf60b1..69efc54 100644 --- a/Source/Blaster/Components/CombatComponent.cpp +++ b/Source/Blaster/Components/CombatComponent.cpp @@ -146,6 +146,7 @@ void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& T void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip) { if (Character == nullptr || WeaponToEquip == nullptr) return; + if (CombatState != ECombatState::ECS_Unoccupied) return; if (EquippedWeapon) { EquippedWeapon->Dropped(); @@ -191,7 +192,7 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip) void UCombatComponent::Reload() { - if (CarriedAmmo > 0 && CombatState != ECombatState::ECS_Reloading) + if (CarriedAmmo > 0 && CombatState == ECombatState::ECS_Unoccupied) { ServerReload(); } @@ -271,6 +272,11 @@ void UCombatComponent::JumpToShotgunEnd() } } +void UCombatComponent::ThrowGrenadeFinished() +{ + CombatState = ECombatState::ECS_Unoccupied; +} + void UCombatComponent::OnRep_CombatState() { switch (CombatState) @@ -284,6 +290,12 @@ void UCombatComponent::OnRep_CombatState() Fire(); } break; + case ECombatState::ECS_ThrowingGrenade: + if (Character && !Character->IsLocallyControlled()) + { + Character->PlayThrowGrenadeMontage(); + } + break; } } @@ -306,6 +318,33 @@ int32 UCombatComponent::AmountToReload() return 0; } +void UCombatComponent::ThrowGrenade() +{ + if (CombatState != ECombatState::ECS_Unoccupied) return; + + CombatState = ECombatState::ECS_ThrowingGrenade; + + if (Character) + { + Character->PlayThrowGrenadeMontage(); + } + + if (Character && !Character->HasAuthority()) + { + ServerThrowGrenade(); + } +} + +void UCombatComponent::ServerThrowGrenade_Implementation() +{ + CombatState = ECombatState::ECS_ThrowingGrenade; + + if (Character) + { + Character->PlayThrowGrenadeMontage(); + } +} + void UCombatComponent::OnRep_EquippedWeapon() { if (EquippedWeapon && Character) diff --git a/Source/Blaster/Components/CombatComponent.h b/Source/Blaster/Components/CombatComponent.h index 5ba9639..937575a 100644 --- a/Source/Blaster/Components/CombatComponent.h +++ b/Source/Blaster/Components/CombatComponent.h @@ -32,6 +32,9 @@ public: void ShotgunShellReload(); void JumpToShotgunEnd(); + + UFUNCTION(BlueprintCallable) + void ThrowGrenadeFinished(); protected: virtual void BeginPlay() override; @@ -59,6 +62,11 @@ protected: void HandleReload(); int32 AmountToReload(); + + void ThrowGrenade(); + + UFUNCTION(Server, Reliable) + void ServerThrowGrenade(); private: UPROPERTY() class ABlasterCharacter* Character; diff --git a/Source/Blaster/Types/CombatState.h b/Source/Blaster/Types/CombatState.h index 0a82ac1..5c5522a 100644 --- a/Source/Blaster/Types/CombatState.h +++ b/Source/Blaster/Types/CombatState.h @@ -5,6 +5,7 @@ enum class ECombatState : uint8 { ECS_Unoccupied UMETA(DisplayName = "Unoccupied"), ECS_Reloading UMETA(DisplayName = "Reloading"), + ECS_ThrowingGrenade UMETA(DisplayName = "Throwing Grenade"), ECS_MAX UMETA(DisplayName = "DefaultMAX") };