第一次提交
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
|
||||
|
||||
|
||||
#include "Mover/Zipline/GMS_ZiplineModeTransition.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "DefaultMovementSet/CharacterMoverComponent.h"
|
||||
#include "Kismet/KismetSystemLibrary.h"
|
||||
#include "Mover/GMS_MoverStructLibrary.h"
|
||||
#include "Mover/Zipline/GMS_ZiplineInterface.h"
|
||||
|
||||
#include UE_INLINE_GENERATED_CPP_BY_NAME(GMS_ZiplineModeTransition)
|
||||
|
||||
// UGMS_ZiplineStartTransition //////////////////////////////
|
||||
|
||||
UGMS_ZiplineStartTransition::UGMS_ZiplineStartTransition(const FObjectInitializer& ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
{
|
||||
}
|
||||
|
||||
#if ENGINE_MINOR_VERSION >=6
|
||||
FTransitionEvalResult UGMS_ZiplineStartTransition::Evaluate_Implementation(const FSimulationTickParams& Params) const
|
||||
#else
|
||||
FTransitionEvalResult UGMS_ZiplineStartTransition::OnEvaluate(const FSimulationTickParams& Params) const
|
||||
#endif
|
||||
{
|
||||
FTransitionEvalResult EvalResult = FTransitionEvalResult::NoTransition;
|
||||
|
||||
UCharacterMoverComponent* MoverComp = Cast<UCharacterMoverComponent>(Params.MovingComps.MoverComponent.Get());
|
||||
|
||||
const FMoverSyncState& SyncState = Params.StartState.SyncState;
|
||||
|
||||
if (MoverComp && MoverComp->IsAirborne() && SyncState.MovementMode != ZipliningModeName)
|
||||
{
|
||||
if (const FGMS_MoverTagInputs* AbilityInputs = Params.StartState.InputCmd.InputCollection.FindDataByType<FGMS_MoverTagInputs>())
|
||||
{
|
||||
if (ZipliningInputTag.IsValid() && AbilityInputs->Tags.HasTagExact(ZipliningInputTag))
|
||||
{
|
||||
TArray<AActor*> OverlappingActors;
|
||||
MoverComp->GetOwner()->GetOverlappingActors(OUT OverlappingActors);
|
||||
|
||||
for (AActor* CandidateActor : OverlappingActors)
|
||||
{
|
||||
bool bIsZipline = UKismetSystemLibrary::DoesImplementInterface(CandidateActor, UGMS_ZiplineInterface::StaticClass());
|
||||
|
||||
if (bIsZipline)
|
||||
{
|
||||
EvalResult.NextMode = ZipliningModeName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return EvalResult;
|
||||
}
|
||||
|
||||
|
||||
// UGMS_ZiplineEndTransition //////////////////////////////
|
||||
|
||||
UGMS_ZiplineEndTransition::UGMS_ZiplineEndTransition(const FObjectInitializer& ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
#if ENGINE_MINOR_VERSION >=6
|
||||
FTransitionEvalResult UGMS_ZiplineEndTransition::Evaluate_Implementation(const FSimulationTickParams& Params) const
|
||||
#else
|
||||
FTransitionEvalResult UGMS_ZiplineEndTransition::OnEvaluate(const FSimulationTickParams& Params) const
|
||||
#endif
|
||||
{
|
||||
FTransitionEvalResult EvalResult = FTransitionEvalResult::NoTransition;
|
||||
|
||||
if (const FCharacterDefaultInputs* DefaultInputs = Params.StartState.InputCmd.InputCollection.FindDataByType<FCharacterDefaultInputs>())
|
||||
{
|
||||
if (DefaultInputs->bIsJumpJustPressed)
|
||||
{
|
||||
EvalResult.NextMode = AutoExitToMode;
|
||||
}
|
||||
}
|
||||
|
||||
return EvalResult;
|
||||
}
|
||||
|
||||
#if ENGINE_MINOR_VERSION >=6
|
||||
void UGMS_ZiplineEndTransition::Trigger_Implementation(const FSimulationTickParams& Params)
|
||||
#else
|
||||
void UGMS_ZiplineEndTransition::OnTrigger(const FSimulationTickParams& Params)
|
||||
#endif
|
||||
{
|
||||
//TODO: create a small jump, using current directionality
|
||||
}
|
||||
Reference in New Issue
Block a user