private SetColorCommand DeserializeColorTag(ParsedTag tag) { string index = tag.GetAttribute("index"); var bytes = BinaryUtils.HexStrToBytes(index); return(new SetColorCommand(SC3ExpressionParser.ParseExpression(bytes))); }
private SC3StringSegment NextSegment(Scanner scanner) { byte peek = scanner.PeekByte(); switch (peek) { case StringSegmentCodes.LineBreak: scanner.Advance(); return(new Marker(MarkerKind.LineSeperator)); case StringSegmentCodes.CharacterName: scanner.Advance(); return(new Marker(MarkerKind.CharacterName)); case StringSegmentCodes.DialogueLine: scanner.Advance(); return(new Marker(MarkerKind.DialogueLine)); case StringSegmentCodes.RubyBase: scanner.Advance(); return(new Marker(MarkerKind.RubyBase)); case StringSegmentCodes.RubyTextStart: scanner.Advance(); return(new Marker(MarkerKind.RubyTextStart)); case StringSegmentCodes.RubyTextEnd: scanner.Advance(); return(new Marker(MarkerKind.RubyTextEnd)); case StringSegmentCodes.NameAndCode: scanner.Advance(); return(new Marker(MarkerKind.NameAndCode)); case StringSegmentCodes.TempMarker: scanner.Advance(); return(new Marker(MarkerKind.TempMarker)); case StringSegmentCodes.SetColor: scanner.Advance(); var colorIndex = SC3ExpressionParser.ParseExpression(scanner.Reader); return(new SetColorCommand(colorIndex)); case StringSegmentCodes.SetFontSize: scanner.Advance(); int fontSize = scanner.Reader.ReadInt16(); return(new SetFontSizeCommand(fontSize)); case StringSegmentCodes.SetAlignment_Center: scanner.Advance(); return(new CenterTextCommand()); case StringSegmentCodes.SetTopMargin: scanner.Advance(); int topMargin = scanner.Reader.ReadInt16(); return(new SetMarginCommand(null, topMargin)); case StringSegmentCodes.SetLeftMargin: scanner.Advance(); int leftMargin = scanner.Reader.ReadInt16(); return(new SetMarginCommand(leftMargin, null)); case StringSegmentCodes.EvaluateExpression: scanner.Advance(); var expression = SC3ExpressionParser.ParseExpression(scanner.Reader); return(new EvaluateExpressionCommand(expression)); case StringSegmentCodes.Present: scanner.Advance(); return(new PresentCommand(resetTextAlignment: false)); case StringSegmentCodes.Present_ResetAlignment: scanner.Advance(); return(new PresentCommand(resetTextAlignment: true)); default: peek = scanner.PeekByte(); if (IsCharacter(peek)) { string value = DecodeCharacters(scanner); return(new TextSegment(value)); } else { throw ExceptionUtils.SC3String_UnexpectedByte(peek); } } }