Beispiel #1
0
        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);
    }