public static FFXIIITextTag TryRead(byte[] bytes, ref int offset, ref int left) { FFXIIITextTagCode code = (FFXIIITextTagCode)bytes[offset++]; left -= 2; switch (code) { case FFXIIITextTagCode.End: case FFXIIITextTagCode.Escape: case FFXIIITextTagCode.Italic: case FFXIIITextTagCode.Many: case FFXIIITextTagCode.Article: case FFXIIITextTagCode.ArticleMany: left++; return(new FFXIIITextTag(code)); case FFXIIITextTagCode.Icon: return(new FFXIIITextTag(code, (FFXIIITextTagIcon)bytes[offset++])); case FFXIIITextTagCode.VarF4: case FFXIIITextTagCode.VarF6: case FFXIIITextTagCode.VarF7: return(new FFXIIITextTag(code, (FFXIIITextTagParam)bytes[offset++])); case FFXIIITextTagCode.Text: return(new FFXIIITextTag(code, (FFXIIITextTagText)bytes[offset++])); case FFXIIITextTagCode.Key: return(new FFXIIITextTag(code, (FFXIIITextTagKey)bytes[offset++])); case FFXIIITextTagCode.Color: return(new FFXIIITextTag(code, (FFXIIITextTagColor)bytes[offset++])); default: int value = (int)code; switch (value) { case 0x81: case 0x85: left += 2; offset--; return(null); } if (value >= 0x80) { return(new FFXIIITextTag(code, (FFXIIITextTagColor)bytes[offset++])); } left += 2; offset--; return(null); } }
public FFXIIITextTag(FFXIIITextTagCode code, Enum param = null) { Code = code; Param = param; }