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(); }
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')); }
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(); }
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(); }
static Camera2Element() { ElementTypeSign.SignType(99, "Camera2"); }
static Camera2Handler() { ElementTypeSign.SignType(99, "Camera2"); }
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); //} }