コード例 #1
0
        /// <summary>
        /// For loading a SetupInstance with a Clothing Base
        /// </summary>
        public SetupInstance(uint setupID, ObjDesc objDesc)
        {
            Setup = new Setup(setupID, objDesc);

            Position = Vector3.Zero;
            Rotation = Quaternion.Identity;
            Scale    = Vector3.One;

            BuildWorldTransform();
        }
コード例 #2
0
ファイル: Setup.cs プロジェクト: OptimShi/ACViewer
        public Setup(uint setupID, ObjDesc objDesc)
        {
            // make simple setup if gfxobj. These don't have
            if (setupID >> 24 == 0x1)
            {
                MakeSimpleSetup(setupID);
                BuildBoundingBox();
                return;
            }
            _setup = DatManager.PortalDat.ReadFromDat <SetupModel>(setupID);

            Parts = new List <GfxObj>();

            for (var i = 0; i < _setup.Parts.Count; i++)
            {
                GfxObj gfxObj;

                if (objDesc.PartChanges != null && objDesc.PartChanges.TryGetValue((uint)i, out var partChange))
                {
                    gfxObj = new GfxObj(partChange.NewGfxObjId, false);

                    gfxObj.LoadTextures(partChange.TextureChanges, objDesc.PaletteChanges);

                    gfxObj.BuildPolygons();
                }
                else
                {
                    var gfxObjID = _setup.Parts[i];
                    gfxObj = new GfxObj(gfxObjID, false);

                    gfxObj.LoadTextures(null, objDesc.PaletteChanges);

                    gfxObj.BuildPolygons();
                }

                Parts.Add(gfxObj);
            }

            PlacementFrames = new List <Matrix>();

            if (!_setup.PlacementFrames.TryGetValue((int)Placement.Resting, out var placementFrames))
            {
                _setup.PlacementFrames.TryGetValue((int)Placement.Default, out placementFrames);
            }

            foreach (var placementFrame in placementFrames.AnimFrame.Frames)
            {
                PlacementFrames.Add(placementFrame.ToXna());
            }

            BuildBoundingBox();
        }
コード例 #3
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}");
        }