private void CreateComponents(GameObject go, JSON.Object obj) { // // This is the 'stupid' but 'safe & predictable way of doing this. // switch (obj.GetString("type", "UnityEngine.UI.Text")) { case "UnityEngine.UI.Text": { var c = go.AddComponent <UnityEngine.UI.Text>(); c.text = obj.GetString("text", "Text"); c.fontSize = obj.GetInt("fontSize", 14); c.font = FileSystem.Load <Font>("Assets/Content/UI/Fonts/" + obj.GetString("font", "RobotoCondensed-Bold.ttf")); c.alignment = (TextAnchor)System.Enum.Parse(typeof(TextAnchor), obj.GetString("align", "UpperLeft")); c.color = ColorEx.Parse(obj.GetString("color", "1.0 1.0 1.0 1.0")); GraphicComponentCreated(c, obj); break; } case "UnityEngine.UI.Image": { var c = go.AddComponent <UnityEngine.UI.Image>(); c.sprite = FileSystem.Load <Sprite>(obj.GetString("sprite", "Assets/Content/UI/UI.Background.Tile.psd")); c.material = FileSystem.Load <Material>(obj.GetString("material", "Assets/Icons/IconMaterial.mat")); c.color = ColorEx.Parse(obj.GetString("color", "1.0 1.0 1.0 1.0")); c.type = (UnityEngine.UI.Image.Type)System.Enum.Parse(typeof(UnityEngine.UI.Image.Type), obj.GetString("imagetype", "Simple")); if (obj.ContainsKey("png")) { PngGraphicLoadRequested(c, uint.Parse(obj.GetString("png"))); } GraphicComponentCreated(c, obj); break; } case "UnityEngine.UI.RawImage": { var c = go.AddComponent <UnityEngine.UI.RawImage>(); c.texture = FileSystem.Load <Texture>(obj.GetString("sprite", "Assets/Icons/rust.png")); c.color = ColorEx.Parse(obj.GetString("color", "1.0 1.0 1.0 1.0")); if (obj.ContainsKey("material")) { c.material = FileSystem.Load <Material>(obj.GetString("material")); } if (obj.ContainsKey("url")) { StartCoroutine(LoadTextureFromWWW(c, obj.GetString("url"))); } if (obj.ContainsKey("png")) { PngGraphicLoadRequested(c, uint.Parse(obj.GetString("png"))); } GraphicComponentCreated(c, obj); break; } case "UnityEngine.UI.Button": { var c = go.AddComponent <UnityEngine.UI.Button>(); if (obj.ContainsKey("command")) { var cmd = obj.GetString("command"); c.onClick.AddListener(() => { ConsoleSystem.ClientRunOnServer(cmd); }); } if (obj.ContainsKey("close")) { var pnlName = obj.GetString("close"); c.onClick.AddListener(() => { DestroyPanel(pnlName); }); } // bg image var img = go.AddComponent <UnityEngine.UI.Image>(); img.sprite = FileSystem.Load <Sprite>(obj.GetString("sprite", "Assets/Content/UI/UI.Background.Tile.psd")); img.material = FileSystem.Load <Material>(obj.GetString("material", "Assets/Icons/IconMaterial.mat")); img.color = ColorEx.Parse(obj.GetString("color", "1.0 1.0 1.0 1.0")); img.type = (UnityEngine.UI.Image.Type)System.Enum.Parse(typeof(UnityEngine.UI.Image.Type), obj.GetString("imagetype", "Simple")); c.image = img; GraphicComponentCreated(img, obj); break; } case "UnityEngine.UI.Outline": { var c = go.AddComponent <UnityEngine.UI.Outline>(); c.effectColor = ColorEx.Parse(obj.GetString("color", "1.0 1.0 1.0 1.0")); c.effectDistance = Vector2Ex.Parse(obj.GetString("distance", "1.0 -1.0")); c.useGraphicAlpha = obj.ContainsKey("useGraphicAlpha"); break; } case "NeedsCursor": { go.AddComponent <NeedsCursor>(); break; } case "RectTransform": { var rt = go.GetComponent <RectTransform>(); if (rt) { rt.anchorMin = Vector2Ex.Parse(obj.GetString("anchormin", "0.0 0.0")); rt.anchorMax = Vector2Ex.Parse(obj.GetString("anchormax", "1.0 1.0")); rt.offsetMin = Vector2Ex.Parse(obj.GetString("offsetmin", "0.0 0.0")); rt.offsetMax = Vector2Ex.Parse(obj.GetString("offsetmax", "1.0 1.0")); } break; } } }