public feed: nuget.org
Note:
main branch may be unstable since it is in development, please switch to tags, for example: editor/4.25.0
How to Run Demo Project before purchase:(Only for Win64 editor build, no source code)
- Double click install_game_package_from_nuget_org.cmd, and check if UE4Editor-*.dll are installed to Binaries\Win64 and Plugins\HorizonFrameworkPlugin\Binaries\Win64\
- Double click HorizonFrameworkDemo.uproject
HorizonFrameworkPlugin
5.4.0
http://dorgon.horizon-studio.net
dorgonman@hotmail.com
The goal of this plugin is to provide a general game framework that can manage WidgetBlueprints and related game logic with more organized way.
Supported UnrealEngine version: 4.18-5.3
Put HorizonFrameworkPlugin into YOUR_PROJECT/Plugins folder, and then add module to your project YOUR_PROJECT.Build.cs: PublicDependencyModuleNames.AddRange(new string[] { "HorizonFramework" });
- Create classes that inherited from AHorizonScene
- Design your own Widget Blueprint.
- Assign Widget Blueprint to HorizonScene's WidgetClass
- Use functions in AHorizonSceneManager, UHorizonSceneManagerLibrary or UHorizonSceneManagerProxy to push, pop or change to your UI Scene.
List of Modules: HorizonFramework(Runtime), HorizonFrameworkEditor(Editor)
Intended Platform: All Platforms
Platforms Tested: Windows
Demo Project: https://github.com/dorgonman/HorizonFrameworkDemo
DemoVideo: https://youtu.be/TQ3oFkdn2Pg
This plugin is a UI Management Framework that focus on manage your UMG and relate game logic with stack operation, ex: PushScene, PopScene, ChangeScene and ReplaceScene.
example 1: AHorizonScenen::OnStartTransInNative and AHorizonScenen::OnTopToBackNative Callback
UCLASS()
class UMyUserWidget: public UUserWidget
{
UPROPERTY(meta = (BindWidgetOptional))
UButton* Button_PushOtherScene;
UPROPERTY(EditAnywhere, Category = "Scene")
TSubclassOf<AHorizonSceneBase> OtherSceneClass;
}
void UMyUserWidget::NativeConstruct()
{
...
Button_PushOtherScene->OnClicked.AddDynamic(this, &ThisClass::OnPushOtherScene);
...
}
void UMyUserWidget::OnPushOtherScene()
{
auto pSceneManager = UHorizonSceneManagerLibrary::GetDefaultSceneManager(this);
int32 playerIndex = UGameplayStatics::GetPlayerControllerID(GetOwningPlayer());
auto pSceneEvent = pSceneManager->PushSceneByClass(OtherSceneClass, false, playerIndex);
auto pTransInScene = pSceneEvent->GetTransInScene();
ensureMsgf(pTransInScene, TEXT("oops! something error"));
pTransInScene->OnStartTransInNative.AddLambda([pSceneEvent]()
{
auto pOtherSceneWidget = Cast<UMyOtherSceneWidget>>(pSceneEvent->GetTransInSceneWidget());
pOtherSceneWidget->Setup(false);
});
pTransInScene->OnTopToBackNative.AddLambda([this]()
{
auto pOwningPlayer = GetOwningPlayer();
UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(pOwningPlayer, Button_PushOtherScene, EMouseLockMode::DoNotLock);
});
}
email: dorgonman@hotmail.com
*5.4.0
- [Refactor] Use TObjectPtr instead of RawPointer
*5.3.0
Update to 5.3.0
*5.2.0
Source\HorizonFramework
- [Refactor] Fix 5.2 warning
*5.1.0
Source\HorizonFramework
- [Refactor] Fix 5.1 warning
*5.0.0
Source\HorizonFramework
-
[Refactor] Fix 5.0 warning
-
[New] Add Test.spec and ProxyArchive
-
[BugFix] Fix UE5 GetLoadedPath warning
-
AB#2479 [BugFix] Widget sometimes not removed from viewport when seamless travel to next map
-
AB#2401 [BugFix] Fix UE5 'IsPendingKill' deprecated message
-
AB#2477 [BugFix][HorizonSceneBase] IsTransInFinished and IsTransOutFinished not work as expected
Source\HorizonFrameworkEditor
- [BugFix] Unregister custom class layout when ShutdownModule
*4.27.0
Source\HorizonFramework
-
AB#1867 [New][HorizonSceneBase] Implement ReceiveTransInFinished and ReceiveTransOutFinished
-
AB#1854 [SceneManager] Callback OnAddScene only if Scene exists
-
AB#1854 [New][HorizonSceneManager] Implement OnAddScene callback
-
AB#2091 [BugFix][HorizonGameInstance] Should not auto save if game didn't use it.
-
[HorizonSceneBase] Add comment to TransOutAnimationName
-
AB#2041 [New][HorizonSceneBase] PlayAnimationReverse when StartTransOut if TransInAnimationName equal to TransOutAnimationName
-
AB#2015 [BugFix][SceneManager] SceneEvent can't finished if Scene are cached and still running
-
AB#1929 [NEW][SceneManager] Implement SceneCache so cached SceneClass will only spawn single instance and will not create multiple time so improve performance
-
AB#1930 [BugFix] RemoveSceneByWidget should not remove TopScene and should remove Delegate after callback finished
-
Fix tutorial Scene
-
AB#1917 [BugFix][HorizonSceneBase] IsTransInFinished and IsTransOutFinished should check correct Animation name
-
AB#1921 [HorizonSceneEvent] Unused Scene callbacks should not appear in BP
-
AB#1887 [New][UHorizonSceneEvent] InitWidget when try to GetTransInSceneWidget
Source\HorizonFrameworkEditor
- AB#1867 [New][HorizonSceneBase] Implement ReceiveTransInFinished and ReceiveTransOutFinished
*4.26.0
-
[BugFix][HorizonSceneManager] OnRemoveScene should call OnPopScene if it is TopScene
-
[BugFix][HorizonSceneManager] RemoveScene and GetSceneByWidget should check SceneStack and SceneEventList
-
[BugFix][HorizonSceneManager] RemoveScene should find target scene from SceneStack
-
[BugFix][HorizonSceneManager] HasScene logic
-
[Refactor][HorizonSceneBase] Set StatusEnum to EHorizonSceneBaseStatusEnum::Init when init
-
[New][HorizonScene] Implement DestroyWidget and set InitWidget to public
-
[Refactor][HorizonSceneManager] Deprecate IsEmpty, use HasScene instead
-
[BugFix][HorizonSceneManager] IsSceneEventRunning should check current event status and refactor IsEmpty
-
[New][UHorizonSceneManagerLibrary] GetSceneManagerWithName will SetActorLabel in editor
-
[New][HorizonFrameworkFunctionLibrary] Implement SetComponentRotationToPlayer for BP simulation
-
[Refactor][HorizonScene] Set Default WidgetComponent DrawSize to 1920x1080
-
[HorizonSceneManager][Refactor] Change PlayerIndex to ControllerID
-
[Refactor] using copy for GetSceneManagerWithName
-
[Refactor] Always spawn DefaultSceneManagerWeakPtr is not exist
-
AB#1780 [BugFix] Move all AHorizonSceneManager to HorizonSceneSystem
*4.25.0
-
[UHorizonFrameworkFunctionLibrary] Refactor GetPlayerIndex
-
AB#1499 [New][AHorizonSceneManager] Implement IsSceneEventRunning
-
AB#1496 [Refactor][UHorizonSceneEvent] Refactor ProcessTransIn and ProcessTransOut
-
AB#1496 [New][AHorizonSceneManager] Implement IsEmpty: check SceneEventList and SceneStack
-
AB#1495 [New][UHorizonSceneEvent] BlueprintPure for GetTransInScene and GetTransOutScene
-
AB#1486 [New][AHorizonSceneManager] Implement CreateScene that the scene will not be managed by SceneManager
-
AB#1485 [AHorizonSceneManager] SetVisibilityForAllWidget and Adjust EnableWidget Visibility Toggle
-
[Refactor][SceneEvent] Remove Deprecations and remove bGreyOutWhenSceneTransition from PopScene and RemoveScene
-
AB#1484 [Refactor] IsTransInFinished and IsTransOutFinished should check IsAnyAnimationPlaying by default
-
AB#1479 [BugFix] Fix ChangeScene and PopScene param setup timing
-
AB#1482 [New][UHorizonSceneManagerLibrary] Implement GetSceneManagerWithName
-
AB#1479 [BugFix][HorizonScenePushEvent] Fix PopScene didn't pop previous scene correctly
-
AB#1333 [New] GetNumSceneEvent
-
AB#1332 [New] bAutoSave flag for ApplicationWillEnterBackground and Shutdown
-
[HorizonSceneEvent] GetTransInSceneWidget and GetTransOutSceneWidget
-
AB#1112 [New] GetDefaultSceneManager should try find SceneManager in level first before spawn one
-
AB#1573 [New][HorizonSceneManager] Implement PushSceneByClass_SingleInstance: Check is SceneClass already exist be fore push new scene
-
[New][HorizonGameInstance] Implement GetLoadingScreenWidget
-
AB#1573 [New][HorizonSceneManager] Implement PushSceneByClass_SingleInstance: Check is SceneClass already exist be fore push new scene
-
[BugFix][HorizonGameInstance] Fix MySaveGame GCAssumption warning
*4.24.0
New: [HorizonSceneManager] Implement RemoveSceneEvent
New: [UHorizonFrameworkFunctionLibrary] GetPlayerIndex
BugFix:[AHorizonSceneBase] OwningObject should come from PlayerIndex
Refactor:[AHorizonSceneBase] Change IsTransInFinished && IsTransOutFinished to BlueprintNativeEvent
Refactor: Adjust naming convention
*4.23.0
New: [UHorizonFrameworkFunctionLibrary] ShouldDisplayTouchInterface
Refactor: [HorizonSceneManager] Implement PlayerIndex for CreateWidget
Refactor: Deprecated Default Functions
BugFix: Fix UHorizonFrameworkFunctionLibrary::GetUserWidgetAnimation Crash
*4.22.0
BugFix: UserWidget and Scene are created twice
New: [HorizonFrameworkFunctionLibrary] SetComponentRotationToPlayer
BugFix: [HorizonSceneBase] IsUserWidgetAnimationFinished when animName not found
*4.21.1
BugFix: UserWidget and Scene are created twice
New: [HorizonFrameworkFunctionLibrary] SetComponentRotationToPlayer
BugFix: [HorizonSceneBase] IsUserWidgetAnimationFinished when animName not found
*4.21.0
New: [AHorizonSceneManager] Add GetSceneEventList, GetSceneManagerOfClass and GetSceneManagerByTag.
New: [AHorizonSceneBase] Add OnStartTransIn, OnStartTransOut, OnTopToBack and OnBackToTop Callback.
New: [AHorizonSceneBase] RegisterAutoGeneratedDefaultEvent for ReceiveBeginPlay, ReceiveEnter, ReceiveStartTransIn, ReceiveOnEnter, ReceiveTickScene, ReceiveExit, ReceiveStartTransOut, ReceiveOnExit and ReceiveEndPlay.
BugFix: [AHorizonSceneManager] ClearSceneStack when AHorizonSceneManager::EndPlay
BugFix: [AHorizonSceneBase] AHorizonSceneBase::IsUserWidgetAnimationFinished always true if IsDedicatedServer.
BugFix: [AHorizonSceneManager] Use PushSceneByClass instead of ChangeScene at BeginPlay.
BugFix: [UHorizonChangeSceneEvent] ChangeScene TransInFinished called twice.
BugFix: [AHorizonScene] Don't SetDrawAtDesiredSize by default for WidgetComponent
BugFix: [UHorizonGameInstance] SaveGame didn't save properly.
Refactor: Add Default suffix to functions in UHorizonSceneManagerLibrary, ex:ChangeSceneByClassDefault, PushSceneByClassDefault.
*4.20.0
Refactor Source Folder
*4.19.2
New: Param warning in HorizonScene's animation name DropDown list if param name not found.
Fix: Add WhitelistPlatform for IOS and HTML5.
*4.19.0
FIX: HorizonScene's WidgetComponent bugs in VR Mode.
*4.18.0
NEW: First Version including core features.