public static void WriteOutHousingExteriorModels(ARealmReversed realm) { string inpath = FFXIVHSPaths.GetHousingExteriorJson(); if (!File.Exists(inpath)) { throw new FileNotFoundException(); } string outpath = FFXIVHSPaths.GetHousingExteriorObjectsDirectory(); string jsonText = File.ReadAllText(inpath); Dictionary <int, HousingExteriorFixture> fixtures = JsonConvert.DeserializeObject <Dictionary <int, HousingExteriorFixture> >(jsonText); foreach (HousingExteriorFixture fixture in fixtures.Values) { foreach (HousingExteriorFixtureVariant variant in fixture.variants) { foreach (HousingExteriorFixtureModel model in variant.models) { if (realm.Packs.TryGetFile(model.modelPath, out SaintCoinach.IO.File f)) { ObjectFileWriter.WriteObjectFile(outpath, (ModelFile)f); } } } } }
private static Mesh[][][] GetMeshesForExteriorFixture(int fixtureId, ref FFXIVHSLib.Transform[][] transformsPerModel) { //A little different this time! if (_exteriorFixtureMeshes == null) { _exteriorFixtureMeshes = new Dictionary <int, Mesh[][][]>(); } if (_exteriorFixtureMeshTransforms == null) { _exteriorFixtureMeshTransforms = new Dictionary <int, FFXIVHSLib.Transform[][]>(); } Mesh[][][] modelMeshes; if (!_exteriorFixtureMeshes.TryGetValue(fixtureId, out modelMeshes)) { string exteriorHousingObjectsFolder = FFXIVHSPaths.GetHousingExteriorObjectsDirectory(); //Load the meshes if not found HousingExteriorFixture fixture = _exteriorFixtures[fixtureId]; //Initialize variants dimensions int numVariants = HousingExteriorFixture.GetVariants(fixture.fixtureType); modelMeshes = new Mesh[numVariants][][]; transformsPerModel = new FFXIVHSLib.Transform[numVariants][]; int i = 0; foreach (HousingExteriorFixtureVariant variant in fixture.variants) { //Initialize model dimensions for this variant int numModels = variant.models.Length; modelMeshes[i] = new Mesh[numModels][]; transformsPerModel[i] = new FFXIVHSLib.Transform[numModels]; int j = 0; foreach (HousingExteriorFixtureModel model in variant.models) { modelMeshes[i][j] = new Mesh[model.numMeshes]; transformsPerModel[i][j] = model.transform; for (int k = 0; k < model.numMeshes; k++) { string meshFileName = string.Format("{0}{1}_{2}.obj", exteriorHousingObjectsFolder, model.modelName, k); modelMeshes[i][j][k] = FastObjImporter.Instance.ImportFile(meshFileName); } j++; } i++; } _exteriorFixtureMeshes.Add(fixtureId, modelMeshes); _exteriorFixtureMeshTransforms.Add(fixtureId, transformsPerModel); } else { //If the meshes are in the dictionary, so are the transforms :p transformsPerModel = _exteriorFixtureMeshTransforms[fixtureId]; } return(modelMeshes); }