public GameObject(GameObject Base) { ID = Base.ID; Name = Base.Name; Parent = Base.Parent; Text = Base.Text; AutokillMode = Base.AutokillMode; AutokillTime = Base.AutokillTime; Type = Base.Type; Depth = Base.Depth; ShapeVariant = Base.ShapeVariant; Bin = Base.Bin; Layer = Base.Layer; ParentSettings = Base.ParentSettings; StartTime = Base.StartTime; OffsetX = Base.OffsetX; OffsetY = Base.OffsetY; Shape = Base.Shape; PosEvents = Base.PosEvents.ConvertAll(GameEvent => new Event(GameEvent.Clone())); ScaEvents = Base.ScaEvents.ConvertAll(GameEvent => new Event(GameEvent.Clone())); RotEvents = Base.RotEvents.ConvertAll(GameEvent => new Event(GameEvent.Clone())); ColEvents = Base.ColEvents.ConvertAll(GameEvent => new Event(GameEvent.Clone())); }
/// <summary> /// Takes all objects from a prefab and returns them. /// Note: If the prefab contains a single object it's returned as a GameObject, otherwise it's returned as a GameObject List. /// </summary> /// <param name="PrefabPath">Path to the prefab</param> public dynamic ImportPrefab(string PrefabPath) { using (StreamReader sr = new StreamReader(PrefabPath)) { // Get rid of the junk sr.ReadLine(); sr.ReadLine(); sr.ReadLine(); sr.ReadLine(); List <GameObject> objects = new List <GameObject>(); string data = sr.ReadToEnd(); data = data.Insert(0, "{\n"); JObject rss = JObject.Parse(data); JArray objectArray = rss["objects"] as JArray; if (objectArray == null) { throw new NullReferenceException(); } foreach (var Object in objectArray) { JObject Events = Object["events"] as JObject; JArray pos = Events["pos"] as JArray; JArray sca = Events["sca"] as JArray; JArray rot = Events["rot"] as JArray; JArray col = Events["col"] as JArray; byte shape = 99; byte.TryParse((string)Object["so"], out shape); if (shape == 99) { shape = 0; } JObject editor = Object["ed"] as JObject; JObject offset = Object["o"] as JObject; string id = (string)Object["id"], name = (string)Object["name"], parent = (string)Object["p"], text = (string)Object["text"]; int? pt = (int?)Object["pt"], d = (int?)Object["d"], so = (int?)Object["so"]; pt ??= 101; d ??= 15; so ??= 0; Autokill akt = Autokill.LastKFOffset; float ako = 0; ObjectType ot = ObjectType.Normal; try { akt = (Autokill)(int)Object["akt"]; ako = (float)Object["ako"]; ot = (ObjectType)(int)Object["ot"]; } catch { } bool?empty = (bool?)Object["empty"], h = (bool)Object["h"]; empty ??= false; float?st = (float?)Object["st"]; st ??= 0; GameObject obj = new GameObject(id, name, (Shapes)shape, parent, (int)pt); obj.GetEventList(EventType.pos).Clear(); obj.GetEventList(EventType.sca).Clear(); obj.GetEventList(EventType.rot).Clear(); obj.GetEventList(EventType.col).Clear(); if (editor != null) { obj.Bin = (int)editor["bin"]; obj.Layer = (int)editor["layer"]; } if (offset != null) { obj.OffsetX = (float)offset["x"]; obj.OffsetY = (float)offset["y"]; } obj.AutokillMode = (Autokill)akt; obj.AutokillTime = (float)ako; obj.Depth = (int)d; obj.Type = (ObjectType)ot; obj.ShapeVariant = (int)so; obj.StartTime = (float)st; obj.Text = text; foreach (var Event in pos) { Easing ct = Easing.Linear; Easing.TryParse((string)Event["ct"], out ct); float t = (float)Event["t"], x = (float)Event["x"]; float?y = (float?)Event["y"]; y ??= 0; RandomMode r = RandomMode.None; RandomMode.TryParse((string)Event["r"], out r); float?rx = (int?)Event["rx"]; float?ry = (int?)Event["ry"]; float?rz = (int?)Event["rz"]; if (r == RandomMode.None) { obj.AddEvent(EventType.pos, t, x, y, ct); } else { obj.AddEvent(EventType.pos, t, x, y, ct, r, (float)rx, ry, (float)rz); } } foreach (var Event in sca) { Easing ct = Easing.Linear; Easing.TryParse((string)Event["ct"], out ct); float t = (float)Event["t"], x = (float)Event["x"]; float?y = (float?)Event["y"]; y ??= 0; RandomMode r = RandomMode.None; RandomMode.TryParse((string)Event["r"], out r); float?rx = (int?)Event["rx"]; float?ry = (int?)Event["ry"]; float?rz = (int?)Event["rz"]; if (r == RandomMode.None) { obj.AddEvent(EventType.sca, t, x, y, ct); } else { obj.AddEvent(EventType.sca, t, x, y, ct, r, (float)rx, ry, (float)rz); } } foreach (var Event in rot) { Easing ct = Easing.Linear; Easing.TryParse((string)Event["ct"], out ct); float t = (float)Event["t"], x = (float)Event["x"]; float?y = (float?)Event["y"]; y ??= 0; RandomMode r = RandomMode.None; RandomMode.TryParse((string)Event["r"], out r); float?rx = (int?)Event["rx"]; float?rz = (int?)Event["rz"]; if (r == RandomMode.None) { obj.AddEvent(EventType.rot, t, x, y, ct); } else { obj.AddEvent(EventType.rot, t, x, y, ct, r, (float)rx, null, (float)rz); } } foreach (var Event in col) { Easing ct = Easing.Linear; Easing.TryParse((string)Event["ct"], out ct); float t = (float)Event["t"], x = (float)Event["x"]; float?y = (float?)Event["y"]; y ??= 0; obj.AddEvent(EventType.col, t, x, y, ct); } objects.Add(obj); } if (objects.Count > 1) { return(objects); } return(objects[0]); } }