document.write("
bool FInputActionGameplayAbilityMappingData::IsValid() const { return GameplayAbilityClass && InputAction && TriggerType != ETriggerEvent::None; } bool FInputActionGameplayAbilityMappingData::operator==(const FInputActionGameplayAbilityMappingData& Other) const { return GameplayAbilityClass == Other.GameplayAbilityClass && InputAction == Other.InputAction && TriggerType == Other.TriggerType; } uint32 GetTypeHash(const FInputActionGameplayAbilityMappingData& Item) { return HashCombine( HashCombine(GetTypeHash(Item.GameplayAbilityClass), GetTypeHash(Item.InputAction)), GetTypeHash(Item.TriggerType) ); } FInputActionGameplayAbilityMappingData* UInputActionGameplayAbilityMappings::GetMappingDataByGameplayAbilityClass( const TSubclassOf<UGameplayAbility>& TargetGameplayAbilityClass ) const { auto MatchByClass = [&TargetGameplayAbilityClass](const FInputActionGameplayAbilityMappingData& MappingData) { return TargetGameplayAbilityClass.Get() == MappingData.GameplayAbilityClass.Get(); }; return Mappings.Array().FindByPredicate(MatchByClass); } void UInputActionGameplayAbilityMappings::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { Super::PostEditChangeProperty(PropertyChangedEvent); const FProperty* Property = PropertyChangedEvent.Property; if (Property == nullptr || Property->GetFName() != GET_MEMBER_NAME_CHECKED(UInputActionGameplayAbilityMappings, Mappings) || Mappings.IsEmpty()) { return; } TArray<FInputActionGameplayAbilityMappingData> InputAbilitiesArray = Mappings.Array(); Mappings.Reset(); for (int32 Index = 0; Index < InputAbilitiesArray.Num(); ++Index) { FInputActionGameplayAbilityMappingData& Info = InputAbilitiesArray[Index]; Info.InputID = Index; Mappings.Add(Info); } }