/// <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(); }
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(); }
/// <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}"); }