回退至简易刀光实现
刀光扭曲视觉表现不佳,笔直的刀光可能视觉感受更好,先不让材质扭曲,后续如果还需要实现扭曲效果,可以在这个版本的基础上继续研究
This commit is contained in:
		| @ -4,6 +4,8 @@ | ||||
| #include "Core/PW_UserWidget.h" | ||||
| #include "Core/UI/PW_UIHud.h" | ||||
| #include "slua.h" | ||||
| #include "EnhancedInput/Public/EnhancedInputSubsystems.h" | ||||
| #include "EnhancedInput/Public/EnhancedInputComponent.h" | ||||
|  | ||||
| UPW_SimpleWidget::UPW_SimpleWidget():bVisible(true){ | ||||
| 	bVisible = true; | ||||
| @ -36,7 +38,6 @@ FLuaWidgetEventHandle UPW_SimpleWidget::BP_BindLuaEvent(const FName& EventName, | ||||
| 	TMap<int32, slua::LuaVar>& FunctionPool = LuaFuncMappings.FindOrAdd(EventName); | ||||
| 	HandleIndex += 1; | ||||
| 	FunctionPool.Add(HandleIndex, InLuaFunction.value); | ||||
| 	//FunctionPool[HandleIndex] = InLuaFunction.value; | ||||
| 	Handle.EventName = EventName; | ||||
| 	Handle.HandleIndex = HandleIndex; | ||||
| 	return Handle; | ||||
| @ -65,29 +66,22 @@ void UPW_SimpleWidget::BP_EmitLuaEvent(const FName& EventName, const FLuaBPVar& | ||||
| 	} | ||||
| } | ||||
|  | ||||
| FReply UPW_SimpleWidget::NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent){ | ||||
| 	slua::LuaVar SelfTable = GetSelfTable(); | ||||
| 	if (SelfTable.isTable()) { | ||||
| 		slua::LuaVar LuaCallback = SelfTable.getFromTable<slua::LuaVar, FString>(TEXT("LuaMouseButtonDown")); | ||||
| 		if (LuaCallback.isFunction()) { | ||||
| 			LuaCallback.call(); | ||||
| 		} | ||||
| 	} | ||||
| 	return FReply::Unhandled(); | ||||
| 	//return Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent); | ||||
| void UPW_SimpleWidget::BP_BindLuaEnhancedInput(UInputAction* Action, FLuaBPVar Callback) { | ||||
| 	UEnhancedInputComponent* EnhancedInput; | ||||
| 	if (!Action) return; | ||||
|  | ||||
| 	EnhancedInput = CastChecked<UEnhancedInputComponent>(GetOwningPlayer()->InputComponent); | ||||
| 	if (!EnhancedInput) return; | ||||
|  | ||||
| 	EnhancedInput->BindActionInstanceLambda(Action, ETriggerEvent::Triggered, [Callback](const FInputActionInstance& ActionInstance) { | ||||
| 		slua::LuaVar LuaCallback = Callback.value; | ||||
| 		if (!LuaCallback.isFunction()) return; | ||||
| 		LuaCallback.call(); | ||||
| 	}); | ||||
| } | ||||
|  | ||||
| FReply UPW_SimpleWidget::NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent){ | ||||
| 	slua::LuaVar SelfTable = GetSelfTable(); | ||||
| 	if (SelfTable.isTable()) { | ||||
| 		slua::LuaVar LuaCallback = SelfTable.getFromTable<slua::LuaVar, FString>(TEXT("LuaMouseButtonUp")); | ||||
| 		if (LuaCallback.isFunction()) { | ||||
| 			LuaCallback.call(); | ||||
| 		} | ||||
| 	} | ||||
| 	return FReply::Unhandled(); | ||||
| 	//return Super::NativeOnMouseButtonUp(InGeometry, InMouseEvent); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void UPW_UserWidget::BP_Close(){ | ||||
| 	APW_UIHud* Hud = Cast<APW_UIHud>(GetPlayerContext().GetHUD()); | ||||
| @ -105,12 +99,33 @@ void UPW_UserWidget::FrameWorkSetVisible(bool InVisible){ | ||||
| 	_RefreshVisible(); | ||||
| } | ||||
|  | ||||
| void UPW_UserWidget::_UpdateInputState(bool bNeedRegister) { | ||||
| 	APlayerController* PC; | ||||
| 	UEnhancedInputLocalPlayerSubsystem* Subsystem; | ||||
|  | ||||
| 	if (!InputMappingContext) return; | ||||
|  | ||||
| 	PC = GetOwningPlayer(); | ||||
| 	if (!PC) return; | ||||
|  | ||||
| 	Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()); | ||||
| 	if (!Subsystem) return; | ||||
|  | ||||
| 	if (bNeedRegister) { | ||||
| 		Subsystem->AddMappingContext(InputMappingContext, 0); | ||||
| 	} | ||||
| 	else { | ||||
| 		Subsystem->RemoveMappingContext(InputMappingContext); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void UPW_UserWidget::_RefreshVisible(){ | ||||
| 	bool FinalVisible = bFrameWorkVisible && bVisible; | ||||
| 	if (FinalVisible) { | ||||
| 	bool bFinalVisible = bFrameWorkVisible && bVisible; | ||||
| 	if (bFinalVisible) { | ||||
| 		SetVisibility(ESlateVisibility::SelfHitTestInvisible); | ||||
| 	} | ||||
| 	else { | ||||
| 		SetVisibility(ESlateVisibility::Collapsed); | ||||
| 	} | ||||
| 	_UpdateInputState(bFinalVisible); | ||||
| } | ||||
|  | ||||
| @ -65,6 +65,7 @@ void UPW_UILayer::PopWidget(const UPW_UserWidget* WidgetInst){ | ||||
| 		} | ||||
| 	} | ||||
| 	for (i = 0; i < NeedRemoveWidgets.Num(); ++i) { | ||||
| 		NeedRemoveWidgets[i]->FrameWorkSetVisible(false); | ||||
| 		NeedRemoveWidgets[i]->RemoveFromParent(); | ||||
| 	} | ||||
| 	if (NeedShowWidget) { | ||||
|  | ||||
| @ -51,10 +51,8 @@ public: | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	void BP_EmitLuaEvent(const FName& EventName, const FLuaBPVar& InLuaArgs); | ||||
|  | ||||
| public: | ||||
| 	virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)override; | ||||
|  | ||||
| 	virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)override; | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	void BP_BindLuaEnhancedInput(class UInputAction* Action, FLuaBPVar Callback); | ||||
|  | ||||
|  | ||||
| public: | ||||
| @ -73,8 +71,7 @@ protected: // lua相关 | ||||
|  *  | ||||
|  */ | ||||
| UCLASS() | ||||
| class BUSYRABBIT_API UPW_UserWidget : public UPW_SimpleWidget | ||||
| { | ||||
| class BUSYRABBIT_API UPW_UserWidget : public UPW_SimpleWidget{ | ||||
| 	GENERATED_BODY() | ||||
| public: | ||||
| 	UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, DisplayName="是否全局唯一") | ||||
| @ -84,6 +81,9 @@ public: | ||||
| 	UPROPERTY(BlueprintReadOnly, EditDefaultsOnly) | ||||
| 	EWidgetLayoutType LayoutType; | ||||
|  | ||||
| 	UPROPERTY(EditDefaultsOnly, Category = "Input") | ||||
| 	TObjectPtr<class UInputMappingContext> InputMappingContext; | ||||
|  | ||||
| public: | ||||
| 	UFUNCTION(BlueprintCallable) | ||||
| 	void BP_Close(); | ||||
| @ -95,6 +95,8 @@ public: | ||||
| 	void FrameWorkSetVisible(bool InVisible); | ||||
|  | ||||
| protected: | ||||
| 	void _UpdateInputState(bool bNeedRegister); | ||||
|  | ||||
| 	void _RefreshVisible(); | ||||
|  | ||||
| protected: | ||||
|  | ||||
		Reference in New Issue
	
	Block a user