blaster/Source/Blaster/Character/BlasterAnimInstance.cpp

80 lines
3.3 KiB
C++
Raw Normal View History

2022-04-28 13:30:18 +00:00
// Fill out your copyright notice in the Description page of Project Settings.
#include "BlasterAnimInstance.h"
#include "BlasterCharacter.h"
2022-05-03 22:43:10 +00:00
#include "Blaster/Weapon/Weapon.h"
2022-04-28 13:30:18 +00:00
#include "GameFramework/CharacterMovementComponent.h"
2022-05-02 13:40:33 +00:00
#include "Kismet/KismetMathLibrary.h"
2022-04-28 13:30:18 +00:00
void UBlasterAnimInstance::NativeInitializeAnimation()
{
Super::NativeInitializeAnimation();
BlasterCharacter = Cast<ABlasterCharacter>(TryGetPawnOwner());
}
void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
if (BlasterCharacter == nullptr)
{
BlasterCharacter = Cast<ABlasterCharacter>(TryGetPawnOwner());
}
if (BlasterCharacter == nullptr) return;
FVector Velocity = BlasterCharacter->GetVelocity();
Velocity.Z = 0.f;
Speed = Velocity.Size();
bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling();
bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f;
2022-04-30 14:48:34 +00:00
bWeaponEquipped = BlasterCharacter->IsWeaponEquipped();
2022-05-03 22:43:10 +00:00
EquippedWeapon = BlasterCharacter->GetEquippedWeapon();
2022-04-30 15:10:07 +00:00
bIsCrouched = BlasterCharacter->bIsCrouched;
2022-04-30 15:38:03 +00:00
bAiming = BlasterCharacter->IsAiming();
2022-05-04 09:28:00 +00:00
TurningInPlace = BlasterCharacter->GetTurningInPlace();
2022-05-06 10:43:18 +00:00
bRotateRootBone = BlasterCharacter->ShouldRotateRootBone();
2022-05-07 17:10:32 +00:00
bEliminated = BlasterCharacter->IsEliminated();
2022-05-02 13:40:33 +00:00
// Offset Yaw for Strafing
FRotator AimRotation = BlasterCharacter->GetBaseAimRotation();
FRotator MovementRotation = UKismetMathLibrary::MakeRotFromX(BlasterCharacter->GetVelocity());
FRotator DeltaRot = UKismetMathLibrary::NormalizedDeltaRotator(MovementRotation, AimRotation);
DeltaRotation = FMath::RInterpTo(DeltaRotation, DeltaRot, DeltaSeconds, 6.f);
YawOffset = DeltaRotation.Yaw;
CharacterRotationLastFrame = CharacterRotation;
CharacterRotation = BlasterCharacter->GetActorRotation();
const FRotator Delta = UKismetMathLibrary::NormalizedDeltaRotator(CharacterRotation, CharacterRotationLastFrame);
const float Target = Delta.Yaw / DeltaSeconds;
const float Interp = FMath::FInterpTo(Lean, Target, DeltaSeconds, 6.f);
Lean = FMath::Clamp(Interp, -90.f, 90.f);
2022-05-03 21:14:04 +00:00
2022-05-03 22:43:10 +00:00
// Aim offset
2022-05-03 21:14:04 +00:00
AO_Yaw = BlasterCharacter->GetAO_Yaw();
AO_Pitch = BlasterCharacter->GetAO_Pitch();
2022-05-03 22:43:10 +00:00
if (bWeaponEquipped && EquippedWeapon && EquippedWeapon->GetWeaponMesh() && BlasterCharacter->GetMesh())
{
2022-05-05 18:14:17 +00:00
LeftHandTransform = EquippedWeapon->GetWeaponMesh()->GetSocketTransform(FName("LeftHandSocket"), RTS_World);
2022-05-03 22:43:10 +00:00
FVector OutPosition;
FRotator OutRotation;
BlasterCharacter->GetMesh()->TransformToBoneSpace(FName("hand_r"), LeftHandTransform.GetLocation(), FRotator::ZeroRotator, OutPosition, OutRotation);
LeftHandTransform.SetLocation(OutPosition);
LeftHandTransform.SetRotation(FQuat(OutRotation));
2022-05-05 18:14:17 +00:00
if (BlasterCharacter->IsLocallyControlled())
{
bLocallyControlled = true;
const FTransform RightHandTransform = EquippedWeapon->GetWeaponMesh()->GetSocketTransform(FName("Hand_R"), RTS_World);
2022-05-05 20:46:35 +00:00
FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(RightHandTransform.GetLocation(), RightHandTransform.GetLocation() + (RightHandTransform.GetLocation() - BlasterCharacter->GetHitTarget()));
RightHandRotation = FMath::RInterpTo(RightHandRotation, LookAtRotation, DeltaSeconds, 30.f);
2022-05-05 18:14:17 +00:00
}
2022-05-03 22:43:10 +00:00
}
2022-05-09 21:16:55 +00:00
bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
2022-04-28 13:30:18 +00:00
}