コード例 #1
0
        void CityFixer(PQSCity city)
        {
            Debug.Log("SigmaDimensions.CityFixer", "    > PQSCity: " + city.name);

            // Resize the Building
            city.transform.localScale *= (float)resizeBuildings;

            // Fix PQSCity Groups
            if (body.Has("PQSCityGroups"))
            {
                Dictionary <object, Vector3> PQSList = body.Get <Dictionary <object, Vector3> >("PQSCityGroups");
                if (PQSList.ContainsKey(city))
                {
                    GroupFixer(city, PQSList[city]);
                }
            }

            // Add PQSCityFixer Component
            PQSCityFixer fixer = city.gameObject.AddOrGetComponent <PQSCityFixer>();

            // Terrain
            double groundLevel = body.pqsController.GetSurfaceHeight(city.repositionRadial) - body.Radius;

            Debug.Log("SigmaDimensions.CityFixer", "        > Ground Level at Mod (GETSURFACE) = " + groundLevel);
            double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d;

            Debug.Log("SigmaDimensions.CityFixer", "        > Ocean Offset at Mod = " + oceanOffset);
            groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel;
            Debug.Log("SigmaDimensions.CityFixer", "        > Ground Level at Mod (WITH OCEAN) = " + groundLevel);

            // Fix Altitude
            if (!city.repositionToSphere && !city.repositionToSphereSurface)
            {
                // Offset = Distance from the center of the planet
                // THIS IS NOT POSSIBLE AS OF KSP 1.7.1

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Original Center Offset = " + city.repositionRadiusOffset);

                double builtInOffset = city.repositionRadiusOffset - (groundLevel + oceanOffset) / (resize * landscape) - body.Radius / resize;

                Debug.Log("SigmaDimensions.CityFixer", "        > Builtin Offset = " + builtInOffset);

                city.repositionRadiusOffset = body.Radius + groundLevel + oceanOffset + builtInOffset * resizeBuildings;

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Fixed Center Offset = " + city.repositionRadiusOffset);
            }
            else if (city.repositionToSphere && !city.repositionToSphereSurface)
            {
                // Offset = Distance from the radius of the planet

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Original Radius Offset = " + city.repositionRadiusOffset);

                double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape);

                Debug.Log("SigmaDimensions.CityFixer", "        > Builtin Offset = " + builtInOffset);

                city.repositionRadiusOffset = groundLevel + builtInOffset * resizeBuildings;

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset);
            }
            else
            {
                // Offset = Distance from the surface of the planet

                if (!city.repositionToSphereSurfaceAddHeight)
                {
                    city.repositionToSphereSurfaceAddHeight = true;
                    city.repositionRadiusOffset             = 0;
                }

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Original Surface Offset = " + city.repositionRadiusOffset);

                city.repositionRadiusOffset *= resizeBuildings;

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset);
            }
        }
コード例 #2
0
        void CityFixer(PQSCity city)
        {
            Debug.Log("SigmaDimensions.CityFixer", "    > PQSCity: " + city.name);

            // Resize the Building
            city.transform.localScale *= (float)resizeBuildings;


            // Fix PQSCity Groups
            if (body.Has("PQSCityGroups"))
            {
                Dictionary <object, Vector3> PQSList = body.Get <Dictionary <object, Vector3> >("PQSCityGroups");
                if (PQSList.ContainsKey(city))
                {
                    GroupFixer(city, PQSList[city]);
                }
            }


            // Add PQSCityFixer Component
            PQSCityFixer fixer = city.GetComponent <PQSCityFixer>() ?? city.gameObject.AddComponent <PQSCityFixer>();


            // Terrain
            double groundLevel = body.pqsController.GetSurfaceHeight(city.repositionRadial) - body.Radius;
            double oceanDepth  = body.ocean && groundLevel < 0 ? -groundLevel : 0d;

            groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel;


            // Fix Altitude
            if (city.repositionToSphere && !city.repositionToSphereSurface)
            {
                double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape);

                Debug.Log("SigmaDimensions.CityFixer", "        > Builtuin Offset = " + builtInOffset);

                // Offset = Distance from the radius of the planet

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Original Radius Offset = " + city.repositionRadiusOffset);

                city.repositionRadiusOffset = groundLevel + builtInOffset * resizeBuildings;

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset);
            }
            else
            {
                if (!city.repositionToSphereSurface)
                {
                    city.repositionToSphereSurface = true;
                    city.repositionRadiusOffset    = 0;
                }
                if (!city.repositionToSphereSurfaceAddHeight)
                {
                    city.repositionToSphereSurfaceAddHeight = true;
                    city.repositionRadiusOffset             = 0;
                }

                double builtInOffset = city.repositionRadiusOffset - oceanDepth / (resize * landscape);

                Debug.Log("SigmaDimensions.CityFixer", "        > Builtuin Offset = " + builtInOffset);

                // Offset = Distance from the surface of the planet

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Original Surface Offset = " + city.repositionRadiusOffset);

                city.repositionRadiusOffset = oceanDepth + builtInOffset * resizeBuildings;

                Debug.Log("SigmaDimensions.CityFixer", "        > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset);
            }
        }