public static void ProcessNode(SuperMetaNode root_node, Transform parent, Dictionary <string, object> node, GameObject maybe_recycled_node) { #if UNITY_EDITOR string image_name = (string)node["name"]; string image_type = image_name.Split('_')[0]; if (spriteClasses.ContainsKey(image_type)) { object[] args = new object[4]; args[0] = root_node; args[1] = parent; args[2] = node; args[3] = maybe_recycled_node; spriteClasses[image_type].GetMethod("ProcessNode").Invoke(null, args); return; } GameObject game_object = maybe_recycled_node; SuperSprite sprite = null; Image image = null; if (game_object == null) { game_object = new GameObject(); image = game_object.AddComponent(typeof(Image)) as Image; sprite = game_object.AddComponent(typeof(SuperSprite)) as SuperSprite; } else { image = game_object.GetComponent <Image>(); sprite = game_object.GetComponent <SuperSprite>(); } sprite.CreateRectTransform(game_object, node); sprite.name = image_name; sprite.hierarchyDescription = "SPRITE"; image.sprite = AssetDatabase.LoadAssetAtPath <Sprite>(root_node.imagePath + "/" + image_name + ".png"); if (image_type == "flipX") { sprite.flipX = true; } sprite.cachedMetadata = node; sprite.rootNode = root_node; root_node.spriteReferences.Add(new SpriteReference(image_name, sprite)); game_object.transform.SetParent(parent); sprite.Reset(); #endif }
//SuperScaleButton takes two inputs: // a contaner named scalebtn_ // a single sprite named scalebtn_ // the end result is the same! // but if we're just an image... let's fake being an image inside a container public static void ProcessNode(SuperMetaNode root_node, Transform parent, Dictionary <string, object> node, GameObject maybe_recycled_node) { #if UNITY_EDITOR string node_type = (string)node["type"]; string name = (string)node["name"]; GameObject game_object = maybe_recycled_node; SuperScaleButton button = null; if (game_object == null) { game_object = new GameObject(); button = game_object.AddComponent(typeof(SuperScaleButton)) as SuperScaleButton; button.createAnimation(); } else { button = game_object.GetComponent <SuperScaleButton>(); //TODO: should probably verify that our animation is still set up properly //but for now just assume we're not changing classes } button.CreateRectTransform(game_object, node); button.name = name; button.rootNode = root_node; button.cachedMetadata = node; button.hierarchyDescription = "BUTTON"; root_node.buttonReferences.Add(new ButtonReference(name, button)); game_object.transform.SetParent(parent); button.Reset(); if (node_type == "image") { SuperSprite sprite = game_object.GetComponent <SuperSprite>(); Image image = null; if (sprite == null) { sprite = game_object.AddComponent(typeof(SuperSprite)) as SuperSprite; image = game_object.AddComponent(typeof(Image)) as Image; } else { image = game_object.GetComponent <Image>(); } sprite.name = name; sprite.rootNode = root_node; sprite.cachedMetadata = node; image.sprite = AssetDatabase.LoadAssetAtPath <Sprite>(root_node.imagePath + "/" + name + ".png"); sprite.resetX = button.resetX; sprite.resetY = button.resetY; root_node.spriteReferences.Add(new SpriteReference(name, sprite)); game_object.transform.SetParent(parent); sprite.Reset(); } //image nodes don't have children if (node.ContainsKey("children")) { root_node.ProcessChildren(game_object.transform, node["children"] as List <object>); } #endif }
public SpriteReference(string name, SuperSprite sprite) { this.name = name; this.sprite = sprite; }