示例#1
0
        public override Element Deserialize(string[] split)
        {
            if (split.Length == 6 || split.Length == 9)
            {
                var type      = ElementTypeSign.Parse(split[0]);
                var layerType = (LayerType)Enum.Parse(typeof(LayerType), split[1]);
                var origin    = (OriginType)Enum.Parse(typeof(OriginType), split[2]);
                var path      = split[3].Trim('\"');
                var defX      = float.Parse(split[4]);
                var defY      = float.Parse(split[5]);

                float zDistance = 1;
                int   cameraId  = 0;
                if (split.Length == 9)
                {
                    cameraId  = int.Parse(split[6]);
                    zDistance = float.TryParse(split[7], out var result) ? result : 1f;
                    var absolute = int.Parse(split[8]) != 0;
                    if (absolute)
                    {
                        throw new NotImplementedException("Absolute mode currently is not supported.");
                    }
                }

                return(new Element(type, layerType, origin, path, defX, defY)
                {
                    ZDistance = zDistance,
                    CameraId = cameraId
                });
            }

            throw new ArgumentOutOfRangeException();
        }
示例#2
0
        public static async Task <string> SerializeObjectAsync(EventContainer element)
        {
            var sb             = new StringBuilder();
            var subjectHandler = Register.GetSubjectHandler(ElementTypeSign.GetString(element.Type));

            if (subjectHandler == null)
            {
                Console.WriteLine(
                    $"Cannot find subject handler for `{ElementTypeSign.GetString(element.Type)}`: Skipped.");
                return("");
            }

            try
            {
                var text = subjectHandler.Serialize(element);
                sb.AppendLine(text);
            }
            catch (Exception ex)
            {
                Console.WriteLine(
                    $"Error while serializing element: `{ElementTypeSign.GetString(element.Type)}`\r\n{ex}");
                return("");
            }

            foreach (var commonEvent in element.EventList)
            {
                var actionHandler = subjectHandler.GetActionHandler(commonEvent.EventType.Flag);
                if (actionHandler == null)
                {
                    Console.WriteLine($"Cannot find action handler for `{commonEvent.EventType.Flag}`: Skipped.");
                    continue;
                }

                try
                {
                    var result = " " + actionHandler.Serialize(commonEvent);
                    sb.AppendLine(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error while serializing action: `{commonEvent.EventType.Flag}`\r\n{ex}");
                }
            }

            //else
            //{
            //    Console.WriteLine($"Unknown type of EventContainer: `{element.ToOsbString()}`");
            //}

            return(sb.ToString().TrimEnd('\n', '\r'));
        }
示例#3
0
        public override Camera2Element Deserialize(string[] split)
        {
            if (split.Length >= 1)
            {
                var type     = ElementTypeSign.Parse(split[0]);
                int cameraId = 0;
                if (split.Length >= 2)
                {
                    cameraId = int.Parse(split[1]);
                }

                return(new Camera2Element(type)
                {
                    CameraId = cameraId
                });
            }

            throw new ArgumentOutOfRangeException();
        }
示例#4
0
        public override AnimatedElement Deserialize(string[] split)
        {
            if (split.Length == 8 || split.Length == 9 || split.Length == 12)
            {
                var type       = ElementTypeSign.Parse(split[0]);
                var layerType  = (LayerType)Enum.Parse(typeof(LayerType), split[1]);
                var origin     = (OriginType)Enum.Parse(typeof(OriginType), split[2]);
                var path       = split[3].Trim('\"');
                var defX       = float.Parse(split[4]);
                var defY       = float.Parse(split[5]);
                var frameCount = int.Parse(split[6]);
                var frameDelay = float.Parse(split[7]);
                var loopType   = split.Length == 9
                    ? (LoopType)Enum.Parse(typeof(LoopType), split[8])
                    : LoopType.LoopForever;

                float zDistance = 1;
                int   cameraId  = 0;
                if (split.Length == 11)
                {
                    cameraId  = int.Parse(split[9]);
                    zDistance = int.TryParse(split[10], out var result) ? result : 1;
                    var absolute = int.Parse(split[11]) != 0;
                    if (absolute)
                    {
                        throw new NotImplementedException("Absolute mode currently is not supported.");
                    }
                }

                return(new AnimatedElement(type, layerType, origin, path, defX, defY, frameCount, frameDelay, loopType)
                {
                    ZDistance = zDistance,
                    CameraId = cameraId
                });
            }

            throw new ArgumentOutOfRangeException();
        }
示例#5
0
 static Camera2Element()
 {
     ElementTypeSign.SignType(99, "Camera2");
 }
示例#6
0
 static Camera2Handler()
 {
     ElementTypeSign.SignType(99, "Camera2");
 }
示例#7
0
        public static async Task <ElementManager> DeserializeObjectAsync(TextReader reader)
        {
            ISubjectParsingHandler lastSubjectHandler = null;
            EventContainer         lastSubject        = null;
            //int lastDeep = 0;
            var line = await reader.ReadLineAsync();

            int l = 0;

            var em = new ElementManager();

            while (line != null)
            {
                if (line.StartsWith("//") || line.StartsWith("[") && line.EndsWith("]"))
                {
                }
                else
                {
                    var split = line.Split(',');
                    var mahou = split[0].TrimStart();
                    var deep  = split[0].Length - mahou.Length;
                    if (deep == 0)
                    {
                        var handler = Register.GetSubjectHandler(mahou);
                        if (handler == null && int.TryParse(mahou, out var flag))
                        {
                            var magicWord = ElementTypeSign.GetString(flag);
                            if (magicWord != null)
                            {
                                handler = Register.GetSubjectHandler(magicWord);
                            }
                        }

                        if (handler != null)
                        {
                            try
                            {
                                var subject = handler.Deserialize(split);
                                var eg      = em.GetOrAddGroup(subject.ZDistance);
                                eg.AddSubject(subject);

                                lastSubject = subject;
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine($"Error while parsing subject. L {l}: `{line}`\r\n{ex}");
                                lastSubject = null;
                                handler     = null;
                            }
                        }
                        else
                        {
                            Console.WriteLine($"Cannot find subject handler. L {l}: `{line}`");
                        }

                        lastSubjectHandler = handler;
                    }
                    else if (deep == 1)
                    {
                        if (lastSubjectHandler != null)
                        {
                            var actHandler = lastSubjectHandler.GetActionHandler(mahou);
                            if (actHandler != null)
                            {
                                try
                                {
                                    var action = actHandler.Deserialize(split);
                                    lastSubject.ApplyAction(action);
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine($"Error while parsing action. L {l}: `{line}`\r\n{ex}");
                                }
                            }
                            else
                            {
                                Console.WriteLine($"Cannot find action handler. L {l}: `{line}`");
                            }
                        }
                        else
                        {
                            Console.WriteLine($"Current subject is null, skipped. L {l}: `{line}`");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Unknown deep {deep}. L {l}: `{line}`");
                    }
                }

                //var deepMinus = deep - lastDeep;

                //lastDeep = deep;
                //if (deepMinus < 0)
                //{
                //    while (expression)
                //    {
                //        stack.pop;
                //    }
                //}


                line = await reader.ReadLineAsync();

                l++;
            }

            return(em);
            //var count = Environment.ProcessorCount - 1;
            //var locks = new SemaphoreSlim(count, count);
            //var strLock = new object();

            //bool isFinished = false;
            //var str = await reader.ReadLineAsync();
            //if (str != null)
            //{

            //}

            //while (true)
            //{
            //    lock (strLock)
            //    {
            //        if (isFinished) break;
            //    }

            //    var inStr = await reader.ReadLineAsync();

            //    if (inStr == null)
            //    {
            //        lock (strLock)
            //        {
            //            isFinished = true;
            //        }
            //    }
            //    else
            //    {

            //    }
            //}

            //while (locks.CurrentCount != count)
            //{
            //    await Task.Delay(1);
            //}
        }