第一次提交

This commit is contained in:
不明不惑
2026-03-03 01:23:02 +08:00
commit 3e434877e8
1053 changed files with 102411 additions and 0 deletions

View File

@@ -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
}