예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
        }
예제 #4
0
 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)
     });
 }
예제 #6
0
 internal static W3xContainer Parse(BinaryReader reader, AssetImportCollection imports)
 {
     return(new W3xContainer
     {
         Hierarchy = imports.GetImportedData <W3xHierarchy>(reader),
         SubObjects = reader.ReadArrayAtOffset(() => W3xSubObject.Parse(reader, imports))
     });
 }
예제 #7
0
        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);
        }
예제 #9
0
 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)),
     });
 }
예제 #10
0
        }                                                   // 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
            });
        }
예제 #11
0
        internal static AudioVoiceReferentialEntry ParseAsset(BinaryReader reader, AssetImportCollection imports)
        {
            var result = new AudioVoiceReferentialEntry();

            ParseAsset(reader, result, imports);

            result.Name = reader.ReadUInt32PrefixedAsciiStringAtOffset();

            return(result);
        }
예제 #12
0
        internal static AudioVoiceEntry ParseAsset(BinaryReader reader, AssetImportCollection imports)
        {
            var result = new AudioVoiceEntry();

            ParseAsset(reader, result, imports);

            result.AudioType = reader.ReadUInt32AsEnum <ThingTemplateVoiceType>();

            return(result);
        }
예제 #13
0
        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);
        }
예제 #14
0
        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);
        }
예제 #15
0
        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()
            });
        }
예제 #16
0
        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);
        }
예제 #17
0
        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);
        }
예제 #18
0
        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);
        }
예제 #19
0
        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);
        }
예제 #20
0
        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));
        }
예제 #21
0
        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));
        }
예제 #22
0
        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));
        }
예제 #23
0
        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));
        }
예제 #24
0
 public abstract object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context);
예제 #25
0
 public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context)
 {
     return(W3xBox.Parse(reader));
 }
예제 #26
0
 public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context)
 {
     return(DialogEvent.ParseAsset(reader, asset, imports));
 }
예제 #27
0
        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));
        }
예제 #28
0
 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());
 }
예제 #29
0
 public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context)
 {
     return(AudioFile.ParseAsset(reader, asset));
 }
예제 #30
0
 public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context)
 {
     return(CrowdResponse.ParseAsset(reader, asset, imports));
 }