This plugin is heavily WIP.
CGUI — Base plugin. Contains base classes.
GUILibrary — Requires CGUI. Contains basic UI elements.
GUITest — Is for testing.
Firstly you need to require one of the files inside your plugin.
// Requires: CGUIGUIObject represents a basic UI element and acts as ICollection for components derived from GUIComponentBase.
Example:
// Basic text UI element
var element = new GUIObject()
{
new TextComponent("Example"),
new RectTransformComponent()
};To show your UI to a player you can use GUIObject.ShowUI(BasePlayer).
To make more advanced elements you should make your own classes derived from GUIElementBase or use classes from GUILibrary.
GUIElementBase allows you to easily combine basic GUIObject elements. To show a GUIElementBase element to a player you should to use Representation class which acts as ICollection for GUIElementBase.
For example this is a constructor for GUIButton class (GUILibrary):
public GUIObject TextElement;
public GUIObject ButtonElement;
public GUIButton(string text = "", string elementName = null, string parent = null)
{
elementName = elementName ?? GUIObject.GenerateId();
ButtonElement = new GUIObject(elementName + "_button", parent)
{
new ButtonComponent().OnClick(player =>
{
Click?.Invoke(this, player);
}, Owner),
new RectTransformComponent()
};
TextElement = new GUIObject(elementName + "_text", ButtonElement.Name)
{
new TextComponent(text) { Align = TextAlign.MiddleCenter, Color = Color.black }
};
}Every class derived from GUIElementBase should implement its own Render method.
For example:
public override ICollection<GUIObject> Render()
{
return new GUIObject[] { ButtonElement, TextElement };
}The method is pretty straightforward. But one thing is — you should follow the inheritance order. So the previous element should be a parent of the next element.
If no name is present for GUIObject it generates the name automatically using GUIObject.GenerateId().
Currently not all supported components are presented.
RectTransformComponent should be added at the end. Instead it will not work.
Data binding is WIP. Examples can be found inside GUILibrary.
WIP