public void Save(Stream stream, bool leaveOpen) { using (var writer = new ResourceWriter(stream, leaveOpen)) { if (ResourceType == ResourceType.AnimationPack) { // For AnimationPacks we write a model file header, and then a chunk containing the pack data. writer.WriteFileHeader(ResourceFileIdentifier.Model, Version, ResourceType.Model); writer.WriteResourceChunk(this); return; } writer.WriteFileHeader(ResourceFileIdentifier.Model, Version, ResourceType); switch (ResourceType) { case ResourceType.Epl: // We have to write this to the file so we can remember it when we load it. writer.WriteBoolean((( Epl )this).IncludesProperties); break; } Write(writer); } }
internal override void Write(ResourceWriter writer) { writer.WriteInt32(Field140); writer.WriteSingle(Field13C); writer.WriteSingle(Field138); writer.WriteSingle(Field134); writer.WriteSingle(Field130); writer.WriteInt32(Entry1List.Count); writer.WriteInt32(Entry2List.Count); writer.WriteInt32(Entry3List.Count); foreach (var entry in Entry1List) { writer.WriteSingle(entry.Field34); writer.WriteSingle(entry.Field38); if (Version > 0x1104120) { writer.WriteSingle(entry.Field3C); writer.WriteSingle(entry.Field40); } if (entry.NodeName != null) { writer.WriteBoolean(true); writer.WriteStringWithHash(Version, entry.NodeName); } else { writer.WriteBoolean(false); writer.WriteSingle(entry.Field10); writer.WriteSingle(entry.Field08); writer.WriteSingle(entry.Field04); } } foreach (var entry in Entry2List) { writer.WriteInt16(entry.Field94); if (entry.Field94 == 0) { writer.WriteSingle(entry.Field84); } else if (entry.Field94 == 1) { writer.WriteSingle(entry.Field84); writer.WriteSingle(entry.Field88); } writer.WriteMatrix4x4(entry.Field8C); if (entry.NodeName != null) { writer.WriteBoolean(true); writer.WriteStringWithHash(Version, entry.NodeName); } else { writer.WriteBoolean(false); } } foreach (var entry in Entry3List) { writer.WriteSingle(entry.Field00); writer.WriteSingle(entry.Field04); if (Version <= 0x1104120) { writer.WriteInt16(entry.Field0C); writer.WriteInt16(entry.Field0E); } else { writer.WriteSingle(entry.Field08); writer.WriteInt16(entry.Field0C); writer.WriteInt16(entry.Field0E); } } }
protected override void WriteCore(ResourceWriter writer) { writer.WriteInt32(Count); foreach (var property in Values) { writer.WriteInt32(( int )property.ValueType); writer.WriteStringWithHash(Version, property.Name); switch (property.ValueType) { case UserPropertyValueType.Int: writer.WriteInt32(4); writer.WriteInt32(property.GetValue <int>()); break; case UserPropertyValueType.Float: writer.WriteInt32(4); writer.WriteSingle(property.GetValue <float>()); break; case UserPropertyValueType.Bool: writer.WriteInt32(1); writer.WriteBoolean(property.GetValue <bool>()); break; case UserPropertyValueType.String: { var value = property.GetValue <string>(); writer.WriteInt32(value.Length + 1); writer.WriteStringRaw(value); } break; case UserPropertyValueType.ByteVector3: writer.WriteInt32(3); writer.WriteByteVector3(property.GetValue <ByteVector3>()); break; case UserPropertyValueType.ByteVector4: writer.WriteInt32(4); writer.WriteByteVector4(property.GetValue <ByteVector4>()); break; case UserPropertyValueType.Vector3: writer.WriteInt32(12); writer.WriteVector3(property.GetValue <Vector3>()); break; case UserPropertyValueType.Vector4: writer.WriteInt32(16); writer.WriteVector4(property.GetValue <Vector4>()); break; case UserPropertyValueType.ByteArray: { var value = property.GetValue <byte[]>(); writer.WriteInt32(value.Length); writer.WriteBytes(value); } break; default: throw new InvalidOperationException($"Unknown node property type: {property.ValueType}"); } } }