public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { // TODO: Create ModelMesh object here. var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(null); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var twelve = reader.ReadUInt32(); if (twelve != 12) { throw new InvalidDataException(); } reader.ReadUInt32(); // Length var ddsFile = DdsFile.FromStream(reader.BaseStream); var result = context.GraphicsDevice.CreateStaticTexture2D( ddsFile.Header.Width, ddsFile.Header.Height, ddsFile.ArraySize, ddsFile.MipMaps, ddsFile.PixelFormat, ddsFile.Dimension == DdsTextureDimension.TextureCube); result.Name = asset.Name; return(new Graphics.TextureAsset(result, asset)); }
internal static W3xMesh Parse(BinaryReader reader, AssetImportCollection imports, AssetEntry header) { var result = new W3xMesh { VertexData = reader.ReadAtOffset(() => W3xMeshVertexData.Parse(reader, header)), GeometryType = reader.ReadUInt32AsEnum <MeshGeometryType>(), BoundingBox = new AxisAlignedBoundingBox(reader.ReadVector3(), reader.ReadVector3()) }; var sphereRadius = reader.ReadSingle(); var sphereCenter = reader.ReadVector3(); result.BoundingSphere = new BoundingSphere(sphereCenter, sphereRadius); result.Triangles = reader.ReadArrayAtOffset(() => W3xTriangle.Parse(reader)); result.FXShader = FXShaderMaterial.Parse(reader, imports); result.AabTree = reader.ReadAtOffset(() => W3xAabTree.Parse(reader)); result.Hidden = reader.ReadBooleanChecked(); result.CastShadow = reader.ReadBooleanChecked(); result.SortLevel = reader.ReadByte(); return(result); }
internal static AudioFileWithWeight ParseAsset(BinaryReader reader, AssetImportCollection imports) { return(new AudioFileWithWeight { AudioFile = new LazyAssetReference <AudioFile>(imports.GetImportedData <AudioFile>(reader)), Weight = reader.ReadUInt32() }); }
internal static Threshold ParseAsset(BinaryReader reader, AssetImportCollection imports) { return(new Threshold { NumUnits = reader.ReadInt32(), AudioArrayVoice = AudioArrayVoice.ParseAsset(reader, imports) }); }
internal static W3xContainer Parse(BinaryReader reader, AssetImportCollection imports) { return(new W3xContainer { Hierarchy = imports.GetImportedData <W3xHierarchy>(reader), SubObjects = reader.ReadArrayAtOffset(() => W3xSubObject.Parse(reader, imports)) }); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var result = AudioSettings.ParseAsset(reader, asset); context.AssetStore.AudioSettings.Current = result; return(result); }
internal static FXShaderConstant Parse(BinaryReader reader, AssetImportCollection imports) { var result = new FXShaderConstant { Type = reader.ReadUInt32AsEnum <FXShaderConstantType>(), Name = reader.ReadUInt32PrefixedAsciiStringAtOffset() }; var value = new W3dShaderMaterialPropertyValue(); switch (result.Type) { case FXShaderConstantType.Float: var values = reader.ReadArrayAtOffset(() => reader.ReadSingle()); result.FloatValueCount = (uint)values.Length; switch (values.Length) { case 1: value.Float = values[0]; break; case 2: value.Vector2 = new Vector2(values[0], values[1]); break; case 3: value.Vector3 = new Vector3(values[0], values[1], values[2]); break; case 4: value.Vector4 = new Vector4(values[0], values[1], values[2], values[3]); break; default: throw new InvalidDataException(); } break; case FXShaderConstantType.Bool: value.Bool = reader.ReadBooleanChecked(); break; case FXShaderConstantType.Int: value.Int = reader.ReadInt32(); break; case FXShaderConstantType.Texture: result.TextureValue = imports.GetImportedData <TextureAsset>(reader); break; default: throw new InvalidDataException(); } result.Value = value; return(result); }
internal static AudioArrayVoice ParseAsset(BinaryReader reader, AssetImportCollection imports) { return(new AudioArrayVoice { AudioEntries = reader.ReadListAtOffset(() => AudioVoiceEntry.ParseAsset(reader, imports)), ObjectSpecificEntries = reader.ReadArrayAtOffset(() => AudioObjectSpecificVoiceEntry.ParseAsset(reader, imports)), NamedEntries = reader.ReadArrayAtOffset(() => AudioVoiceReferentialEntry.ParseAsset(reader, imports)), }); }
} // TODO: Could also be W3xBox internal static W3xSubObject Parse(BinaryReader reader, AssetImportCollection imports) { return(new W3xSubObject { BoneIndex = reader.ReadUInt32(), Name = reader.ReadUInt32PrefixedAsciiStringAtOffset(), RenderObject = imports.GetImportedData <ModelMesh>(reader).Value }); }
internal static AudioVoiceReferentialEntry ParseAsset(BinaryReader reader, AssetImportCollection imports) { var result = new AudioVoiceReferentialEntry(); ParseAsset(reader, result, imports); result.Name = reader.ReadUInt32PrefixedAsciiStringAtOffset(); return(result); }
internal static AudioVoiceEntry ParseAsset(BinaryReader reader, AssetImportCollection imports) { var result = new AudioVoiceEntry(); ParseAsset(reader, result, imports); result.AudioType = reader.ReadUInt32AsEnum <ThingTemplateVoiceType>(); return(result); }
internal static CrowdResponse ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var result = new CrowdResponse { Weight = reader.ReadInt32(), Thresholds = reader.ReadListAtOffset(() => Threshold.ParseAsset(reader, imports)) }; result.SetNameAndInstanceId(asset); return(result); }
internal static MusicTrack ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var result = new MusicTrack(); result.SetNameAndInstanceId(asset); ParseAsset(reader, result); result.File = new LazyAssetReference <AudioFile>(imports.GetImportedData <AudioFile>(reader)); return(result); }
internal static FXShaderMaterial Parse(BinaryReader reader, AssetImportCollection imports) { return(new FXShaderMaterial { ShaderName = reader.ReadUInt32PrefixedAsciiStringAtOffset(), TechniqueName = reader.ReadUInt32PrefixedAsciiStringAtOffset(), Constants = reader.ReadArrayAtOffset(() => FXShaderConstant.Parse(reader, imports), true), TechniqueIndex = reader.ReadUInt32() }); }
internal static DialogEvent ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var result = new DialogEvent(); result.SetNameAndInstanceId(asset); ParseAsset(reader, result); result.File = imports.GetImportedData <AudioFile>(reader); return(result); }
internal static MappedImage ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var texture = imports.GetImportedData <TextureAsset>(reader); var dimensions = reader.ReadPoint2D(); var coords = reader.ReadPoint2D(); var textureDimensions = reader.ReadPoint2D(); var rotated = reader.ReadBooleanChecked(); var result = new MappedImage(); result.SetNameAndInstanceId(asset); return(result); }
internal static AudioEvent ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var result = new AudioEvent(); result.SetNameAndInstanceId(asset); ParseAsset(reader, result); result.Attack = reader.ReadArrayAtOffset(() => new LazyAssetReference <AudioFileWithWeight>(AudioFileWithWeight.ParseAsset(reader, imports))); result.Sounds = reader.ReadArrayAtOffset(() => new LazyAssetReference <AudioFileWithWeight>(AudioFileWithWeight.ParseAsset(reader, imports))); result.Decay = reader.ReadArrayAtOffset(() => new LazyAssetReference <AudioFileWithWeight>(AudioFileWithWeight.ParseAsset(reader, imports))); return(result); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(W3xMesh.Parse(reader, imports, asset.Header)); //var effectName = shaderName.Replace(".fx", string.Empty); //var effect = context.EffectLibrary.GetEffect( // shaderName, // vertexDescriptors); //// TODO: Extract state properties from shader material. //var rasterizerState = RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise; //var depthState = DepthStencilStateDescription.DepthOnlyLessEqual; //var blendState = BlendStateDescription.SingleDisabled; //var material = new ShaderMaterial(context.EffectLibrary, effect) //{ // PipelineState = new EffectPipelineState( // rasterizerState, // depthState, // blendState, // RenderPipeline.GameOutputDescription) //}; //var materialPasses = new ModelMeshMaterialPass[1]; //materialPasses[0] = new ModelMeshMaterialPass( // context.GraphicsDevice, // null, // new ModelMeshPart[] // { // new ModelMeshPart(0, (uint) indices.Length, material) // }); //return new ModelMesh( // context.GraphicsDevice, // asset.Name, // vertexData, // indices, // effect, // materialPasses, // false, // isSkinned, // null, // parentBone, // 0, // numBones, // boundingBox, // hidden, // geometryType == MeshGeometryType.CameraOriented); }
internal static Model ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports) { var hierarchy = imports.GetImportedData <ModelBoneHierarchy>(reader).Value; var subObjects = reader.ReadArrayAtOffset(() => W3xSubObject.Parse(reader, imports)); var modelSubObjects = new ModelSubObject[subObjects.Length]; for (var i = 0; i < subObjects.Length; i++) { var subObject = subObjects[i]; modelSubObjects[i] = new ModelSubObject( subObject.Name, hierarchy.Bones[subObject.BoneIndex], subObject.RenderObject); } return(new Model(asset, hierarchy, modelSubObjects)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var hierarchy = imports.GetImportedData <ModelBoneHierarchy>(reader); var subObjects = reader.ReadArrayAtOffset(() => W3xSubObject.Parse(reader, imports)); var modelSubObjects = new ModelSubObject[subObjects.Length]; for (var i = 0; i < subObjects.Length; i++) { var subObject = subObjects[i]; modelSubObjects[i] = new ModelSubObject( subObject.Name, hierarchy.Bones[subObject.BoneIndex], subObject.RenderObject); } return(new Model(asset, hierarchy, modelSubObjects)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var w3xHierarchy = W3xHierarchy.Parse(reader, asset.Header); var bones = new ModelBone[w3xHierarchy.Pivots.Length]; for (var i = 0; i < w3xHierarchy.Pivots.Length; i++) { var w3xPivot = w3xHierarchy.Pivots[i]; bones[i] = new ModelBone( i, w3xPivot.Name, w3xPivot.ParentIdx != -1 ? bones[w3xPivot.ParentIdx] : null, w3xPivot.Translation, w3xPivot.Rotation); } return(new ModelBoneHierarchy(asset, bones)); }
internal static ModelMesh ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports, AssetParseContext context) { var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(new ModelMesh(w3xMesh, asset, context.AssetStore.LoadContext)); }
public abstract object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context);
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(W3xBox.Parse(reader)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(DialogEvent.ParseAsset(reader, asset, imports)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(new ModelMesh(w3xMesh, asset, context.AssetStore.LoadContext)); }
private protected static void ParseAsset <T>(BinaryReader reader, T asset, AssetImportCollection imports) where T : SoundOrEvaEvent { asset.Sound = reader.ReadOptionalClassTypedValueAtOffset(() => imports.GetImportedData <BaseAudioEventInfo>(reader)); asset.EvaEvent = reader.ReadOptionalClassTypedValueAtOffset(() => reader.ReadUInt32PrefixedAsciiString()); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(AudioFile.ParseAsset(reader, asset)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(CrowdResponse.ParseAsset(reader, asset, imports)); }