fix: input mapping
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								Content/UI/WBP_SkillNode.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Content/UI/WBP_SkillNode.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Content/UI/WBP_SkillTree.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Content/UI/WBP_SkillTree.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -490,6 +490,7 @@ void USkillTreeComponent::UpdateSkillStates() | ||||
| { | ||||
| 	for (auto& Pair : AllSkills) | ||||
| 	{ | ||||
| 		const FName& SkillID = Pair.Key; | ||||
| 		FSkillNodeRuntime& SkillNode = Pair.Value; | ||||
|  | ||||
| 		// Only update Locked and Available states based on prerequisites | ||||
| @@ -503,14 +504,18 @@ void USkillTreeComponent::UpdateSkillStates() | ||||
|  | ||||
| 		case ESkillNodeState::Locked: | ||||
| 		case ESkillNodeState::Available: | ||||
| 			// Update state based on prerequisites | ||||
| 			if (ArePrerequisitesMet(SkillNode.NodeData)) | ||||
| 			{ | ||||
| 				SkillNode.CurrentState = ESkillNodeState::Available; | ||||
| 				// Calculate new state based on prerequisites | ||||
| 				ESkillNodeState NewState = ArePrerequisitesMet(SkillNode.NodeData) | ||||
| 					? ESkillNodeState::Available | ||||
| 					: ESkillNodeState::Locked; | ||||
|  | ||||
| 				// Only broadcast if state actually changed | ||||
| 				if (SkillNode.CurrentState != NewState) | ||||
| 				{ | ||||
| 					SkillNode.CurrentState = NewState; | ||||
| 					OnSkillStateChanged.Broadcast(SkillID); | ||||
| 				} | ||||
| 			else | ||||
| 			{ | ||||
| 				SkillNode.CurrentState = ESkillNodeState::Locked; | ||||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
|   | ||||
| @@ -196,19 +196,21 @@ void AUTAD_UIPlayerController::ShowSkillTree() | ||||
| 	{ | ||||
| 		SkillTreeWidget->AddToViewport(1); | ||||
|  | ||||
| 		// Switch to UI-only input mode to block gameplay actions (like click-to-move) | ||||
| 		FInputModeUIOnly InputMode; | ||||
| 		InputMode.SetWidgetToFocus(SkillTreeWidget->TakeWidget()); | ||||
| 		// Use GameAndUI mode - allows Enhanced Input to work while UI is open | ||||
| 		// Mouse clicks will be consumed by UI widgets automatically | ||||
| 		FInputModeGameAndUI InputMode; | ||||
| 		InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); | ||||
| 		InputMode.SetHideCursorDuringCapture(false); | ||||
| 		SetInputMode(InputMode); | ||||
| 		bShowMouseCursor = true; | ||||
|  | ||||
| 		// Switch input mapping context from gameplay to UI | ||||
| 		// This allows UI-specific controls (like Tab to close) to work | ||||
| 		if (UEnhancedInputLocalPlayerSubsystem* Subsystem = | ||||
| 				ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>( | ||||
| 					GetLocalPlayer())) | ||||
| 		{ | ||||
| 			// Remove gameplay context | ||||
| 			// Remove gameplay context to prevent movement actions | ||||
| 			if (DefaultMappingContext) | ||||
| 			{ | ||||
| 				Subsystem->RemoveMappingContext(DefaultMappingContext); | ||||
| @@ -227,9 +229,11 @@ void AUTAD_UIPlayerController::HideSkillTree() | ||||
| 	if (SkillTreeWidget && SkillTreeWidget->IsInViewport()) | ||||
| 	{ | ||||
| 		// Clear any unconfirmed skill selections | ||||
| 		if (AUTAD_UICharacter* Character = Cast<AUTAD_UICharacter>(GetPawn())) | ||||
| 		if (const AUTAD_UICharacter* PlayerCharacter = | ||||
| 				Cast<AUTAD_UICharacter>(GetPawn())) | ||||
| 		{ | ||||
| 			if (USkillTreeComponent* SkillTreeComp = Character->GetSkillTreeComponent()) | ||||
| 			if (USkillTreeComponent* SkillTreeComp = | ||||
| 					PlayerCharacter->GetSkillTreeComponent()) | ||||
| 			{ | ||||
| 				SkillTreeComp->ClearSelection(); | ||||
| 			} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user