Example #1
0
        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()));
        }
Example #2
0
        /// <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]);
            }
        }