Иконка ресурса

FREE UiMergeFramework : 1.1.0 1.1.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Color = UnityEngine.Color;
using Net = Network.Net;
using Network;
using Newtonsoft.Json;
using Pool = Facepunch.Pool;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;

//UiMergeFramework created with PluginMerge v(1.0.0.0) by MJSU
namespace Oxide.Plugins
{
    //Define:Framework
    //[Info("Rust UI Framework", "MJSU", "1.1.0")]
    //[Description("UI Framework for Rust")]
    public partial class UiMergeFramework : RustPlugin
    {
        #region Plugin\UiFramework.Methods.cs
        #region JSON Sending
        public void DestroyUi(BasePlayer player, string name)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(player.Connection), null, "DestroyUI", name);
        }
        
        public void DestroyUi(List<Connection> connections, string name)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(connections), null, "DestroyUI", name);
        }
        
        private void DestroyUiAll(string name)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(Net.sv.connections), null, "DestroyUI", name);
        }
        #endregion
        #endregion

        #region Plugin\UiFramework.PreventMovement.cs
        private const string ChairPrefab = "assets/prefabs/vehicle/seats/standingdriver.prefab";
        private const ulong PreventMovementSkinId = ulong.MaxValue - 51234;
        
        private uint _prefabId;
        
        public void InitPreventMovement()
        {
            if (_prefabId == 0)
            {
                _prefabId = StringPool.Get(ChairPrefab);
            }
        }
        
        public void PreventMovement(BasePlayer player)
        {
            InitPreventMovement();
            
            BaseMountable currentMount = player.GetMounted();
            if (currentMount != null)
            {
                return;
            }
            
            Transform transform = player.transform;
            BaseVehicleSeat chair = GameManager.server.CreateEntity(ChairPrefab, transform.position, transform.rotation) as BaseVehicleSeat;
            chair.skinID = PreventMovementSkinId;
            chair.Spawn();
            player.MountObject(chair);
        }
        
        public void AllowMovement(BasePlayer player)
        {
            InitPreventMovement();
            BaseMountable mounted = player.GetMounted();
            if (mounted != null && mounted.prefabID == _prefabId && mounted.parentEntity.uid == 0 && mounted.skinID == PreventMovementSkinId)
            {
                player.DismountObject();
                mounted.Kill();
            }
        }
        #endregion

    }

    #region Constants.cs
    public class Constants
    {
        public static class UiFonts
        {
            public static readonly string DroidSansMono = "droidsansmono.ttf";
            public static readonly string PermanentMarker = "permanentmarker.ttf";
            public static readonly string RobotoCondensedBold = "robotocondensed-bold.ttf";
            public static readonly string RobotoCondensedRegular = "robotocondensed-regular.ttf";
            
            private static readonly Hash<UiFont, string> _fonts = new Hash<UiFont, string>
            {
                [UiFont.DroidSansMono] = DroidSansMono,
                [UiFont.PermanentMarker] = PermanentMarker,
                [UiFont.RobotoCondensedBold] = RobotoCondensedBold,
                [UiFont.RobotoCondensedRegular] = RobotoCondensedRegular,
            };
            
            public static string GetUiFont(UiFont font)
            {
                return _fonts[font];
            }
        }
        
        public static class UiLayers
        {
            public static readonly string Overall = "Overall";
            public static readonly string Overlay = "Overlay";
            public static readonly string Hud = "Hud";
            public static readonly string HudMenu = "Hud.Menu";
            public static readonly string Under = "Under";
            
            private static readonly Hash<UiLayer, string> _layers = new Hash<UiLayer, string>
            {
                [UiLayer.Overall] = Overall,
                [UiLayer.Overlay] = Overlay,
                [UiLayer.Hud] = Hud,
                [UiLayer.HudMenu] = HudMenu,
                [UiLayer.Under] = Under,
            };
            
            public static string GetLayer(UiLayer layer)
            {
                return _layers[layer];
            }
        }
        
        public static class RpcFunctions
        {
            public static readonly string AddUiFunc = "AddUI";
            public static readonly string DestroyUiFunc = "DestroyUI";
        }
        
        public static class Json
        {
            public static readonly char QuoteChar = '\"';
        }
    }
    #endregion

    #region Builder\UiBuilder.cs
    public partial class UiBuilder : IDisposable
    {
        public BaseUiComponent Root;
        
        private string _cachedJson;
        private bool _disposed;
        
        private List<BaseUiComponent> _components = Pool.GetList<BaseUiComponent>();
        
        private static string _font;
        
        #region Constructor
        static UiBuilder()
        {
            SetFont(UiFont.RobotoCondensedRegular);
        }
        
        public UiBuilder(UiColor color, UiPosition pos, UiOffset offset, bool useCursor, string name, string parent)
        {
            UiPanel panel = UiPanel.Create(pos, offset, color);
            panel.NeedsCursor = useCursor;
            SetRoot(panel, name, parent);
        }
        
        public UiBuilder(UiColor color, UiPosition pos, bool useCursor, string name, string parent) : this(color, pos, null, useCursor, name, parent)
        {
            
        }
        
        public UiBuilder(UiColor color, UiPosition pos, bool useCursor, string name, UiLayer parent = UiLayer.Overlay) : this(color, pos, null, useCursor, name, Constants.UiLayers.GetLayer(parent))
        {
            
        }
        
        public UiBuilder(UiColor color, UiPosition pos, UiOffset offset, bool useCursor, string name, UiLayer parent = UiLayer.Overlay) : this(color, pos, offset, useCursor, name, Constants.UiLayers.GetLayer(parent))
        {
            
        }
        
        public UiBuilder(BaseUiComponent root, string name, string parent)
        {
            SetRoot(root, name, parent);
        }
        
        public UiBuilder()
        {
            
        }
        
        public void SetRoot(BaseUiComponent component, string name, string parent)
        {
            Root = component;
            component.Parent = parent;
            component.Name = name;
            _components.Add(component);
        }
        
        public static void SetFont(UiFont font)
        {
            _font = Constants.UiFonts.GetUiFont(font);
        }
        #endregion
        
        #region Decontructor
        ~UiBuilder()
        {
            Dispose();
        }
        
        public void Dispose()
        {
            if (_disposed)
            {
                return;
            }
            
            _disposed = true;
            
            for (int index = 0; index < _components.Count; index++)
            {
                BaseUiComponent component = _components[index];
                Pool.Free(ref component);
            }
            
            Pool.FreeList(ref _components);
            Root = null;
            _cachedJson = null;
        }
        #endregion
        
        #region Add UI
        public void AddComponent(BaseUiComponent component, BaseUiComponent parent)
        {
            component.Parent = parent.Name;
            component.Name = GetComponentName();
            _components.Add(component);
        }
        
        public string GetComponentName()
        {
            return string.Concat(Root.Name, "_", _components.Count.ToString());
        }
        
        public UiPanel Section(BaseUiComponent parent, UiPosition pos)
        {
            UiPanel section = UiPanel.Create(pos, null, UiColors.Clear);
            AddComponent(section, parent);
            return section;
        }
        
        public UiPanel Panel(BaseUiComponent parent, UiColor color, UiPosition pos)
        {
            UiPanel panel = UiPanel.Create(pos, null, color);
            AddComponent(panel, parent);
            return panel;
        }
        
        public UiPanel Panel(BaseUiComponent parent, UiColor color, UiPosition pos, UiOffset offset)
        {
            UiPanel panel = UiPanel.Create(pos, offset, color);
            AddComponent(panel, parent);
            return panel;
        }
        
        public UiButton EmptyCommandButton(BaseUiComponent parent, UiColor color, UiPosition pos, string cmd)
        {
            UiButton button = UiButton.CreateCommand(pos, color , cmd);
            AddComponent(button, parent);
            return button;
        }
        
        public UiButton EmptyCloseButton(BaseUiComponent parent, UiColor color, UiPosition pos, string close)
        {
            UiButton button = UiButton.CreateClose(pos, color, close);
            AddComponent(button, parent);
            return button;
        }
        
        public UiButton TextButton(BaseUiComponent parent, string text, int textSize, UiColor textColor, UiColor buttonColor, UiPosition pos, string cmd, TextAnchor align = TextAnchor.MiddleCenter)
        {
            UiButton button = EmptyCommandButton(parent, buttonColor, pos, cmd);
            Label(button, text, textSize, textColor, UiPosition.FullPosition, align);
            return button;
        }
        
        public UiButton ImageButton(BaseUiComponent parent, UiColor buttonColor, string png, UiPosition pos, string cmd)
        {
            UiButton button = EmptyCommandButton(parent, buttonColor, pos, cmd);
            Image(button, png, UiPosition.FullPosition);
            return button;
        }
        
        public UiButton TextCloseButton(BaseUiComponent parent, string text, int textSize, UiColor textColor, UiColor buttonColor, UiPosition pos, string close, TextAnchor align = TextAnchor.MiddleCenter)
        {
            UiButton button = EmptyCloseButton(parent, buttonColor, pos, close);
            Label(button, text, textSize, textColor, UiPosition.FullPosition, align);
            return button;
        }
        
        public UiButton ImageCloseButton(BaseUiComponent parent, UiColor buttonColor, string png, UiPosition pos, string close)
        {
            UiButton button = EmptyCloseButton(parent, buttonColor, pos, close);
            Image(button, png, UiPosition.FullPosition);
            return button;
        }
        
        public UiImage Image(BaseUiComponent parent, string png, UiPosition pos, UiColor color)
        {
            UiImage image = UiImage.Create(png, pos, color);
            AddComponent(image, parent);
            return image;
        }
        
        public UiImage Image(BaseUiComponent parent, string png, UiPosition pos)
        {
            return Image(parent, png, pos, UiColors.White);
        }
        
        public UiLabel Label(BaseUiComponent parent, string text, int size, UiColor color, UiPosition pos, TextAnchor align = TextAnchor.MiddleCenter)
        {
            UiLabel label = UiLabel.Create(text, size, color, pos, _font, align);
            AddComponent(label, parent);
            return label;
        }
        
        public UiLabel LabelBackground(BaseUiComponent parent, string text, int size, UiColor color, UiColor backgroundColor, UiPosition pos, TextAnchor align = TextAnchor.MiddleCenter)
        {
            UiPanel panel = Panel(parent, backgroundColor, pos);
            UiLabel label = UiLabel.Create(text, size, color, UiPosition.FullPosition, _font, align);
            AddComponent(label, panel);
            return label;
        }
        
        public UiInput Input(BaseUiComponent parent, int size, UiColor textColor, UiColor backgroundColor, UiPosition pos, string cmd, TextAnchor align = TextAnchor.MiddleCenter, int charsLimit = 0, bool isPassword = false)
        {
            parent = Panel(parent, backgroundColor, pos);
            UiInput input = UiInput.Create(size, textColor, pos, cmd, _font, align,  charsLimit, isPassword);
            AddComponent(input, parent);
            return input;
        }
        
        private readonly Position _boarderTop = new Position("0 1", "1 1");
        private readonly Position _boarderBottom = new Position("0 0", "1 0");
        private readonly Position _boarderLeft = new Position("0 0", "0 1");
        private readonly Position _boarderRight = new Position("1 0", "1 1");
        
        public void Border(BaseUiComponent parent, UiColor color, int size = 0, BorderMode border = BorderMode.Top | BorderMode.Bottom | BorderMode.Left | BorderMode.Right)
        {
            string sizeString = size.ToString();
            if (HasBorderFlag(border, BorderMode.Top))
            {
                UiPanel panel = UiPanel.Create(_boarderTop, new Offset("0 -1", $"0 {sizeString}"), color);
                AddComponent(panel, parent);
            }
            
            if (HasBorderFlag(border, BorderMode.Left))
            {
                UiPanel panel = UiPanel.Create(_boarderLeft, new Offset($"-{sizeString} -{sizeString}", "1 0"), color);
                AddComponent(panel, parent);
            }
            
            if(HasBorderFlag(border, BorderMode.Bottom))
            {
                UiPanel panel = UiPanel.Create(_boarderBottom, new Offset($"0 -{sizeString}", "0 1"), color);
                AddComponent(panel, parent);
            }
            
            if (HasBorderFlag(border, BorderMode.Right))
            {
                UiPanel panel = UiPanel.Create(_boarderRight, new Offset("-1 0", $"{sizeString} 0"), color);
                AddComponent(panel, parent);
            }
        }
        
        private bool HasBorderFlag(BorderMode mode, BorderMode flag)
        {
            return (mode & flag) != 0;
        }
        #endregion
        
        #region JSON
        public string ToJson()
        {
            return JsonCreator.CreateJson(_components);
        }
        
        public void CacheJson()
        {
            _cachedJson = ToJson();
        }
        #endregion
        
        #region Add UI
        public void AddUi(BasePlayer player)
        {
            AddUi(player.Connection);
        }
        
        public void AddUiCached(BasePlayer player)
        {
            AddUiCached(player.Connection);
        }
        
        public void AddUi(Connection connection)
        {
            AddUi(connection, ToJson());
        }
        
        public void AddUiCached(Connection connection)
        {
            AddUi(connection, _cachedJson);
        }
        
        public void AddUi(List<Connection> connections)
        {
            AddUi(connections, ToJson());
        }
        
        public void AddUiCached(List<Connection> connections)
        {
            AddUi(connections, _cachedJson);
        }
        
        public void AddUi()
        {
            AddUi(ToJson());
        }
        
        public void AddUiCached()
        {
            AddUi(_cachedJson);
        }
        
        public static void AddUi(BasePlayer player, string json)
        {
            AddUi(player.Connection, json);
        }
        
        public static void AddUi(string json)
        {
            AddUi(Net.sv.connections, json);
        }
        
        public static void AddUi(Connection connection, string json)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(connection), null, Constants.RpcFunctions.AddUiFunc, json);
        }
        
        public static void AddUi(List<Connection> connections, string json)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(connections), null, Constants.RpcFunctions.AddUiFunc, json);
        }
        #endregion
        
        #region Destroy Ui
        public void DestroyUi(BasePlayer player)
        {
            DestroyUi(player, Root.Name);
        }
        
        public void DestroyUi(Connection connection)
        {
            DestroyUi(connection, Root.Name);
        }
        
        public void DestroyUi(List<Connection> connections)
        {
            DestroyUi(connections, Root.Name);
        }
        
        public void DestroyUi()
        {
            DestroyUi(Root.Name);
        }
        
        public void DestroyUiImages(BasePlayer player)
        {
            DestroyUiImages(player.Connection);
        }
        
        public void DestroyUiImages()
        {
            DestroyUiImages(Net.sv.connections);
        }
        
        public void DestroyUiImages(Connection connection)
        {
            for (int index = _components.Count - 1; index >= 0; index--)
            {
                BaseUiComponent component = _components[index];
                if (component is UiImage)
                {
                    DestroyUi(connection, component.Name);
                }
            }
        }
        
        public void DestroyUiImages(List<Connection> connections)
        {
            for (int index = _components.Count - 1; index >= 0; index--)
            {
                BaseUiComponent component = _components[index];
                if (component is UiImage)
                {
                    DestroyUi(connections, component.Name);
                }
            }
        }
        
        public static void DestroyUi(BasePlayer player, string name)
        {
            DestroyUi(player.Connection, name);
        }
        
        public static void DestroyUi(string name)
        {
            DestroyUi(Net.sv.connections, name);
        }
        
        public static void DestroyUi(Connection connection, string name)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(connection), null, Constants.RpcFunctions.DestroyUiFunc, name);
        }
        
        public static void DestroyUi(List<Connection> connections, string name)
        {
            CommunityEntity.ServerInstance.ClientRPCEx(new SendInfo(connections), null, Constants.RpcFunctions.DestroyUiFunc, name);
        }
        #endregion
    }
    #endregion

    #region Colors\UiColor.cs
    public class UiColor
    {
        public string Color { get; private set; }
        public int Value { get; private set; }
        
        /// <summary>
        /// Checks for format "0.0 0.0 0.0 0.0"
        /// Any permutation of normal rust color string will work
        /// </summary>
        private static readonly Regex _rustColorFormat = new Regex("\\d*.?\\d* \\d*.?\\d* \\d*.?\\d* \\d*.?\\d*", RegexOptions.Compiled | RegexOptions.ECMAScript);
        
        /// <summary>
        /// Valid Hex Color Formats
        /// #RGB
        /// #RRGGBB
        /// #RGBA
        /// #RRGGBBAA
        /// </summary>
        /// <param name="color"></param>
        public UiColor(string color)
        {
            Color colorValue;
            if (_rustColorFormat.IsMatch(color))
            {
                colorValue = ColorEx.Parse(color);
            }
            else
            {
                if (!color.StartsWith("#"))
                {
                    color = "#" + color;
                }
                
                ColorUtility.TryParseHtmlString(color, out colorValue);
            }
            
            SetValue(colorValue);
        }
        
        public UiColor(Color color)
        {
            SetValue(color);
        }
        
        public UiColor(string hexColor, int alpha = 255) : this(hexColor, alpha / 255f)
        {
            
        }
        
        public UiColor(string hexColor, float alpha = 1f)
        {
            if (!hexColor.StartsWith("#"))
            {
                hexColor = "#" + hexColor;
            }
            
            alpha = Mathf.Clamp01(alpha);
            Color colorValue;
            ColorUtility.TryParseHtmlString(hexColor, out colorValue);
            colorValue.a = alpha;
            SetValue(colorValue);
        }
        
        public UiColor(int red, int green, int blue, int alpha = 255) : this(red / 255f, green / 255f, blue / 255f, alpha / 255f)
        {
            
        }
        
        public UiColor(float red, float green, float blue, float alpha = 1f)
        {
            red = Mathf.Clamp01(red);
            green = Mathf.Clamp01(green);
            blue = Mathf.Clamp01(blue);
            alpha = Mathf.Clamp01(alpha);
            
            SetValue(red, green, blue, alpha);
        }
        
        public UiColor WithAlpha(string hex)
        {
            return WithAlpha(int.Parse(hex, System.Globalization.NumberStyles.HexNumber));
        }
        
        public UiColor WithAlpha(int alpha)
        {
            return WithAlpha(alpha / 255f);
        }
        
        public UiColor WithAlpha(float alpha)
        {
            Color color = ColorEx.Parse(Color);
            color.a = Mathf.Clamp01(alpha);
            return new UiColor(color);
        }
        
        private void SetValue(Color color)
        {
            SetValue(color.r, color.g, color.b, color.a);
        }
        
        private void SetValue(float red, float green, float blue, float alpha)
        {
            Color = $"{red:0.###} {green:0.###} {blue:0.###} {alpha:0.###}";
            Value = ((int)(red * 255) << 24) + ((int)(green * 255) << 16) + ((int)(blue * 255) << 8) + (int)(alpha * 255);
        }
        
        public static implicit operator UiColor(string value) => new UiColor(value);
    }
    #endregion

    #region Colors\UiColors.cs
    public static class UiColors
    {
        public static class BootStrap
        {
            public static readonly UiColor BootStrapBlue = "#007bff";
            public static readonly UiColor BootStrapIndigo = "#6610f2";
            public static readonly UiColor BootStrapPurple = "#6f42c1";
            public static readonly UiColor BootStrapPink = "#e83e8c";
            public static readonly UiColor BootStrapRed = "#dc3545";
            public static readonly UiColor BootStrapOrange = "#fd7e14";
            public static readonly UiColor BootStrapYellow = "#ffc107";
            public static readonly UiColor BootStrapGreen = "#28a745";
            public static readonly UiColor BootStrapTeal = "#20c997";
            public static readonly UiColor BootStrapCyan = "#17a2b8";
            public static readonly UiColor BootStrapWhite = "#fff";
            public static readonly UiColor BootStrapGray = "#6c757d";
            public static readonly UiColor BootStrapDarkGray = "#343a40";
            public static readonly UiColor BootStrapPrimary = "#007bff";
            public static readonly UiColor BootStrapSecondary = "#6c757d";
            public static readonly UiColor BootStrapSuccess = "#28a745";
            public static readonly UiColor BootStrapInfo = "#17a2b8";
            public static readonly UiColor BootStrapWarning = "#ffc107";
            public static readonly UiColor BootStrapDanger = "#dc3545";
            public static readonly UiColor BootStrapLight = "#f8f9fa";
            public static readonly UiColor BootStrapDark = "#343a40";
        }
        
        public static class Material
        {
            public static readonly UiColor MatPrimary = "#dfe6e9";
            public static readonly UiColor MatPrimaryLight = "#b2bec3";
            public static readonly UiColor MatPrimaryDark = "#636e72";
            public static readonly UiColor MatSecondary = "#2d3436";
            public static readonly UiColor MatSecondaryLight = "#74b9ff";
            public static readonly UiColor MatSecondaryDark = "#0984e3";
            public static readonly UiColor MatTextOnPrimary = "#0984e3";
            public static readonly UiColor MatTextOnSecondary = "#0984e3";
        }
        
        public static class StandardColors
        {
            public static readonly UiColor White = "#FFFFFF";
            public static readonly UiColor Silver = "#C0C0C0";
            public static readonly UiColor Gray = "#808080";
            public static readonly UiColor Black = "#000000";
            public static readonly UiColor Red = "#FF0000";
            public static readonly UiColor Maroon = "#800000";
            public static readonly UiColor Yellow = "#FFFF00";
            public static readonly UiColor Olive = "#808000";
            public static readonly UiColor Lime = "#00FF00";
            public static readonly UiColor Green = "#008000";
            public static readonly UiColor Aqua = "#00FFFF";
            public static readonly UiColor Teal = "#008080";
            public static readonly UiColor Blue = "#0000FF";
            public static readonly UiColor Navy = "#000080";
            public static readonly UiColor Fuchsia = "#FF00FF";
            public static readonly UiColor Purple = "#800080";
        }
        
        public static class Supreme
        {
            public static readonly UiColor Lime = "#acfa58";
            public static readonly UiColor SilverText = "#e3e3e3";
            public static readonly UiColor K1lly0usRed = "#ce422b";
        }
        
        public static class MJSU
        {
            public static readonly UiColor Orange = "#de8732";
        }
        
        public static class Rust
        {
            public static readonly UiColor Red = "#cd4632";
            public static readonly UiColor Green = "#8cc83c";
            public static readonly UiColor Panel = "#CCCCCC";
            
            public static class Ui
            {
                public static readonly UiColor Panel = "#A6A6A60F";
                public static readonly UiColor Header = "#DBDBDB33";
                public static readonly UiColor PanelButton = "#A6A6A60F";
                public static readonly UiColor OkButton = "#6A804266";
                public static readonly UiColor Button = "#BFBFBF1A";
                public static readonly UiColor PanelText = "#E8dED4";
                public static readonly UiColor PanelButtonText = "#C4C4C4";
                public static readonly UiColor OkButtonText = "#9BB46E";
                public static readonly UiColor ButtonText = "#E8DED4CC";
            }
            
            public static class Chat
            {
                public static readonly UiColor Player = "#55AAFF";
                public static readonly UiColor Developer = "#FFAA55";
                public static readonly UiColor Admin = "#AAFF55";
            }
        }
        
        public static class Form
        {
            public static readonly UiColor Body = "#00001F";
            public static readonly UiColor Header = "#00001F";
            public static readonly UiColor Text = StandardColors.White;
            public static readonly UiColor Panel = "#2B2B2B";
            public static readonly UiColor PanelSecondary = "#3f3f3f";
            public static readonly UiColor PanelTertiary = "#525252";
            public static readonly UiColor ButtonPrimary = Rust.Red;
            public static readonly UiColor ButtonSecondary = "#666666";
        }
        
        #region UI Colors
        public static readonly UiColor Clear = StandardColors.Black.WithAlpha(0f);
        public static readonly UiColor White = StandardColors.White;
        public static readonly UiColor Black = StandardColors.Black;
        public static readonly UiColor Body = Form.Body.WithAlpha("B2");
        public static readonly UiColor BodyHeader = Form.Header;
        public static readonly UiColor Text = Form.Text.WithAlpha("80");
        public static readonly UiColor Panel = Form.Panel;
        public static readonly UiColor PanelSecondary = Form.PanelSecondary;
        public static readonly UiColor PanelTertiary = Form.PanelTertiary;
        public static readonly UiColor CloseButton = Form.ButtonPrimary;
        public static readonly UiColor ButtonPrimary = Form.ButtonPrimary;
        public static readonly UiColor ButtonSecondary = Form.ButtonSecondary;
        public static readonly UiColor RustRed = Rust.Red;
        public static readonly UiColor RustGreen = Rust.Green;
        #endregion
    }
    #endregion

    #region Components\BaseComponent.cs
    public class BaseComponent : Pool.IPooled
    {
        public UiColor Color;
        
        public virtual void EnterPool()
        {
            Color = null;
        }
        
        public virtual void LeavePool()
        {
        }
    }
    #endregion

    #region Components\BaseTextComponent.cs
    public class BaseTextComponent : BaseComponent
    {
        public int FontSize = 14;
        public string Font;
        public TextAnchor Align;
        
        public override void EnterPool()
        {
            base.EnterPool();
            FontSize = 14;
            Font = null;
            Align = TextAnchor.UpperLeft;
        }
    }
    #endregion

    #region Components\ButtonComponent.cs
    public class ButtonComponent : BaseComponent
    {
        public static string Type = "UnityEngine.UI.Button";
        
        public string Command;
        public string Close;
        public string Sprite;
        public string Material;
        
        public override void EnterPool()
        {
            base.EnterPool();
            Command = null;
            Close = null;
            Sprite = null;
            Material = null;
        }
    }
    #endregion

    #region Components\ImageComponent.cs
    public class ImageComponent : BaseComponent
    {
        public static string Type = "UnityEngine.UI.Image";
        
        public string Sprite;
        public string Material;
        public string Png;
        
        public override void EnterPool()
        {
            base.EnterPool();
            Sprite = null;
            Material = null;
            Png = null;
        }
    }
    #endregion

    #region Components\InputComponent.cs
    public class InputComponent : BaseTextComponent
    {
        public static string Type = "UnityEngine.UI.InputField";
        
        public int CharsLimit;
        public string Command;
        public bool IsPassword;
        
        public override void EnterPool()
        {
            base.EnterPool();
            CharsLimit = 0;
            Command = null;
            IsPassword = false;
        }
    }
    #endregion

    #region Components\OutlineComponent.cs
    public class OutlineComponent : BaseComponent
    {
        public static string Type = "UnityEngine.UI.Outline";
        
        public string Distance;
        public bool UseGraphicAlpha;
        
        public override void EnterPool()
        {
            base.EnterPool();
            Distance = null;
            UseGraphicAlpha = false;
        }
    }
    #endregion

    #region Components\RawImageComponent.cs
    public class RawImageComponent : BaseComponent
    {
        public static string Type = "UnityEngine.UI.RawImage";
        
        public string Sprite;
        public string Url;
        public string Png;
        
        public override void EnterPool()
        {
            base.EnterPool();
            Sprite = null;
            Url = null;
            Png = null;
        }
    }
    #endregion

    #region Components\TextComponent.cs
    public class TextComponent : BaseTextComponent
    {
        public static string Type = "UnityEngine.UI.Text";
        
        public string Text;
        
        public override void EnterPool()
        {
            base.EnterPool();
            Text = null;
        }
    }
    #endregion

    #region Enums\BorderMode.cs
    [Flags]
    public enum BorderMode : byte
    {
        Top = 1 << 0,
        Left = 1 << 1,
        Bottom = 1 << 2,
        Right = 1 << 3,
    }
    #endregion

    #region Enums\UiFont.cs
    public enum UiFont : byte
    {
        /// <summary>
        /// droidsansmono.ttf
        /// </summary>
        DroidSansMono,
        
        /// <summary>
        /// permanentmarker.ttf
        /// </summary>
        PermanentMarker,
        
        /// <summary>
        /// robotocondensed-bold.ttf
        /// </summary>
        RobotoCondensedBold,
        
        /// <summary>
        /// robotocondensed-regular.ttf
        /// </summary>
        RobotoCondensedRegular
    }
    #endregion

    #region Enums\UiLayer.cs
    public enum UiLayer
    {
        Overall,
        Overlay,
        Hud,
        HudMenu,
        Under,
    }
    #endregion

    #region Json\JsonCreator.cs
    public static class JsonCreator
    {
        private static readonly StringBuilder _sb = new StringBuilder();
        
        public static string CreateJson(List<BaseUiComponent> components)
        {
            StringWriter sw = new StringWriter();
            JsonTextWriter writer = new JsonTextWriter(sw);
            
            writer.WriteStartArray();
            
            for (int index = 0; index < components.Count; index++)
            {
                BaseUiComponent component = components[index];
                writer.WriteStartObject();
                AddFieldRaw(writer, JsonDefaults.ComponentName, component.Name);
                AddFieldRaw(writer, JsonDefaults.ParentName, component.Parent);
                AddField(writer, JsonDefaults.FadeInName, ref component.FadeIn, ref JsonDefaults.FadeoutValue);
                AddField(writer, JsonDefaults.FadeoutName, ref component.FadeOut, ref JsonDefaults.FadeoutValue);
                
                writer.WritePropertyName("components");
                writer.WriteStartArray();
                component.WriteComponents(writer);
                writer.WriteEndArray();
                writer.WriteEndObject();
            }
            
            writer.WriteEndArray();
            
            return sw.ToString();
        }
        
        public static void AddFieldRaw(JsonTextWriter writer, string name, string value)
        {
            writer.WritePropertyName(name);
            writer.WriteValue(value);
        }
        
        public static void AddField(JsonTextWriter writer, string name, string value, string defaultValue)
        {
            if (value != null && value != defaultValue)
            {
                writer.WritePropertyName(name);
                writer.WriteValue(value);
            }
        }
        
        public static void AddTextField(JsonTextWriter writer, string name, string value, string defaultValue)
        {
            if (value != null && value != defaultValue)
            {
                writer.WritePropertyName(name);
                _sb.Clear();
                _sb.Append(Constants.Json.QuoteChar);
                _sb.Append(value);
                _sb.Append(Constants.Json.QuoteChar);
                writer.WriteRawValue(_sb.ToString());
            }
        }
        
        public static void AddMultiField(JsonTextWriter writer, string name, string value, string[] defaultValues)
        {
            if (value != null && !defaultValues.Contains(value))
            {
                writer.WritePropertyName(name);
                writer.WriteValue(value);
            }
        }
        
        public static void AddField(JsonTextWriter writer, string name, ref int value, ref int defaultValue)
        {
            if (value != defaultValue)
            {
                writer.WritePropertyName(name);
                writer.WriteValue(value);
            }
        }
        
        public static void AddField(JsonTextWriter writer, string name, ref float value, ref float defaultValue)
        {
            if (value != defaultValue)
            {
                writer.WritePropertyName(name);
                writer.WriteValue(value);
            }
        }
        
        public static void AddField(JsonTextWriter writer, string name, UiColor value, UiColor defaultValue)
        {
            if (value.Value != defaultValue.Value)
            {
                writer.WritePropertyName(name);
                writer.WriteValue(value.Color);
            }
        }
        
        public static void Add(JsonTextWriter writer, ref Position position, ref Offset? offset)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, JsonDefaults.RectTransformName);
            AddMultiField(writer, JsonDefaults.AnchorMinName, position.Min, JsonDefaults.DefaultMinValues);
            AddMultiField(writer, JsonDefaults.AnchorMaxName, position.Max, JsonDefaults.DefaultMaxValues);
            
            if (offset.HasValue)
            {
                string min = offset.Value.Min;
                string max = offset.Value.Max;
                AddMultiField(writer, JsonDefaults.OffsetMinName, min, JsonDefaults.DefaultMinValues);
                AddMultiField(writer, JsonDefaults.OffsetMaxName, max, JsonDefaults.DefaultMaxValues);
            }
            else
            {
                //Fixes issue with UI going outside of bounds
                AddFieldRaw(writer, JsonDefaults.OffsetMaxName, JsonDefaults.OffsetMaxValue);
            }
            
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, ButtonComponent button)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, ButtonComponent.Type);
            AddField(writer, JsonDefaults.CommandName, button.Command, JsonDefaults.NullValue);
            AddField(writer, JsonDefaults.CloseName, button.Close, JsonDefaults.NullValue);
            AddField(writer, JsonDefaults.ColorName, button.Color, JsonDefaults.ColorValue);
            AddField(writer, JsonDefaults.SpriteName, button.Sprite, JsonDefaults.SpriteValue);
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, TextComponent textComponent)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, TextComponent.Type);
            AddTextField(writer, JsonDefaults.TextName, textComponent.Text, JsonDefaults.TextValue);
            AddField(writer, JsonDefaults.FontSizeName, ref textComponent.FontSize, ref JsonDefaults.FontSizeValue);
            AddField(writer, JsonDefaults.FontName, textComponent.Font, JsonDefaults.FontValue);
            AddField(writer, JsonDefaults.ColorName, textComponent.Color, JsonDefaults.ColorValue);
            string align = textComponent.Align.ToString();
            AddField(writer, JsonDefaults.AlignName, align, JsonDefaults.AlignValue);
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, RawImageComponent image)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, RawImageComponent.Type);
            AddField(writer, JsonDefaults.ColorName, image.Color, JsonDefaults.ColorValue);
            AddField(writer, JsonDefaults.SpriteName, image.Sprite, JsonDefaults.SpriteImageValue);
            if (!string.IsNullOrEmpty(image.Png))
            {
                AddField(writer, JsonDefaults.PNGName, image.Png, JsonDefaults.EmptyString);
            }
            
            if (!string.IsNullOrEmpty(image.Url))
            {
                AddField(writer, JsonDefaults.URLName, image.Url, JsonDefaults.EmptyString);
            }
            
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, ImageComponent image)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, ImageComponent.Type);
            AddField(writer, JsonDefaults.ColorName, image.Color, JsonDefaults.ColorValue);
            AddField(writer, JsonDefaults.SpriteName, image.Sprite, JsonDefaults.SpriteValue);
            AddField(writer, JsonDefaults.MaterialName, image.Material, JsonDefaults.MaterialValue);
            writer.WriteEndObject();
        }
        
        public static void AddCursor(JsonTextWriter writer)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, JsonDefaults.NeedsCursorValue);
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, OutlineComponent outline)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, OutlineComponent.Type);
            AddField(writer, JsonDefaults.ColorName, outline.Color, JsonDefaults.ColorValue);
            AddField(writer, JsonDefaults.DistanceName, outline.Distance, JsonDefaults.DistanceValue);
            if (outline.UseGraphicAlpha)
            {
                AddFieldRaw(writer, JsonDefaults.UseGraphicAlphaName, JsonDefaults.UseGraphicAlphaValue);
            }
            
            writer.WriteEndObject();
        }
        
        public static void Add(JsonTextWriter writer, InputComponent input)
        {
            writer.WriteStartObject();
            AddFieldRaw(writer, JsonDefaults.ComponentTypeName, InputComponent.Type);
            AddField(writer, JsonDefaults.FontSizeName, ref input.FontSize, ref JsonDefaults.FontSizeValue);
            AddField(writer, JsonDefaults.FontName, input.Font, JsonDefaults.FontValue);
            string align = input.Align.ToString();
            AddField(writer, JsonDefaults.AlignName, align, JsonDefaults.AlignValue);
            AddField(writer, JsonDefaults.ColorName, input.Color, JsonDefaults.ColorValue);
            AddField(writer, JsonDefaults.CharacterLimitName, ref input.CharsLimit, ref JsonDefaults.CharacterLimitValue);
            AddField(writer, JsonDefaults.CommandName, input.Command, JsonDefaults.NullValue);
            
            if (input.IsPassword)
            {
                AddFieldRaw(writer, JsonDefaults.PasswordName, JsonDefaults.PasswordValue);
            }
            
            writer.WriteEndObject();
        }
    }
    #endregion

    #region Json\JsonDefaults.cs
    public class JsonDefaults
    {
        //Position & Offset
        private const string DefaultMin = "0.0 0.0";
        private const string DefaultMax = "1.0 1.0";
        public static readonly string RectTransformName = "RectTransform";
        public static readonly string AnchorMinName = "anchormin";
        public static readonly string AnchorMaxName = "anchormax";
        public static readonly string OffsetMinName = "offsetmin";
        public static readonly string OffsetMaxName = "offsetmax";
        public static readonly string[] DefaultMinValues = { DefaultMin, "0 0" };
        public static readonly string[] DefaultMaxValues = { DefaultMax, "1 1" };
        public static readonly string OffsetMaxValue = "0 0";
        
        //Text
        public static readonly string AlignValue = "UpperLeft";
        public static int FontSizeValue = 14;
        public static readonly string FontValue = "RobotoCondensed-Bold.ttf";
        public static readonly string FontName = "font";
        public static readonly string TextName = "text";
        public static readonly string TextValue = "Text";
        public static readonly string FontSizeName = "fontSize";
        public static readonly string AlignName = "align";
        
        //Material & Sprite
        public static readonly string SpriteName = "sprite";
        public static readonly string MaterialName = "material";
        public static readonly string SpriteValue = "Assets/Content/UI/UI.Background.Tile.psd";
        public static readonly string SpriteImageValue = "Assets/Icons/rust.png";
        public static readonly string MaterialValue = "Assets/Icons/IconMaterial.mat";
        
        //Common
        public static readonly string ComponentTypeName = "type";
        public static readonly string ColorName = "color";
        public static readonly string NullValue = null;
        public static readonly string EmptyString = "";
        public static readonly string ComponentName = "name";
        public static readonly string ParentName = "parent";
        public static readonly string FadeInName = "fadeIn";
        public static readonly string FadeoutName = "fadeOut";
        public static float FadeoutValue;
        public static readonly UiColor ColorValue = "1 1 1 1";
        
        //Outline
        public static readonly string DistanceName = "distance";
        public static readonly string UseGraphicAlphaName = "useGraphicAlpha";
        public static readonly string UseGraphicAlphaValue = "True";
        public static readonly string DistanceValue = "1.0 -1.0";
        
        //Button
        public static readonly string CommandName = "command";
        public static readonly string CloseName = "close";
        
        //Needs Cursor
        public static readonly string NeedsCursorValue = "NeedsCursor";
        
        //Image
        public static readonly string PNGName = "png";
        public static readonly string URLName = "url";
        
        //Input
        public static readonly string CharacterLimitName = "characterLimit";
        public static int CharacterLimitValue;
        public static readonly string PasswordName = "password";
        public static readonly string PasswordValue = "true";
    }
    #endregion

    #region Positions\GridPosition.cs
    public class GridPosition : MovablePosition
    {
        public float NumCols { get; }
        public float NumRows { get; }
        private int _xSize = 1;
        private int _xOffset;
        private int _ySize = 1;
        private int _yOffset;
        private float _xPad;
        private float _yPad;
        
        public GridPosition(int size) : this(size, size)
        {
        }
        
        public GridPosition(int numCols, int numRows)
        {
            NumCols = numCols;
            NumRows = numRows;
        }
        
        public GridPosition SetRowLength(int size, int offset = 0)
        {
            _xSize = size;
            _xOffset = offset;
            return this;
        }
        
        public new GridPosition SetX(float xMin, float xMax)
        {
            XMin = xMin;
            XMax = xMax;
            return this;
        }
        
        public GridPosition SetColLength(int size, int offset = 0)
        {
            _ySize = size;
            _yOffset = offset;
            return this;
        }
        
        public new GridPosition SetY(float yMin, float yMax)
        {
            YMin = yMin;
            YMax = yMax;
            return this;
        }
        
        public GridPosition SetPadding(float padding)
        {
            _xPad = padding;
            _yPad = padding;
            return this;
        }
        
        public GridPosition SetPadding(float xPad, float yPad)
        {
            _xPad = xPad;
            _yPad = yPad;
            return this;
        }
        
        public GridPosition SetRowPadding(float padding)
        {
            _xPad = padding;
            return this;
        }
        
        public GridPosition SetColPadding(float padding)
        {
            _yPad = padding;
            return this;
        }
        
        public void MoveCols(int cols)
        {
            XMin += cols / NumCols;
            XMax += cols / NumCols;
            
            if (XMax > 1)
            {
                XMin -= 1;
                XMax -= 1;
// ... [Code preview truncated due to length. Full source in attached file] ...

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху