예제 #1
0
        public void Add(uint clothingTableID, PaletteTemplate paletteTemplate = PaletteTemplate.Undef, float shade = 0.0f)
        {
            var clothingTable = DatManager.PortalDat.ReadFromDat <ClothingTable>(clothingTableID);

            if (!clothingTable.ClothingBaseEffects.TryGetValue(SetupId, out var baseEffect))
            {
                return;
            }

            // palette changes
            if (clothingTable.ClothingSubPalEffects.TryGetValue((uint)paletteTemplate, out var palEffect))
            {
                if (PaletteChanges == null)
                {
                    PaletteChanges = new PaletteChanges(palEffect.CloSubPalettes, shade);
                }
                else
                {
                    PaletteChanges.Add(palEffect.CloSubPalettes, shade);
                }
            }

            foreach (var objEffect in baseEffect.CloObjectEffects)
            {
                if (PartChanges == null)
                {
                    PartChanges = new Dictionary <uint, PartChange>();
                }

                // gfxobj change
                if (!PartChanges.TryGetValue(objEffect.Index, out var partChange))
                {
                    partChange = new PartChange(objEffect.ModelId);
                    PartChanges.Add(objEffect.Index, partChange);
                }
                else
                {
                    partChange.NewGfxObjId = objEffect.ModelId;
                }

                // texture changes
                foreach (var texEffect in objEffect.CloTextureEffects)
                {
                    if (partChange.TextureChanges == null)
                    {
                        partChange.TextureChanges = new Dictionary <uint, uint>();
                    }

                    partChange.TextureChanges[texEffect.OldTexture] = texEffect.NewTexture;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Load a model with a ClothingTable
        /// </summary>
        public void LoadModel(uint setupID, ClothingTable clothingBase, PaletteTemplate paletteTemplate, float shade)
        {
            TextureCache.Init();

            // assumed to be in Setup mode for ClothingBase
            GfxObjMode = false;

            // create the ObjDesc, describing any changes to palettes / textures / gfxobj parts
            var objDesc = new Model.ObjDesc(setupID, clothingBase.Id, paletteTemplate, shade);

            Setup = new SetupInstance(setupID, objDesc);

            if (ViewObject == null || ViewObject.PhysicsObj.PartArray.Setup._dat.Id != setupID)
            {
                InitObject(setupID);

                Camera.InitModel(Setup.Setup.BoundingBox);
            }

            ModelType = ModelType.Setup;

            MainWindow.Status.WriteLine($"Loading {setupID:X8} with ClothingBase {clothingBase.Id:X8}, PaletteTemplate {paletteTemplate}, and Shade {shade}");
        }
예제 #3
0
        public ObjDesc(uint setupID, uint clothingTableID, PaletteTemplate paletteTemplate = PaletteTemplate.Undef, float shade = 0.0f)
        {
            SetupId = setupID;

            Add(clothingTableID, paletteTemplate, shade);
        }