private uint GetFieldDataOrOffset(GffField f) { if (GffComponent.IsSimple(f.Type)) { var lB = f.Bytes; if (lB.Length < 4) { Array.Resize(ref lB, 4); } return(BitConverter.ToUInt32(lB, 0)); } var br = new LatinBinaryWriter(_gb.FieldDataBlock); var pos = _gb.FieldDataBlock.Position; switch (f.Type) { case GffType.ResRef: br.Write((byte)f.Bytes.Length); break; case GffType.CExoString: case GffType.CExoLocString: case GffType.Void: br.Write((uint)f.Bytes.Length); break; } br.Write(f.Bytes); return((uint)pos); }
public void GExoLocStringParseTest() { const string byteString = "FFFFFFFF0100000000000000110000004C796F6E202D20506F727465204E6F7264"; const string valueString = "-1||0=Lyon - Porte Nord"; var fld = new GffField("test", GffType.CExoLocString, HexaManip.StringToByteArray(byteString)); var aExlocstr = new GffExoLocStringReader(); aExlocstr.Parse(fld); var expValueString = aExlocstr.TextValue; aExlocstr.Parse(valueString); var expByteString = HexaManip.ByteArrayToString(aExlocstr.ByteArray); Assert.AreEqual(expValueString, valueString); Assert.AreEqual(expByteString, byteString); }
private GffComponent CreateComponent(XmlNode node) { GffComponent cpnt = null; switch (node.Name) { case EStruct: switch (GetStructClass(node)) { case SclassInField: cpnt = new GffInFieldStruct(GetLabel(node), GetStructType(node)); break; case SclassInList: cpnt = new GffInListStruct(GetStructType(node)); break; case SclassRoot: cpnt = new GffRootStruct(GetExtention(node)); break; } break; case EList: cpnt = new GffList(GetLabel(node)); break; case EField: cpnt = new GffField(GetLabel(node), GetFieldType(node), GetFieldValue(node)); break; } var composite = cpnt as GffComposite; if (composite == null) { return(cpnt); } var cpsit = composite; foreach (XmlNode child in node.ChildNodes) { cpsit.Add(CreateComponent(child)); } return(cpnt); }
public GffExoLocField(GffField field) : base(field.Label, field.Type, field.Value) { ValueReader = field.ValueReader as GffExoLocStringReader; }
public void Parse(GffField field) { _c = LatinEncoding.Latin1.GetChars(field.Bytes)[0]; }
public void Parse(GffField field) { _value = field.Bytes[0]; }
public void Parse(GffField field) { _resref = new ResRef(LatinEncoding.Latin1.GetString(field.Bytes)); }
public void Parse(GffField field) { TextValue = LatinEncoding.Latin1.GetString(field.Bytes); }