Esempio n. 1
0
        private void UpdateTransform(BxlytTextureTransform transform)
        {
            transform.Scale = new Syroot.Maths.Vector2F(
                scaleXUD.Value, scaleYUD.Value);

            transform.Translate = new Syroot.Maths.Vector2F(
                transXUD.Value, transYUD.Value);

            transform.Rotate = rotUD.Value;
        }
Esempio n. 2
0
        public Material()
        {
            TextureMaps       = new TextureRef[0];
            TextureTransforms = new BxlytTextureTransform[0];
            TexCoordGens      = new TexCoordGen[0];
            TevStages         = new TevStage[0];
            ProjTexGenParams  = new ProjectionTexGenParam[0];

            BlackColor = new STColor8(0, 0, 0, 0);
            WhiteColor = STColor8.White;
        }
Esempio n. 3
0
        public Material(string name, BxlytHeader header)
        {
            ParentLayout      = header;
            Name              = name;
            TextureMaps       = new TextureRef[0];
            TextureTransforms = new BxlytTextureTransform[0];
            TexCoordGens      = new TexCoordGen[0];
            TevStages         = new TevStage[0];
            ProjTexGenParams  = new ProjectionTexGenParam[0];

            BlackColor = new STColor8(0, 0, 0, 0);
            WhiteColor = STColor8.White;
        }
Esempio n. 4
0
        public Material()
        {
            TextureMaps       = new TextureRef[0];
            TextureTransforms = new BxlytTextureTransform[0];
            TextureMaps       = new TextureRef[0];
            TextureTransforms = new BxlytTextureTransform[0];
            ProjTexGenParams  = new ProjectionTexGenParam[0];
            TevStages         = new TevStage[0];
            TexCoordGens      = new TexCoordGen[0];

            TevConstantColors = new STColor8[5];
            for (int i = 0; i < 5; i++)
            {
                TevConstantColors[i] = STColor8.White;
            }
            BlackColor = new STColor8(0, 0, 0, 0);
            WhiteColor = STColor8.White;
        }
Esempio n. 5
0
 public Material(string name, BxlytHeader header)
 {
     ParentLayout          = header;
     Name                  = name;
     TextureMaps           = new TextureRef[0];
     TextureTransforms     = new BxlytTextureTransform[0];
     TexCoordGens          = new List <TexCoordGenEntry>();
     IndirectTexTransforms = new List <BxlytTextureTransform>();
     IndirectStages        = new List <IndirectStage>();
     TevSwapModeTable      = new TevSwapModeTable();
     ChanControl           = new ChanCtrl();
     BlackColor            = new STColor8(0, 0, 0, 0);
     WhiteColor            = STColor8.White;
     ColorRegister3        = STColor8.White;
     TevColor1             = STColor8.White;
     TevColor2             = STColor8.White;
     TevColor3             = STColor8.White;
     TevColor4             = STColor8.White;
     TevStages             = new TevStage[0];
     BlendMode             = new BxlytBlendMode();
     AlphaCompare          = new AlphaCompare();
 }
Esempio n. 6
0
        public Material(FileReader reader, Header header) : base()
        {
            ParentLayout = header;

            Name = reader.ReadString(0x1C, true);
            Name = Name.Replace("\x01", string.Empty);
            Name = Name.Replace("\x04", string.Empty);

            if (header.VersionMajor >= 8)
            {
                flags      = reader.ReadUInt32();
                unknown    = reader.ReadInt32();
                BlackColor = STColor8.FromBytes(reader.ReadBytes(4));
                WhiteColor = STColor8.FromBytes(reader.ReadBytes(4));
            }
            else
            {
                BlackColor = STColor8.FromBytes(reader.ReadBytes(4));
                WhiteColor = STColor8.FromBytes(reader.ReadBytes(4));
                flags      = reader.ReadUInt32();
            }

            uint texCount         = Convert.ToUInt32(flags & 3);
            uint mtxCount         = Convert.ToUInt32(flags >> 2) & 3;
            uint texCoordGenCount = Convert.ToUInt32(flags >> 4) & 3;
            uint tevStageCount    = Convert.ToUInt32(flags >> 6) & 0x7;

            EnableAlphaCompare = Convert.ToBoolean((flags >> 9) & 0x1);
            EnableBlend        = Convert.ToBoolean((flags >> 10) & 0x1);
            var useTextureOnly = Convert.ToBoolean((flags >> 11) & 0x1);

            EnableBlendLogic = Convert.ToBoolean((flags >> 12) & 0x1);
            EnableIndParams  = Convert.ToBoolean((flags >> 14) & 0x1);
            var projTexGenParamCount = Convert.ToUInt32((flags >> 15) & 0x3);

            EnableFontShadowParams = Convert.ToBoolean((flags >> 17) & 0x1);
            AlphaInterpolation     = Convert.ToBoolean((flags >> 18) & 0x1);


            Console.WriteLine($"MAT1 {Name}");
            Console.WriteLine($"texCount {texCount}");
            Console.WriteLine($"mtxCount {mtxCount}");
            Console.WriteLine($"texCoordGenCount {texCoordGenCount}");
            Console.WriteLine($"tevStageCount {tevStageCount}");
            Console.WriteLine($"hasAlphaCompare {EnableAlphaCompare}");
            Console.WriteLine($"hasBlendMode {EnableBlend}");
            Console.WriteLine($"useTextureOnly {useTextureOnly}");
            Console.WriteLine($"seperateBlendMode {EnableBlendLogic}");
            Console.WriteLine($"hasIndParam {EnableIndParams}");
            Console.WriteLine($"projTexGenParamCount {projTexGenParamCount}");
            Console.WriteLine($"hasFontShadowParam {EnableFontShadowParams}");
            Console.WriteLine($"AlphaInterpolation {AlphaInterpolation}");


            TextureMaps       = new TextureRef[texCount];
            TextureTransforms = new BxlytTextureTransform[mtxCount];
            TexCoordGens      = new TexCoordGen[texCoordGenCount];
            TevStages         = new TevStage[tevStageCount];
            ProjTexGenParams  = new ProjectionTexGenParam[projTexGenParamCount];

            for (int i = 0; i < texCount; i++)
            {
                TextureMaps[i] = new TextureRef(reader, header);
            }

            for (int i = 0; i < mtxCount; i++)
            {
                TextureTransforms[i] = new BxlytTextureTransform(reader);
            }

            for (int i = 0; i < texCoordGenCount; i++)
            {
                TexCoordGens[i] = new TexCoordGen(reader, header);
            }

            for (int i = 0; i < tevStageCount; i++)
            {
                TevStages[i] = new TevStage(reader, header);
            }

            if (EnableAlphaCompare)
            {
                AlphaCompare = new BxlytAlphaCompare(reader, header);
            }
            if (EnableBlend)
            {
                BlendMode = new BxlytBlendMode(reader, header);
            }
            if (EnableBlendLogic)
            {
                BlendModeLogic = new BxlytBlendMode(reader, header);
            }
            if (EnableIndParams)
            {
                IndParameter = new IndirectParameter(reader, header);
            }

            for (int i = 0; i < projTexGenParamCount; i++)
            {
                ProjTexGenParams[i] = new ProjectionTexGenParam(reader, header);
            }

            if (EnableFontShadowParams)
            {
                FontShadowParameter = new FontShadowParameter(reader, header);
            }
        }
Esempio n. 7
0
        public Material(FileReader reader, BxlytHeader header) : base()
        {
            ParentLayout = header;

            BlendMode             = new BxlytBlendMode();
            AlphaCompare          = new AlphaCompare();
            TexCoordGens          = new List <TexCoordGenEntry>();
            IndirectTexTransforms = new List <BxlytTextureTransform>();
            IndirectStages        = new List <IndirectStage>();

            Name = reader.ReadString(0x14, true);

            BlackColor     = reader.ReadColor16RGBA().ToColor8();
            WhiteColor     = reader.ReadColor16RGBA().ToColor8();
            ColorRegister3 = reader.ReadColor16RGBA().ToColor8();
            TevColor1      = reader.ReadColor8RGBA();
            TevColor2      = reader.ReadColor8RGBA();
            TevColor3      = reader.ReadColor8RGBA();
            TevColor4      = reader.ReadColor8RGBA();
            flags          = reader.ReadUInt32();

            HasMaterialColor  = Convert.ToBoolean(ExtractBits(flags, 1, 4));
            HasChannelControl = Convert.ToBoolean(ExtractBits(flags, 1, 6));
            HasBlendMode      = Convert.ToBoolean(ExtractBits(flags, 1, 7));
            HasAlphaCompare   = Convert.ToBoolean(ExtractBits(flags, 1, 8));
            uint tevStagesCount   = ExtractBits(flags, 5, 9);
            uint indTexOrderCount = ExtractBits(flags, 2, 16);
            uint indSrtCount      = ExtractBits(flags, 2, 17);

            HasTevSwapTable = Convert.ToBoolean(ExtractBits(flags, 1, 19));
            uint texCoordGenCount = ExtractBits(flags, 4, 20);
            uint mtxCount         = ExtractBits(flags, 4, 24);
            uint texCount         = ExtractBits(flags, 4, 28);

            Console.WriteLine($"HasMaterialColor {HasMaterialColor}");
            Console.WriteLine($"HasChannelControl {HasChannelControl}");
            Console.WriteLine($"HasBlendMode {HasBlendMode}");
            Console.WriteLine($"HasAlphaCompare {HasAlphaCompare}");
            Console.WriteLine($"tevStagesCount {tevStagesCount}");
            Console.WriteLine($"indTexOrderCount {indTexOrderCount}");
            Console.WriteLine($"indSrtCount {indSrtCount}");
            Console.WriteLine($"HasTevSwapTable {HasTevSwapTable}");
            Console.WriteLine($"texCoordGenCount {texCoordGenCount}");
            Console.WriteLine($"mtxCount {mtxCount}");
            Console.WriteLine($"texCount {texCount}");

            TextureMaps       = new TextureRef[texCount];
            TevStages         = new TevStage[tevStagesCount];
            TextureTransforms = new BxlytTextureTransform[mtxCount];

            for (int i = 0; i < texCount; i++)
            {
                TextureMaps[i] = new TextureRef(reader, header);
            }

            for (int i = 0; i < mtxCount; i++)
            {
                TextureTransforms[i] = new BxlytTextureTransform(reader);
            }

            for (int i = 0; i < texCoordGenCount; i++)
            {
                TexCoordGens.Add(new TexCoordGenEntry(reader));
            }

            if (HasChannelControl)
            {
                ChanControl = new ChanCtrl(reader);
            }

            if (HasMaterialColor)
            {
                MatColor = reader.ReadColor8RGBA();
            }

            if (HasTevSwapTable)
            {
                TevSwapModeTable = new TevSwapModeTable(reader);
            }

            for (int i = 0; i < indSrtCount; i++)
            {
                IndirectTexTransforms.Add(new BxlytTextureTransform(reader));
            }

            for (int i = 0; i < indTexOrderCount; i++)
            {
                IndirectStages.Add(new IndirectStage(reader));
            }

            for (int i = 0; i < tevStagesCount; i++)
            {
                TevStages[i] = new TevStage(reader, header);
            }

            if (HasAlphaCompare)
            {
                AlphaCompare = new AlphaCompare(reader);
            }

            if (HasBlendMode)
            {
                BlendMode = new BxlytBlendMode(reader, header);
            }
        }
Esempio n. 8
0
        public void Write(FileWriter writer, LayoutHeader header)
        {
            Console.WriteLine(ToJson());

            long flagPos = 0;

            writer.WriteString(Name, 0x1C);
            if (header.VersionMajor >= 8)
            {
                flagPos = writer.Position;
                writer.Write(flags);
                writer.Write(unknown);
                writer.Write(BlackColor);
                writer.Write(WhiteColor);
            }
            else
            {
                writer.Write(BlackColor);
                writer.Write(WhiteColor);

                flagPos = writer.Position;
                writer.Write(flags);
            }

            //TODO. I don't know why but many cases there needs to be 2 tex coords to match up
            if (TextureMaps?.Length > 0 && TexCoordGens?.Length == 0)
            {
                TexCoordGens = new BxlytTexCoordGen[TextureMaps.Length];
                for (int i = 0; i < TextureMaps?.Length; i++)
                {
                    TexCoordGens[i] = new TexCoordGen();
                }
            }

            flags = 0;
            for (int i = 0; i < TextureMaps.Length; i++)
            {
                flags += Bit.BitInsert(1, 1, 2, 30);
                ((TextureRef)TextureMaps[i]).Write(writer);
            }

            if (TextureTransforms.Length == 1)
            {
                TextureTransforms = new BxlytTextureTransform[2]
                {
                    TextureTransforms[0],
                    new BxlytTextureTransform(),
                };
            }

            for (int i = 0; i < TextureTransforms.Length; i++)
            {
                flags += Bit.BitInsert(1, 1, 2, 28);
                ((BxlytTextureTransform)TextureTransforms[i]).Write(writer);
            }

            for (int i = 0; i < TexCoordGens.Length; i++)
            {
                flags += Bit.BitInsert(1, 1, 2, 26);
                ((TexCoordGen)TexCoordGens[i]).Write(writer, (BxlytHeader)header);
            }

            for (int i = 0; i < TevStages.Length; i++)
            {
                flags += Bit.BitInsert(1, 1, 2, 24);
                ((TevStage)TevStages[i]).Write(writer);
            }
            if (AlphaCompare != null && EnableAlphaCompare)
            {
                flags += Bit.BitInsert(1, 1, 1, 22);
                AlphaCompare.Write(writer);
            }
            if (BlendMode != null && EnableBlend)
            {
                flags += Bit.BitInsert(1, 1, 2, 20);
                BlendMode.Write(writer);
            }
            if (BlendModeLogic != null && EnableBlendLogic)
            {
                flags += Bit.BitInsert(1, 1, 2, 18);
                BlendModeLogic.Write(writer);
            }
            if (IndParameter != null && EnableIndParams)
            {
                flags += Bit.BitInsert(1, 1, 1, 17);
                IndParameter.Write(writer);
            }

            for (int i = 0; i < ProjTexGenParams.Length; i++)
            {
                flags += Bit.BitInsert(1, 1, 2, 15);
                ProjTexGenParams[i].Write(writer);
            }

            if (FontShadowParameter != null && EnableFontShadowParams)
            {
                flags += Bit.BitInsert(1, 1, 1, 14);
                FontShadowParameter.Write(writer);
            }

            if (AlphaInterpolation)
            {
                flags += Bit.BitInsert(1, 1, 1, 13);
            }

            using (writer.TemporarySeek(flagPos, SeekOrigin.Begin))
            {
                writer.Write(flags);
            }
        }