aquanox / subsystembrowserplugin Goto Github PK
View Code? Open in Web Editor NEWPlugin that adds a Subsystem Browser panel for Unreal Engine Editor to explore running subsystems and edit their properties.
License: MIT License
Plugin that adds a Subsystem Browser panel for Unreal Engine Editor to explore running subsystems and edit their properties.
License: MIT License
There are some ideas to improve user experience or help new to unreal people when using plugin based on feedback/messages/ideas.
When selecting my subsystem, the editor would freeze for a long period of time. This video was cut short, because it seemed the only way to resume working is to close and restart the editor. Same thing happened when I selected the Actor partition subsystem in the tree view.
https://user-images.githubusercontent.com/23241818/182373106-16235ce1-1ae0-4168-833d-3876c6da9772.mp4
The subsystem consists of multiple arrays of components, actors, FGuid's and a TMap<FGuid, CustomStruct>
//properties
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<ASLDDevice*> Devices;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<USLDPortComponent*> OriginPortComponents;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<USLDPortComponent*> PortComponents;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<FGuid> PortIDs;
//TODO: Swap to sorted map, since it should be faster for smaller data sets
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TMap<FGuid, FPortData> PortMap;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<USLDNetwork*> Networks;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "SLDynamics")
TArray<FSLDConnection> Connections;
and the struct inside the map is just this
USTRUCT(BlueprintType)
struct FPortData
{
GENERATED_BODY()
FPortData() { }
FPortData(USLDPortComponent* PortComponent)
{
component = PortComponent;
}
FORCEINLINE bool operator==(const FPortData &Other) const
{
return (component == Other.component) && (connections == Other.connections);
}
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SLDynamics")
USLDPortComponent* component;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SLDynamics")
TArray<FGuid> connections;
};
Would be nice to get a config panel going for subsystems, better usability for configs as simply export/import/refresh is not enough.
Subsystems
in Project Settings
panelConfig
-able subsystems with at least one config property in class within Settings
moduleFEditorStyle undefined.
And:
FEditorStyle::Get() is deprecated, use FAppStyle::Get() instead.
Not everyone interested in Module or Config sections for subsystem and may want different columns to be shown in table (like IsTickable flag or PlayerId)
Hence the idea to add support custom pickable columns for browser tree table.
Changes:
Workflow:
SubsystemBrowserUtils.cpp
// flags no longer need to be added in 5.1.1, throws warning, so the Engine just refuses to enable the plugin.
ADD_FLAG(CLASS_NoExport);
ADD_FLAG(CLASS_CustomConstructor);
Market lists plugin as compatible up to 5.0 so is out of step.
Deeply nested and recursive UObject editable properties sometimes cause issues when displayed in default DetailsView resulting in freezes and sometimes in stack overflow exceptions.
Maybe try to make a IDetailsCustomization
for the subsystem or something similar with lazy or deferred building of property tree. So instead of DetailsView recursively building extremely large tree when subsystem selected substitute non-trivial UObject properties with lazy click-to-expand behavior? There are no customizations for subsystems in engine so it should be possible.
It is also possible to define a custom meta specifier to allow specify Lazy/Immediate property tree construction for property.
Making a fully custom details view may be problematic from just a plugin scope.
This is list of my ideas to add some extra QOL to the plugin as there are things that could happen when Live Coding Reinstancing or HotReload is being used when working with Unreal Engine (for example missing properties, not loading ini config).
It is possible to track object states for validity and display big red warning label that things may go bad until editor is restarted.
FCoreUObjectDelegates::OnObjectsReinstanced
to track that reinstancing was usedSome projects have custom subsystems (GameplaySubsystem, TickableWorldSubsystem) that would be nice to display in browser as separate categories.
Hence the idea:
Typical workflow would be:
in both UE_5.1.1 and UE_5.2.1
I have a subsystem that is child of UGameInstanceSubsystem.
that will need a UDataTable assigned to it. I was hoping to do it through the plugin, but it does not appear in the browser to avoid hard references.
the Browser does show the child of UTickableWorldSubsystem that I created, and it is performing as expected.
steps to reproduce:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "GISubTest.generated.h"
/**
*
*/
UCLASS()
class SUBSTEST_API UGISubTest : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
// Begin Subsystem Required
virtual void Initialize(FSubsystemCollectionBase& Collection) override
{
Super::Initialize(Collection);
}
virtual void Deinitialize() override
{
Super::Deinitialize();
}
// End Subsystem Required
UFUNCTION(BlueprintCallable)
void TestFunction()
{
UE_LOG(LogTemp, Error, TEXT("Subsystem Was created"));
}
};
expected behavior there should be an entry for GISubTest (even if it has no members)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.