diff --git a/Content/Core/Debug/DA_Debug_Input.uasset b/Content/Core/Debug/DA_Debug_Input.uasset index 3870c4c..cba74ec 100644 Binary files a/Content/Core/Debug/DA_Debug_Input.uasset and b/Content/Core/Debug/DA_Debug_Input.uasset differ diff --git a/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp index bcc7016..a04b59e 100644 --- a/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp +++ b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp @@ -288,7 +288,7 @@ void UCogEngineWindow_OutputLog::RenderContent() ImGui::EndChild(); } - if (ImGui::BeginPopupContextItem()) + if (ImGui::BeginPopupContextItem("OutputLog")) { if (ImGui::MenuItem("Clear")) { diff --git a/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Actions.cpp b/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Actions.cpp index 0c96baf..820d7d7 100644 --- a/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Actions.cpp +++ b/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Actions.cpp @@ -20,6 +20,12 @@ void UCogInputWindow_Actions::RenderHelp() ); } +//-------------------------------------------------------------------------------------------------------------------------- +void UCogInputWindow_Actions::ResetConfig() +{ + RepeatPeriod = 0.5f; +} + //-------------------------------------------------------------------------------------------------------------------------- UCogInputWindow_Actions::UCogInputWindow_Actions() { @@ -39,12 +45,6 @@ void UCogInputWindow_Actions::RenderContent() return; } - if (Asset->MappingContext == nullptr) - { - ImGui::Text("No MappingContext"); - return; - } - ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController(); if (LocalPlayer == nullptr) { @@ -80,14 +80,22 @@ void UCogInputWindow_Actions::RenderContent() if (Actions.Num() == 0) { - for (const FEnhancedActionKeyMapping& Mapping : Asset->MappingContext->GetMappings()) + for (TObjectPtr MappingContext : Asset->MappingContexts) { - if (Mapping.Action != nullptr && Actions.ContainsByPredicate([&Mapping](const FCogInjectActionInfo& ActionInfo) { return Mapping.Action == ActionInfo.Action; }) == false) + for (const FEnhancedActionKeyMapping& Mapping : MappingContext->GetMappings()) { - FCogInjectActionInfo& ActionInfo = Actions.AddDefaulted_GetRef(); - ActionInfo.Action = Mapping.Action; + if (Mapping.Action != nullptr && Actions.ContainsByPredicate([&Mapping](const FCogInjectActionInfo& ActionInfo) { return Mapping.Action == ActionInfo.Action; }) == false) + { + FCogInjectActionInfo& ActionInfo = Actions.AddDefaulted_GetRef(); + ActionInfo.Action = Mapping.Action; + } } } + + Actions.Sort([](const FCogInjectActionInfo& Lhs, const FCogInjectActionInfo& Rhs) + { + return GetNameSafe(Lhs.Action).Compare(GetNameSafe(Rhs.Action)) < 0; + }); } if (ImGui::BeginTable("Actions", 3, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Resizable | ImGuiTableFlags_NoBordersInBodyUntilResize)) diff --git a/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Gamepad.cpp b/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Gamepad.cpp index caa4e2e..4370ebc 100644 --- a/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Gamepad.cpp +++ b/Plugins/CogInput/Source/CogInput/Private/CogInputWindow_Gamepad.cpp @@ -62,7 +62,7 @@ void UCogInputWindow_Gamepad::InputContextMenu(const FKey& Key, FCogInjectAction if (ActionInfoButton != nullptr && ActionInfoButton->Action != nullptr && ActionInfoButton->Action->ValueType == EInputActionValueType::Axis1D) { - FCogWindowWidgets::SliderWithReset("X", &ActionInfo2D->X, -1.0f, 1.0f, 0.0f, "%0.2f"); + FCogWindowWidgets::SliderWithReset("X", &ActionInfoButton->X, -1.0f, 1.0f, 0.0f, "%0.2f"); } if (ActionInfo2D != nullptr) @@ -236,7 +236,11 @@ void UCogInputWindow_Gamepad::RenderContent() return; } - if (Asset != nullptr && Asset->MappingContext != nullptr) + if (Asset == nullptr) + { + ImGui::Text("No Input Asset"); + } + else { if (Actions.Num() == 0) { @@ -267,20 +271,20 @@ void UCogInputWindow_Gamepad::RenderContent() Actions.FindOrAdd(EKeys:: Gamepad_DPad_Right); Actions.FindOrAdd(EKeys:: Gamepad_DPad_Left); - for (const FEnhancedActionKeyMapping& Mapping : Asset->MappingContext->GetMappings()) + for (TObjectPtr MappingContext : Asset->MappingContexts) { - if (Mapping.Action != nullptr) + for (const FEnhancedActionKeyMapping& Mapping : MappingContext->GetMappings()) { - FCogInjectActionInfo& ActionInfo = Actions.FindOrAdd(Mapping.Key); - ActionInfo.Action = Mapping.Action; + if (Mapping.Action != nullptr) + { + FCogInjectActionInfo& ActionInfo = Actions.FindOrAdd(Mapping.Key); + ActionInfo.Action = Mapping.Action; + } } } } } - else - { - ImGui::Text("No Action Asset"); - } + const float AspectRatio = 0.55f; const float StickAmplitude = 0.04f; @@ -311,7 +315,7 @@ void UCogInputWindow_Gamepad::RenderContent() DrawList = ImGui::GetWindowDrawList(); ImGui::Dummy(bShowAsOverlay ? CanvasMax - CanvasMin : ContentSize); - if (ImGui::BeginPopupContextItem()) + if (ImGui::BeginPopupContextItem("Gamepad")) { if (ImGui::Button("Close", ImVec2(-1.0f, 0))) { diff --git a/Plugins/CogInput/Source/CogInput/Public/CogInputDataAsset.h b/Plugins/CogInput/Source/CogInput/Public/CogInputDataAsset.h index 6dc5f12..191ceb6 100644 --- a/Plugins/CogInput/Source/CogInput/Public/CogInputDataAsset.h +++ b/Plugins/CogInput/Source/CogInput/Public/CogInputDataAsset.h @@ -15,5 +15,5 @@ public: UCogInputDataAsset() {} UPROPERTY(EditAnywhere) - TObjectPtr MappingContext; + TArray> MappingContexts; }; diff --git a/Plugins/CogInput/Source/CogInput/Public/CogInputWindow_Actions.h b/Plugins/CogInput/Source/CogInput/Public/CogInputWindow_Actions.h index f947de4..151fc42 100644 --- a/Plugins/CogInput/Source/CogInput/Public/CogInputWindow_Actions.h +++ b/Plugins/CogInput/Source/CogInput/Public/CogInputWindow_Actions.h @@ -19,7 +19,9 @@ public: protected: - void RenderHelp(); + virtual void ResetConfig() override; + + virtual void RenderHelp() override; virtual void RenderContent() override; diff --git a/Source/CogSample/CogSampleCharacter.cpp b/Source/CogSample/CogSampleCharacter.cpp index 9ebe07b..2154b10 100644 --- a/Source/CogSample/CogSampleCharacter.cpp +++ b/Source/CogSample/CogSampleCharacter.cpp @@ -393,9 +393,26 @@ void ACogSampleCharacter::OnAbilityInputStarted(const FInputActionValue& Value, { return; } - + Spec->InputPressed = true; - AbilitySystem->TryActivateAbility(Handle); + + //----------------------------------------------------- + // Replicate button press if ability is already active + //----------------------------------------------------- + if (Spec->IsActive()) + { + const UGameplayAbility* AbilityToActivate = Spec->GetPrimaryInstance(); + if (AbilityToActivate->bReplicateInputDirectly && AbilitySystem->IsOwnerActorAuthoritative() == false) + { + AbilitySystem->ServerSetInputPressed(Spec->Handle); + } + AbilitySystem->AbilitySpecInputPressed(*Spec); + AbilitySystem->InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputPressed, Spec->Handle, Spec->ActivationInfo.GetActivationPredictionKey()); + } + else + { + AbilitySystem->TryActivateAbility(Handle); + } } //-------------------------------------------------------------------------------------------------------------------------- diff --git a/TODO.txt b/TODO.txt index b9a7a59..3e36b3d 100644 --- a/TODO.txt +++ b/TODO.txt @@ -9,10 +9,6 @@ - CogEngine: Stat main menu widget could have a tooltip on each stat with a control to change set the emulation (FPS, Ping, Packetloss) - CogEngine: Add screen settings (fullscreen, borderless, window and resolution) -- CogInput: Add multiple IMC on the input data asset. Maybe propose a current imc - -- CogAbilities: Apply tweaks on spawn - - CogSample: Add a custom window in sample (changing the character faction) - CogSample: Create more abilities