DanielWillett.UnturnedUITools
1.4.1
See the version list below for details.
dotnet add package DanielWillett.UnturnedUITools --version 1.4.1
NuGet\Install-Package DanielWillett.UnturnedUITools -Version 1.4.1
<PackageReference Include="DanielWillett.UnturnedUITools" Version="1.4.1" />
paket add DanielWillett.UnturnedUITools --version 1.4.1
#r "nuget: DanielWillett.UnturnedUITools, 1.4.1"
// Install DanielWillett.UnturnedUITools as a Cake Addin #addin nuget:?package=DanielWillett.UnturnedUITools&version=1.4.1 // Install DanielWillett.UnturnedUITools as a Cake Tool #tool nuget:?package=DanielWillett.UnturnedUITools&version=1.4.1
UI Tools and Extensions
Powerful Unturned Module/Library for manipulating Glazier/Sleek UI.
Requires HarmonyLib 2.2.2+
.
NuGet package: DanielWillett.UnturnedUITools
Reflection Tools
This package references my Reflection Tools library which has a lot of good tools for efficient access to non-public members.
XML Documentation
This package includes complete XML documentation for SDG.Glazier.Runtime.dll
, which houses all of the Glazier code.
Note: this is done by including a reference assembly in the package, so don't copy it from the output directory to your libraries.
UI Tools
The UIAccessor
class has many tools for working with UIs:
- Many efficient getters for internal types and instances of vanilla UIs.
- Optional managed Harmony log that clears on startup to help diagnose transpilers.
EditorUIReady
andPlayerUIReady
events.- UI
TypeInfo
with basic information about each UI type (used by UI extensions). OnInitializingUIInfo
to add your own information toTypeInfo
.LoadUIToILGenerator
andEnumerateUIInstructions
to load instance singleton UIs toILGenerators
or transpilers.- Extension for
ISleekElement
:CopyTransformFrom
to copy all transform values from one element to another.
UI Extensions
Add a class as an extension to existing vanilla or modded UI classes.
You can extend the following types. It is also possible to add your own types.
- Singleton and Static UIs. This includes any of the 'standard' in-game UI classes.
Useable
UIs (Guns, Housing Planners, etc).- Node and Volume editor menus.
- Any class deriving from
SleekWrapper
. - Modules can add their own classes in as well.
Existing Members
Easy access to members of the class you're expanding (static or instance) is possible with Existing Members.
// Property getter will be patched to return messageLabel.
[ExistingMember("messageLabel")]
private ISleekLabel MessageLabel { get; }
// Property will be set before the constructor runs. Change this behavior with the 'InitializeMode' attribute property.
// If you choose to use the 'PatchGetter' option with a setter,
// you cannot use the setter to set the existing member's value back.
[ExistingMember("messageLabel")]
private ISleekLabel MessageLabel { get; set; }
// Field will be set before the constructor runs.
[ExistingMember("messageLabel")]
private readonly ISleekLabel _messageLabel;
Common Mistake
// Setting this to null here to fix nullable references will run after the fields
// are initialized but before the constructor so _container will have a null value.
//
// Instead use #nullable disable and #nullable restore to do this.
// BAD
[ExistingMember("container")]
private readonly SleekFullscreenBox _container = null!;
// GOOD
#nullable disable
// ...
[ExistingMember("container")]
private readonly SleekFullscreenBox _container;
// ...
#nullable restore
Static Compatability
The system is designed to be able to be accessed from a static context (like a patch, for example).
// Getting static or singleton UI extensions:
MenuDashboardUIExtension? extension = UnturnedUIToolsNexus.UIExtensionManager.GetInstance<MenuDashboardUIExtension>();
// Getting non-singleton UI extensions:
static void Postfix(object __instance)
{
SleekItemExtension? extension = UnturnedUIToolsNexus.UIExtensionManager.GetInstance<SleekItemExtension>(__instance);
}
Examples
More examples available in: ExampleModule/Examples.
This example adds a button to the bottom left of the main menu.
[UIExtension(typeof(MenuDashboardUI))]
internal class MenuDashboardUIExtension : UIExtension, IDisposable
{
private const string Url = "https://github.com/DanielWillett/UnturnedUITools";
private readonly ISleekButton _githubButton;
[ExistingMember("exitButton")]
private readonly SleekButtonIcon _exitButton;
[ExistingMember("container")]
private readonly SleekFullscreenBox _container;
public MenuDashboardUIExtension()
{
_githubButton = Glazier.Get().CreateButton();
_githubButton.CopyTransformFrom(_exitButton);
_githubButton.PositionOffset_Y -= 60;
_githubButton.Text = "UITools GitHub";
_githubButton.FontSize = ESleekFontSize.Medium;
_githubButton.OnClicked += OnClickedGithubButton;
_githubButton.BackgroundColor = ESleekTint.BACKGROUND;
_container.AddChild(_githubButton);
}
private static void OnClickedGithubButton(ISleekElement button)
{
Process.Start(new ProcessStartInfo
{
FileName = Url,
UseShellExecute = true
});
}
public void Dispose()
{
_githubButton.OnClicked -= OnClickedGithubButton;
_container.RemoveChild(_githubButton);
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.1
- DanielWillett.ReflectionTools (>= 2.0.1)
-
.NETStandard 2.1
- DanielWillett.ReflectionTools (>= 2.0.1)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on DanielWillett.UnturnedUITools:
Package | Downloads |
---|---|
DevkitServer.Client
Module for Unturned that enables multi-user map editing. |
|
DevkitServer.Server
Module for Unturned that enables multi-user map editing. |
|
Breakdown.Tools
Package containing several tools for plugin and module development. |
|
DanielWillett.LevelObjectIcons
LevelObject icon renderer for the Unturned Map Editor. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Added MenuPlayServerBookmarksUI from preview version v3.24.1.102. Minor updates to SDG.Glazier.Runtime documentation.