コード例 #1
0
        internal static void ExtractDesertLights()
        {
            StaticModel model = StaticDatabase.GetModelByName("SQUAD_Desert_Runway");

            Transform   lights1     = model.prefab.transform.FindRecursive("Section1_lights");
            string      modelName   = "SQUAD_Runway_Lights";
            StaticModel lightsModel = new StaticModel();

            lightsModel.prefab = lights1.gameObject;
            // dishModel.prefab.transform.parent = null;
            lightsModel.name         = modelName;
            lightsModel.path         = "KerbalKonstructs/" + modelName;
            lightsModel.configPath   = model.path + ".cfg";
            lightsModel.keepConvex   = true;
            lightsModel.title        = "Desert Runway Lights";
            lightsModel.mesh         = modelName;
            lightsModel.category     = "Runway";
            lightsModel.author       = "Squad";
            lightsModel.manufacturer = "Squad";
            lightsModel.description  = "Squad original Desert Runway Lights";

            lightsModel.isSquad = true;

            StaticDatabase.RegisterModel(lightsModel, lightsModel.name);
        }
コード例 #2
0
        /// <summary>
        /// Prints out the usage of each model
        /// </summary>
        public static void GetModelStats()
        {
            int modelcount = 0;

            int vertexcount = 0;
            int triangles   = 0;

            Log.Normal("111: Modelname , Number of instances , Vertex count , triangles");
            foreach (StaticModel model in StaticDatabase.allStaticModels)
            {
                if (model.isSquad)
                {
                    continue;
                }
                modelcount = StaticDatabase.GetInstancesFromModel(model).Count();
                // Log.Normal("Model " + model.configPath + " has: " + modelcount);
                var meshfilter = model.prefab.GetComponentsInChildren <MeshFilter>(true);
                if (meshfilter == null)
                {
                    continue;
                }

                foreach (var mf in meshfilter)
                {
                    Mesh mesh = mf.mesh;
                    triangles   += mesh.triangles.Length;
                    vertexcount += mesh.vertexCount;
                }
                Log.Normal("111:" + model.configPath + " , " + model.title + " , " + modelcount + " , " + vertexcount + " , " + triangles / 3);
                vertexcount = 0;
                triangles   = 0;
            }
        }
コード例 #3
0
        internal static void PimpLv2Runway(GameObject modelPrefab)
        {
            //StaticModel model = StaticDatabase.GetModelByName("KSC_Runway_level_2");
            StaticModel modelLights = StaticDatabase.GetModelByName("SQUAD_Runway_Lights");
            int         count       = 0;

            foreach (Transform target in modelPrefab.transform.FindAllRecursive("fxTarget"))
            {
                GameObject light = GameObject.Instantiate(modelLights.prefab);
                //light.transform.localPosition = target.localPosition;
                //light.transform.localRotation = target.localRotation;
                light.transform.localScale *= 0.6f;
                light.transform.parent      = target.parent.FindRecursiveContains("runway");
                //light.transform.parent = modelPrefab.transform;
                //light.transform.localRotation = model.prefab.transform.localRotation;
                //light.transform.localPosition = target.localPosition;
                light.transform.position = target.position;
                light.transform.rotation = modelPrefab.transform.rotation;
                light.transform.Translate(light.transform.up * 0.85f);
                light.transform.Translate(light.transform.right * 50);
                if (count > 1 && count < 7)
                {
                    light.transform.Translate(light.transform.right * 55);
                }
                light.name = light.transform.parent.name + "_lights";
                count++;
            }
        }
コード例 #4
0
        public static float TotalBarracksPool(StaticInstance staticInstance)
        {
            float fKerbals = 0f;

            foreach (StaticInstance instance in StaticDatabase.GetAllStatics())
            {
                //if ((string)obj.model.getSetting("DefaultFacilityType") == "None") continue;

                if (instance.FacilityType != "Barracks")
                {
                    if (instance.model.DefaultFacilityType != "Barracks")
                    {
                        continue;
                    }
                }

                var dist = Vector3.Distance(staticInstance.position, instance.position);
                if (dist > 5000f)
                {
                    continue;
                }

                Barracks foundBarracks = instance.gameObject.GetComponent <Barracks>();

                fKerbals = fKerbals + foundBarracks.StaffAvailable;
            }

            return(fKerbals);
        }
コード例 #5
0
 public static void RemoveBuilding(StaticInstance instance)
 {
     if (instance.isInSavegame)
     {
         StaticDatabase.DeleteStatic(instance);
     }
 }
コード例 #6
0
        private static void Initialize()
        {
            foreach (DestructibleBuilding building in StaticDatabase.GetModelByName("KSC_VehicleAssemblyBuilding_level_3").prefab.GetComponentsInChildren <DestructibleBuilding>(true))
            {
                if (building.name == "mainBuilding")
                {
                    demolitionPrefab = building.DemolitionFXPrefab;
                }
            }
            foreach (DestructibleBuilding building in Resources.FindObjectsOfTypeAll <DestructibleBuilding>())
            {
                if (building.name == "CornerLab")
                {
                    foreach (var bla in building.CollapsibleObjects)
                    {
                        if (bla.SecondaryFXPrefab != null)
                        {
                            secondaryPrefab = bla.SecondaryFXPrefab;
                        }
                    }
                }
            }



            isInitialized = true;
        }
コード例 #7
0
 public static void RemoveAllBuildings()
 {
     foreach (StaticInstance instance in StaticDatabase.allStaticInstances)
     {
         if (instance.isInSavegame)
         {
             StaticDatabase.DeleteStatic(instance);
         }
     }
 }
コード例 #8
0
        /// <summary>
        /// Prints out the usage of each model
        /// </summary>
        public static void GetModelStats()
        {
            int modelcount = 0;

            foreach (StaticModel model in StaticDatabase.allStaticModels)
            {
                modelcount = StaticDatabase.GetInstancesFromModel(model).Count();
                Log.Normal("Model " + model.configPath + " has: " + modelcount);
            }
        }
コード例 #9
0
ファイル: API.cs プロジェクト: mstramb/Kerbal-Konstructs
 public static void RemoveStatic(string uuid)
 {
     if (StaticDatabase.instancedByUUID.ContainsKey(uuid))
     {
         StaticDatabase.DeleteStatic(StaticDatabase.instancedByUUID[uuid]);
     }
     else
     {
         Log.UserWarning("API:RemoveObject: Can´t find a static with the UUID: " + uuid);
     }
 }
コード例 #10
0
ファイル: API.cs プロジェクト: mstramb/Kerbal-Konstructs
        public static string SpawnObject(string modelName)
        {
            StaticModel model = StaticDatabase.GetModelByName(modelName);

            if (model != null)
            {
                return(CareerEditor.instance.SpawnInstance(model, 3f, KerbalKonstructs.instance.getCurrentBody().transform.InverseTransformPoint(FlightGlobals.ActiveVessel.transform.position)));
            }
            else
            {
                Log.UserError("API:SpawnObject: Could not find selected KK-Model named: " + modelName);
                return(null);
            }
        }
コード例 #11
0
        public static void LoadBuilding(ConfigNode cfgNode)
        {
            StaticInstance instance = new StaticInstance();

            instance.isInSavegame = true;

            instance.Orientation     = Vector3.up;
            instance.heighReference  = HeightReference.Terrain;
            instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000);

            instance.Group = "SaveGame";

            instance.RadialPosition = ConfigNode.ParseVector3(cfgNode.GetValue("Position"));

            instance.model = StaticDatabase.GetModelByName(cfgNode.GetValue("ModelName"));

            if (instance.model == null)
            {
                Log.UserError("LoadFromSave: Canot find model named: " + cfgNode.GetValue("ModelName"));
                instance = null;
                return;
            }
            //instance.mesh = UnityEngine.Object.Instantiate(instance.model.prefab);

            instance.UUID = cfgNode.GetValue("UUID");

            instance.CelestialBody = ConfigUtil.GetCelestialBody(cfgNode.GetValue("Body"));

            instance.RadiusOffset  = float.Parse(cfgNode.GetValue("Altitude"));
            instance.RotationAngle = float.Parse(cfgNode.GetValue("Rotation"));

            instance.RefLatitude  = KKMath.GetLatitudeInDeg(instance.RadialPosition);
            instance.RefLongitude = KKMath.GetLongitudeInDeg(instance.RadialPosition);

            InstanceUtil.CreateGroupCenterIfMissing(instance);

            if (cfgNode.HasValue("IsScanable"))
            {
                bool.TryParse(cfgNode.GetValue("IsScanable"), out instance.isScanable);
            }

            bool oldLegacySpawn = KerbalKonstructs.convertLegacyConfigs;

            instance.Orientate();

            KerbalKonstructs.convertLegacyConfigs = oldLegacySpawn;
        }
コード例 #12
0
        private void SetGroup()
        {
            slaveList = new List <AnimateOnSunRise> ();

            if (staticInstance.Group == "Ungrouped")
            {
                master   = this;
                isMaster = true;
                return;
            }

            bool findMaster = false;

            foreach (StaticInstance sInstance in StaticDatabase.GetAllStatics())
            {
                if (sInstance != staticInstance)
                {
                    if (sInstance.Group == staticInstance.Group)
                    {
                        AnimateOnSunRise module = sInstance.gameObject.GetComponentInChildren <AnimateOnSunRise> ();
                        if (module != null)
                        {
                            if (module.isMaster)
                            {
                                master     = module;
                                findMaster = true;
                                isMaster   = false;
                                break;
                            }
                            else
                            {
                                slaveList.Add(module);
                            }
                        }
                    }
                }
            }

            if (!findMaster)
            {
                master   = this;
                isMaster = true;
            }
        }
コード例 #13
0
        private static void CreateModelFromGameObject(GameObject prefab, string modelName, string category)
        {
            StaticModel model = new StaticModel();

            model.isSquad = true;
            model.name    = modelName;
            model.prefab  = GameObject.Instantiate(prefab);
            GameObject.DontDestroyOnLoad(model.prefab);

            model.prefab.SetActive(false);
            // Fill in FakeNews errr values
            model.path         = "KerbalKonstructs/" + modelName;
            model.configPath   = model.path + ".cfg";
            model.keepConvex   = true;
            model.title        = modelName;
            model.mesh         = modelName;
            model.category     = category;
            model.author       = "Squad";
            model.manufacturer = "Squad";
            model.description  = "Squad original " + modelName;


            if (modelName == "KSC_FuelTank")
            {
                foreach (var bla in model.prefab.GetComponentsInChildren <MeshRenderer>(true))
                {
                    bla.enabled = true;
                    bla.gameObject.SetActive(true);
                }
                model.prefab.SetActive(true);
                Log.Normal("Fixing KSC Fuel Tank");
                GameObject oldGameObject = model.prefab;
                GameObject newBaseObject = new GameObject(modelName);
                GameObject.DontDestroyOnLoad(newBaseObject);
                newBaseObject.SetActive(false);
                oldGameObject.transform.position         = newBaseObject.transform.position;
                oldGameObject.transform.parent           = newBaseObject.transform;
                oldGameObject.transform.localEulerAngles = new Vector3(270, 0, 0);
                model.prefab = newBaseObject;
            }

            StaticDatabase.RegisterModel(model, modelName);
        }
コード例 #14
0
        void SetLocalsGroup(string sGroup, float fRange)
        {
            if (sGroup == "")
            {
                return;
            }

            foreach (StaticInstance obj in StaticDatabase.GetAllStatics())
            {
                if (obj.pqsCity.sphere == FlightGlobals.currentMainBody.pqsController)
                {
                    var dist = Vector3.Distance(FlightGlobals.ActiveVessel.GetTransform().position, obj.gameObject.transform.position);
                    if (dist < fRange)
                    {
                        StaticDatabase.ChangeGroup(obj, sGroup);
                    }
                }
            }
        }
コード例 #15
0
ファイル: KKtoSD.cs プロジェクト: stasikos/KKtoSD
        void Awake()
        {
            // Version Check
            Debug.Log("[SigmaLog] Version Check:   KKtoSD v0.1.5");

            // Check if KK is installed
            if (AssemblyLoader.loadedAssemblies.FirstOrDefault(a => a.name == "KerbalKonstructs") == null)
            {
                return;
            }

            // Get the groups from KK
            StaticInstance[] KKStatics = StaticDatabase.GetAllStatics();

            // Send the groups to SD
            foreach (StaticInstance KKStatic in KKStatics)
            {
                CelestialBody planet = KKStatic?.CelestialBody;
                string        group  = KKStatic?.Group;
                PQSCity       mod    = KKStatic?.pqsCity;

                if (planet == null || string.IsNullOrEmpty(group) || mod == null)
                {
                    continue;
                }


                if (!PQSCityGroups.ExternalExceptions.ContainsKey(planet))
                {
                    PQSCityGroups.ExternalExceptions.Add(planet, new Dictionary <string, List <object> >());
                }

                if (!PQSCityGroups.ExternalExceptions[planet].ContainsKey(group))
                {
                    PQSCityGroups.ExternalExceptions[planet].Add(group, new List <object>());
                }

                if (!PQSCityGroups.ExternalExceptions[planet][group].Contains(mod))
                {
                    PQSCityGroups.ExternalExceptions[planet][group].Add(mod);
                }
            }
        }
コード例 #16
0
        /// <summary>
        /// saves the facility settings to the cfg file
        /// </summary>
        internal static void SaveFacilities(ConfigNode facilityNodes)
        {
            foreach (StaticInstance instance in StaticDatabase.GetAllStatics())
            {
                if (!instance.hasFacilities)
                {
                    continue;
                }

                ConfigNode instanceNode = facilityNodes.AddNode(CareerUtils.KeyFromString(instance.RadialPosition.ToString()));
                instanceNode.SetValue("FacilityName", instance.gameObject.name, true);
                instanceNode.SetValue("FacilityType", instance.facilityType.ToString(), true);

                for (int i = 0; i < instance.myFacilities.Count; i++)
                {
                    ConfigNode facnode = instanceNode.AddNode(instance.myFacilities[i].FacilityType);
                    facnode.SetValue("Index", i, true);
                    instance.myFacilities[i].SaveCareerConfig(facnode);
                }
            }
        }
コード例 #17
0
        private static void CreateModelFromGameObject(GameObject prefab, string modelName, string category)
        {
            StaticModel model = new StaticModel();

            model.isSquad = true;
            model.name    = modelName;
            model.prefab  = GameObject.Instantiate(prefab);
            GameObject.DontDestroyOnLoad(model.prefab);
            model.prefab.SetActive(false);
            // Fill in FakeNews errr values
            model.path         = "KerbalKonstructs/" + modelName;
            model.configPath   = model.path + ".cfg";
            model.keepConvex   = true;
            model.title        = modelName;
            model.mesh         = modelName;
            model.category     = category;
            model.author       = "Squad";
            model.manufacturer = "Squad";
            model.description  = "Squad original " + modelName;
            StaticDatabase.RegisterModel(model, modelName);
        }
コード例 #18
0
        internal static void PimpLv2Runway(GameObject modelPrefab, bool state = false)
        {
            StaticModel modelLights = StaticDatabase.GetModelByName("SQUAD_Runway_Lights");
            //Log.Normal("Prefab name: " + modelPrefab.name);
            int count = 0;

            foreach (Transform target in modelPrefab.transform.FindAllRecursive("fxTarget"))
            {
                GameObject light = GameObject.Instantiate(modelLights.prefab);
                light.SetActive(state);
                //Log.Normal("found target: " + target.parent.name);
                light.transform.parent      = target.parent.FindRecursiveContains("runway");
                light.transform.localScale *= 0.6f;

                light.transform.rotation = modelPrefab.transform.rotation;

                light.transform.localPosition = new Vector3(6.5f, 0.85f, -1050f + count * 330);

                light.name = light.transform.parent.name + "_lights";

                count++;
            }
        }
コード例 #19
0
ファイル: API.cs プロジェクト: mstramb/Kerbal-Konstructs
        public static string PlaceStatic(string modelName, string bodyName, double lat, double lng, float alt, float rotation, bool isScanable = false)
        {
            StaticModel model = StaticDatabase.GetModelByName(modelName);

            if (model != null)
            {
                StaticInstance instance = new StaticInstance();
                instance.isInSavegame = true;

                instance.heighReference = HeightReference.Terrain;

                instance.gameObject      = UnityEngine.Object.Instantiate(model.prefab);
                instance.RadiusOffset    = alt;
                instance.CelestialBody   = ConfigUtil.GetCelestialBody(bodyName);
                instance.Group           = "Ungrouped";
                instance.RadialPosition  = KKMath.GetRadiadFromLatLng(instance.CelestialBody, lat, lng);
                instance.RotationAngle   = rotation;
                instance.Orientation     = Vector3.up;
                instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000);
                instance.RefLatitude     = lat;
                instance.RefLongitude    = lng;

                instance.model      = model;
                instance.configPath = null;
                instance.configUrl  = null;

                instance.isScanable = isScanable;

                instance.SpawnObject();

                return(instance.UUID);
            }

            Log.UserError("API:PlaceStatic: StaticModel not found in Database: " + modelName);
            return(null);
        }
コード例 #20
0
        /// <summary>
        /// Loads all non KSC models into the ModelDatabase
        /// </summary>
        public static void LoadSquadAnomalies()
        {
            foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>())
            {
                if (pqs.gameObject.name == "KSC" || pqs.gameObject.name == "KSC2" || pqs.gameObject.name == "Pyramids" || pqs.gameObject.name == "Pyramid" || pqs.gameObject.name == "CommNetDish")
                {
                    continue;
                }

                string modelName  = "SQUAD_" + pqs.gameObject.name;
                string modelTitle = "Squad " + pqs.gameObject.name;

                // don't double register the models a second time (they will do this)
                // maybe with a "without green flag" and filter that our later at spawn in mangle
                if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                {
                    continue;
                }

                StaticModel model = new StaticModel();
                model.name = modelName;

                // Fill in FakeNews errr values
                model.path         = "KerbalKonstructs/" + modelName;
                model.configPath   = model.path + ".cfg";
                model.keepConvex   = true;
                model.title        = modelTitle;
                model.mesh         = modelName;
                model.category     = "Squad Anomalies";
                model.author       = "Squad";
                model.manufacturer = "Squad";
                model.description  = "Squad original " + modelTitle;

                model.isSquad = true;

                // we reference only the original prefab, as we cannot instantiate an instance for some reason
                //model.prefab = pqs.gameObject;
                model.prefab = GameObject.Instantiate(pqs.gameObject);
                GameObject.DontDestroyOnLoad(model.prefab);
                //model.prefab.SetActive(false);
                // activate them
                foreach (Transform child in model.prefab.GetComponentsInChildren <Transform>(true))
                {
                    if (!child || !child.gameObject)
                    {
                        continue;
                    }

                    child.gameObject.SetActive(true);
                }
                model.prefab.SetActive(false);

                StaticDatabase.RegisterModel(model, modelName);
            }

            foreach (PQSCity2 pqs2 in Resources.FindObjectsOfTypeAll <PQSCity2>())
            {
                if (pqs2.gameObject.name == "Desert_Airfield")
                {
                    continue;
                }

                string modelName  = "SQUAD_" + pqs2.gameObject.name;
                string modelTitle = "Squad " + pqs2.gameObject.name;

                if (modelName.Contains("Clone"))
                {
                    continue;
                }

                // don't double register the models a second time (they will do this)
                // maybe with a "without green flag" and filter that our later at spawn in mangle
                if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                {
                    continue;
                }

                StaticModel model = new StaticModel();
                model.name = modelName;

                // Fill in FakeNews errr values
                model.path         = "KerbalKonstructs/" + modelName;
                model.configPath   = model.path + ".cfg";
                model.keepConvex   = true;
                model.title        = modelTitle;
                model.mesh         = modelName;
                model.category     = "Squad Anomalies";
                model.author       = "Squad";
                model.manufacturer = "Squad";
                model.description  = "Squad original " + modelTitle;

                model.isSquad = true;

                if (modelName == "SQUAD_MobileLaunchPad" || modelName == "SQUAD_Desert_Airfield")
                {
                    model.category = "Squad LaunchSite";
                    model.DefaultLaunchPadTransform = "SpawnPoint";
                }


                // we reference only the original prefab, as we cannot instantiate an instance for some reason
                model.prefab = pqs2.gameObject;
                //model.prefab = GameObject.Instantiate(pqs2.gameObject);
                //GameObject.DontDestroyOnLoad(model.prefab);
                //model.prefab.SetActive(false);
                StaticDatabase.RegisterModel(model, modelName);
            }
        }
コード例 #21
0
        /// <summary>
        /// Loads the Models from the KSC into the model Database
        /// </summary>
        public static void LoadSquadKSCModels()
        {
            var dotAnim = Resources.FindObjectsOfTypeAll <TimeOfDayAnimation>().Where(x => x.gameObject.name == "SpaceCenter").First();

            if (dotAnim != null)
            {
                //Log.Normal("DN found: " + dotAnim.gameObject.name);
                //Log.Normal("DN emissiveColorProperty: " + dotAnim.emissiveColorProperty);
                //Log.Normal("DN tgtColor: " + dotAnim.emissiveTgtColor);

                InstanceUtil.dayNightEmissives = dotAnim.emissives;
                InstanceUtil.dotPoperty        = dotAnim.emissiveColorProperty;
                InstanceUtil.dotColor          = dotAnim.emissiveTgtColor;
                InstanceUtil.dotAnimationCurve = dotAnim.emissivesCurve;

                foreach (TimeOfDayAnimation.MaterialProperty mp in dotAnim.emissives)
                {
                    //Log.Normal("DN matname: " + mp.material.name);
                    InstanceUtil.materialPropertyNames.Add(mp.material.name);
                }
            }


            // first we find get all upgradeable facilities
            Upgradeables.UpgradeableObject[] upgradeablefacilities;
            upgradeablefacilities = Resources.FindObjectsOfTypeAll <Upgradeables.UpgradeableObject>();

            foreach (var facility in upgradeablefacilities)
            {
                for (int i = 0; i < facility.UpgradeLevels.Length; i++)
                {
                    string modelName  = "KSC_" + facility.name + "_level_" + (i + 1).ToString();
                    string modelTitle = "KSC " + facility.name + " lv " + (i + 1).ToString();


                    if (modelName == "KSC_Runway_level_2")
                    {
                        if (Expansions.ExpansionsLoader.IsExpansionInstalled("MakingHistory"))
                        {
                            PimpLv2Runway(facility.UpgradeLevels[i].facilityPrefab);
                            if (facility.UpgradeLevels[i].facilityInstance != null)
                            {
                                PimpLv2Runway(facility.UpgradeLevels[i].facilityInstance);
                            }
                        }
                    }

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad KSC";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;

                    // the runways have all the same spawnpoint.
                    if (facility.name.Equals("Runway", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "End09/SpawnPoint";
                    }

                    // Launchpads also
                    if (facility.name.Equals("LaunchPad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "LaunchPad_spawn";
                    }

                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    //model.prefab = GameObject.Instantiate(facility.UpgradeLevels[i].facilityPrefab);
                    //GameObject.DontDestroyOnLoad(model.prefab);
                    //model.prefab.SetActive(false);
                    model.prefab = facility.UpgradeLevels[i].facilityPrefab;



                    ////Debug code for Material dumping
                    //foreach (Renderer renderer in model.prefab.GetComponentsInChildren<Renderer>(true))
                    //{
                    //    foreach (Material material in renderer.materials)
                    //    {
                    //        try
                    //        {
                    //            string textures = "";

                    //            foreach (string textName in material.GetTexturePropertyNames())
                    //            {
                    //                textures = textures + textName + ": " + material.GetTexture(textName).name + " ;  " + material.GetTextureScale(textName).ToString() + " ";
                    //            }

                    //            {
                    //                if (!material.HasProperty("_Color"))
                    //                {
                    //                    Log.Normal("Material: " + material.name + " : " + material.shader.name + " : " + textures + " : " + "No Color");
                    //                }
                    //                else
                    //                {
                    //                    Log.Normal("Material: " + material.name + " : " + material.shader.name + " : " + textures + " : " + material.color.ToString());
                    //                }
                    //                continue;
                    //            }
                    //        }
                    //        catch { }
                    //    }
                    //}


                    // Register new GasColor Module
                    Material grassMaterial = null;
                    model.modules = new List <StaticModule>();

                    foreach (Renderer renderer in model.prefab.GetComponentsInChildren <Renderer>(true))
                    {
                        int materialcount = 0;
                        foreach (Material material in renderer.materials.Where(mat => mat.shader.name == "KSP/Scenery/Diffuse Ground KSC"))
                        {
                            Log.Normal("Found GrassColor on: " + model.name + " : " + renderer.transform.name + " count: " + materialcount);
                            grassMaterial = material;
                            StaticModule module = new StaticModule();
                            module.moduleNamespace = "KerbalKonstructs";
                            module.moduleClassname = "GrassColor2";
                            module.moduleFields.Add("DefaultBlendMaskTexture", "BUILTIN:/" + grassMaterial.GetTexture("_BlendMaskTexture").name);
                            module.moduleFields.Add("DefaultNearGrassTexture", "BUILTIN:/" + grassMaterial.GetTexture("_NearGrassTexture").name);
                            module.moduleFields.Add("DefaultFarGrassTexture", "BUILTIN:/" + grassMaterial.GetTexture("_FarGrassTexture").name);
                            module.moduleFields.Add("DefaultTarmacTexture", "BUILTIN:/" + grassMaterial.GetTexture("_TarmacTexture").name);

                            module.moduleFields.Add("DefaultTarmacTiling", ConfigNode.WriteVector(grassMaterial.GetTextureScale("_TarmacTexture")));

                            module.moduleFields.Add("DefaultNearGrassTiling", grassMaterial.GetFloat("_NearGrassTiling").ToString());
                            module.moduleFields.Add("DefaultFarGrassTiling", grassMaterial.GetFloat("_FarGrassTiling").ToString());

                            module.moduleFields.Add("GrassMeshName", renderer.transform.name);

                            module.moduleFields.Add("MaterialOffset", materialcount.ToString());

                            model.modules.Add(module);

                            materialcount++;

                            TexturePreset preset = new TexturePreset();
                            preset.usage       = TextureUsage.BlendMask;
                            preset.texturePath = "BUILTIN:/" + grassMaterial.GetTexture("_BlendMaskTexture").name;
                            if (TextureSelector.additionalTextures.Where(x => x.texturePath == preset.texturePath).Count() == 0)
                            {
                                TextureSelector.additionalTextures.Add(preset);
                            }
                        }
                    }

                    StaticDatabase.RegisterModel(model, modelName);

                    if (modelName == "KSC_SpaceplaneHangar_level_3")
                    {
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("Tank").gameObject, "KSC_FuelTank", "Tanks");
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("ksp_pad_cylTank").gameObject, "KSC_FuelTanks", "Tanks");
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("ksp_pad_waterTower").gameObject, "KSC_WaterTower", "Tanks");
                    }

                    // try to extract the wrecks from the facilities
                    var transforms = model.prefab.transform.GetComponentsInChildren <Transform>(true);
                    int wreckCount = 0;
                    foreach (var transform in transforms)
                    {
                        if (transform.name.Equals("wreck", StringComparison.InvariantCultureIgnoreCase))
                        {
                            wreckCount++;
                            StaticModel wreck     = new StaticModel();
                            string      wreckName = modelName + "_wreck_" + wreckCount.ToString();
                            wreck.name = wreckName;

                            // Fill in FakeNews errr values
                            wreck.path         = "KerbalKonstructs/" + wreckName;
                            wreck.configPath   = wreck.path + ".cfg";
                            wreck.keepConvex   = true;
                            wreck.title        = modelTitle + " wreck " + wreckCount.ToString();
                            wreck.mesh         = wreckName;
                            wreck.category     = "Squad KSC wreck";
                            wreck.author       = "Squad";
                            wreck.manufacturer = "Squad";
                            wreck.description  = "Squad original " + wreck.title;

                            wreck.isSquad = true;
                            wreck.prefab  = GameObject.Instantiate(transform.gameObject);
                            GameObject.DontDestroyOnLoad(wreck.prefab);
                            wreck.prefab.SetActive(false);

                            //wreck.prefab.GetComponent<Transform>().parent = null;
                            StaticDatabase.RegisterModel(wreck, wreck.name);
                        }
                    }
                }
            }
        }
コード例 #22
0
        public static StaticInstance NearestBarracks(StaticInstance staticInstance, bool bUnassigned = true)
        {
            StaticInstance soNearest = null;
            float          fKerbals  = 0f;

            foreach (StaticInstance instance in StaticDatabase.GetAllStatics())
            {
                //if ((string)obj.model.getSetting("DefaultFacilityType") == "None") continue;

                if (instance.FacilityType != "Barracks")
                {
                    if (instance.model.DefaultFacilityType != "Barracks")
                    {
                        continue;
                    }
                }

                if (instance.CelestialBody.name == FlightGlobals.currentMainBody.name)
                {
                    var dist = Vector3.Distance(staticInstance.position, instance.position);
                    if (dist > 5000f)
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }

                Barracks foundBarracks = instance.gameObject.GetComponent <Barracks>();
                if (bUnassigned)
                {
                    fKerbals = foundBarracks.StaffAvailable;

                    if (fKerbals < 1)
                    {
                        continue;
                    }
                    else
                    {
                        soNearest = instance;
                        break;
                    }
                }
                else
                {
                    if (foundBarracks.StaffCurrent == 1)
                    {
                        continue;
                    }

                    if ((foundBarracks.StaffCurrent - 1f) == foundBarracks.StaffAvailable)
                    {
                        continue;
                    }
                    else
                    {
                        soNearest = instance;
                        break;
                    }
                }
            }

            return(soNearest);
        }
コード例 #23
0
        /// <summary>
        /// Loads the Models from the KSC into the model Database
        /// </summary>
        public static void LoadSquadKSCModels()
        {
            var dotAnim = Resources.FindObjectsOfTypeAll <TimeOfDayAnimation>().Where(x => x.gameObject.name == "SpaceCenter").First();

            if (dotAnim != null)
            {
                //Log.Normal("DN found: " + dotAnim.gameObject.name);
                //Log.Normal("DN emissiveColorProperty: " + dotAnim.emissiveColorProperty);
                //Log.Normal("DN tgtColor: " + dotAnim.emissiveTgtColor);

                InstanceUtil.dayNightEmissives = dotAnim.emissives;
                InstanceUtil.dotPoperty        = dotAnim.emissiveColorProperty;
                InstanceUtil.dotColor          = dotAnim.emissiveTgtColor;
                InstanceUtil.dotAnimationCurve = dotAnim.emissivesCurve;

                foreach (TimeOfDayAnimation.MaterialProperty mp in dotAnim.emissives)
                {
                    //Log.Normal("DN matname: " + mp.material.name);
                    InstanceUtil.materialPropertyNames.Add(mp.material.name);
                }
            }


            // first we find get all upgradeable facilities
            Upgradeables.UpgradeableObject[] upgradeablefacilities;
            upgradeablefacilities = Resources.FindObjectsOfTypeAll <Upgradeables.UpgradeableObject>();

            foreach (var facility in upgradeablefacilities)
            {
                for (int i = 0; i < facility.UpgradeLevels.Length; i++)
                {
                    string modelName  = "KSC_" + facility.name + "_level_" + (i + 1).ToString();
                    string modelTitle = "KSC " + facility.name + " lv " + (i + 1).ToString();

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad KSC";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;

                    // the runways have all the same spawnpoint.
                    if (facility.name.Equals("Runway", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "End09/SpawnPoint";
                    }

                    // Launchpads also
                    if (facility.name.Equals("LaunchPad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "LaunchPad_spawn";
                    }

                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    model.prefab = facility.UpgradeLevels[i].facilityPrefab;

                    // Register new GasColor Module
                    bool hasGrasMaterial = false;
                    foreach (Renderer renderer in model.prefab.GetComponentsInChildren <Renderer>(true))
                    {
                        foreach (Material material in renderer.materials.Where(mat => mat.name == "ksc_exterior_terrain_grass_02 (Instance)"))
                        {
                            //Log.Normal("gras: " + material.name + " : " + material.color.ToString() + " : " + material.mainTexture.name);
                            hasGrasMaterial = true;
                            break;
                        }
                    }
                    if (hasGrasMaterial)
                    {
                        //Log.Normal("Adding GrasColor to: " + model.name);
                        StaticModule module = new StaticModule();
                        module.moduleNamespace = "KerbalKonstructs";
                        module.moduleClassname = "GrasColor";
                        module.moduleFields.Add("GrasTextureImage", "BUILTIN:/terrain_grass00_new");
                        model.modules = new List <StaticModule>();
                        model.modules.Add(module);
                    }

                    StaticDatabase.RegisterModel(model, modelName);

                    // try to extract the wrecks from the facilities
                    var transforms = model.prefab.transform.GetComponentsInChildren <Transform>(true);
                    int wreckCount = 0;
                    foreach (var transform in transforms)
                    {
                        if (transform.name.Equals("wreck", StringComparison.InvariantCultureIgnoreCase))
                        {
                            wreckCount++;
                            StaticModel wreck     = new StaticModel();
                            string      wreckName = modelName + "_wreck_" + wreckCount.ToString();
                            wreck.name = wreckName;

                            // Fill in FakeNews errr values
                            wreck.path         = "KerbalKonstructs/" + wreckName;
                            wreck.configPath   = wreck.path + ".cfg";
                            wreck.keepConvex   = true;
                            wreck.title        = modelTitle + " wreck " + wreckCount.ToString();
                            wreck.mesh         = wreckName;
                            wreck.category     = "Squad KSC wreck";
                            wreck.author       = "Squad";
                            wreck.manufacturer = "Squad";
                            wreck.description  = "Squad original " + wreck.title;

                            wreck.isSquad = true;
                            wreck.prefab  = transform.gameObject;
                            //wreck.prefab.GetComponent<Transform>().parent = null;
                            StaticDatabase.RegisterModel(wreck, wreck.name);
                        }
                    }
                }
            }
        }
コード例 #24
0
        /// <summary>
        /// Loads the individual components of the desert Airfield into the static database
        /// </summary>
        public static void LoadDesertSiteAssets()
        {
            List <string> allStatics = new List <string> {
                "Model", ""
            };


            foreach (PQSCity2 pqs2 in Resources.FindObjectsOfTypeAll <PQSCity2>())
            {
                if (pqs2.gameObject == null)
                {
                    continue;
                }

                if (pqs2.gameObject.name != "Desert_Airfield")
                {
                    continue;
                }

                Log.Normal("found PQS2 " + pqs2.gameObject.name);

                GameObject baseGameObject = pqs2.gameObject;
                foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true))
                {
                    if (child.parent == null)
                    {
                        continue;
                    }

                    // we only want to be one level down.
                    if (child.parent.gameObject != baseGameObject)
                    {
                        continue;
                    }

                    Log.Normal("found child " + child.gameObject.name);

                    if (child.gameObject.name == "Model")
                    {
                        string modelName  = "SQUAD_Desert_Runway";
                        string modelTitle = "Squad Desert Runway";

                        // don't double register the models a second time (they will do this)
                        // maybe with a "without green flag" and filter that our later at spawn in mangle
                        if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                        {
                            continue;
                        }


                        StaticModel model = new StaticModel();
                        model.name = modelName;

                        // Fill in FakeNews errr values
                        model.path         = "KerbalKonstructs/" + modelName;
                        model.configPath   = model.path + ".cfg";
                        model.keepConvex   = true;
                        model.title        = modelTitle;
                        model.mesh         = modelName;
                        model.category     = "Squad Desert";
                        model.author       = "Squad";
                        model.manufacturer = "Squad";
                        model.description  = "Squad original " + modelTitle;

                        model.isSquad = true;

                        model.DefaultLaunchPadTransform = "End09/SpawnPoint";

                        // we reference only the original prefab, as we cannot instantiate an instance for some reason
                        model.prefab = GameObject.Instantiate(child.gameObject);
                        GameObject.DontDestroyOnLoad(model.prefab);
                        model.prefab.SetActive(false);

                        StaticDatabase.RegisterModel(model, modelName);
                    }

                    if (child.gameObject.name == "GroundObjects")
                    {
                        GameObject baseObject = child.gameObject;

                        foreach (var child2 in baseGameObject.GetComponentsInChildren <Transform>(true))
                        {
                            if (child2.parent == null)
                            {
                                continue;
                            }

                            // we only want to be one level down.
                            if (child2.parent.gameObject != baseObject)
                            {
                                continue;
                            }

                            //Filter out multiple instances or boken stuff
                            if (child2.gameObject.name.Contains("(") || child2.gameObject.name.Contains("windmill"))
                            {
                                continue;
                            }


                            //Log.Normal("found child2 " + child2.gameObject.name);

                            string modelName  = "SQUAD_" + pqs2.gameObject.name + "_" + child2.gameObject.name;
                            string modelTitle = "Squad " + pqs2.gameObject.name + " " + child2.gameObject.name;

                            // don't double register the models a second time (they will do this)
                            // maybe with a "without green flag" and filter that our later at spawn in mangle
                            if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                            {
                                continue;
                            }

                            StaticModel model = new StaticModel();
                            model.name = modelName;

                            // Fill in FakeNews errr values
                            model.path         = "KerbalKonstructs/" + modelName;
                            model.configPath   = model.path + ".cfg";
                            model.keepConvex   = true;
                            model.title        = modelTitle;
                            model.mesh         = modelName;
                            model.category     = "Squad Desert";
                            model.author       = "Squad";
                            model.manufacturer = "Squad";
                            model.description  = "Squad original " + modelTitle;

                            model.isSquad = true;

                            // we reference only the original prefab, as we cannot instantiate an instance for some reason
                            model.prefab = GameObject.Instantiate(child2.gameObject);
                            GameObject.DontDestroyOnLoad(model.prefab);
                            model.prefab.SetActive(false);

                            StaticDatabase.RegisterModel(model, modelName);
                        }
                    }
                }
            }
        }
コード例 #25
0
 /// <summary>
 /// CallBack Functions for Group Selection
 /// </summary>
 /// <param name="newGroup"></param>
 internal void SetGroup(GroupCenter newGroup)
 {
     Log.Normal("setting Group from " + selectedInstance.groupCenter.Group + " to " + newGroup.Group);
     StaticDatabase.ChangeGroup(selectedInstance, newGroup);
     ApplySettings();
 }
コード例 #26
0
        void UpdateUI()
        {
            landingGuide.SetIsOnWithoutNotify(LandingGuideUI.instance.IsOpen());
            navGuidance.SetIsOnWithoutNotify(NavGuidanceSystem.instance.IsOpen());

            var Range = float.PositiveInfinity;

            //FIXME atmo scaling? other worlds? ...
            if (FlightGlobals.ActiveVessel.altitude > 75000)
            {
                center = null;
                noBasesBeacon.SetActive(true);
                noNearestBase.SetActive(false);
                nearestBaseGroup.SetActive(false);
            }
            else
            {
                center = StaticDatabase.GetClosestLaunchCenter();;
                if (center == null)
                {
                    noBasesBeacon.SetActive(false);
                    noNearestBase.SetActive(true);
                    nearestBaseGroup.SetActive(false);
                }
                else
                {
                    noBasesBeacon.SetActive(false);
                    noNearestBase.SetActive(false);
                    nearestBaseGroup.SetActive(true);

                    Vector3 vPosition = FlightGlobals.ActiveVessel.GetTransform().position;
                    ngsSite = LaunchSiteManager.getNearestBase(center, vPosition);
                    Range   = Vector3.Distance(center.gameObject.transform.position, vPosition);
                    string info;
                    if (Range < 10000)
                    {
                        info = center.Group + " at " + Range.ToString("#0.0") + " m";
                    }
                    else
                    {
                        info = center.Group + " at " + (Range / 1000).ToString("#0.0") + " km";
                    }
                    nearestBase.Info(info);
                    bool ngs = NavGuidanceSystem.instance.IsOpen();
                    ngsFiller.SetActive(!ngs);
                    setNGSTarget.SetActive(ngs);
                }
            }

            if (!MiscUtils.isCareerGame())
            {
                careerGroup.SetActive(false);
            }
            else
            {
                careerGroup.SetActive(true);

                if (!FlightGlobals.ActiveVessel.Landed || Range > 5000)
                {
                    //FIXME a bouncy landing will be laggy
                    if (launchsiteItems.Count > 0)
                    {
                        launchsiteItems.Clear();
                        UIKit.UpdateListContent(launchsiteItems);
                    }
                    basesCanBeOpened.SetActive(true);
                    openSite.SetActive(false);
                    siteIsOpen.SetActive(false);
                    siteCannoteBeOpened.SetActive(false);
                }
                else
                {
                    basesCanBeOpened.SetActive(false);
                    if (launchsiteItems.Count != center.launchsites.Count)
                    {
                        BuildLaunchsites();
                    }
                    UpdateLaunchsite();
                }

                //if (Range > 100000)
                //{
                //    if (bLanded)
                //    {
                //        GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4));
                //        GUILayout.Space(2);
                //        GUILayout.Label("This feature is WIP.", LabelInfo);
                //        GUI.enabled = false;
                //        if (GUILayout.Button("Found a New Base", GUILayout.Height(23)))
                //        {
                //            foundingBase = true;
                //        }
                //        GUI.enabled = true;
                //        GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4));
                //        GUILayout.Space(2);
                //    }
                //}
                //else
                //{
                //    GUILayout.Label("This feature is WIP.", LabelInfo);
                //}
            }

            UpdateFaclilitiesGroup();
        }
コード例 #27
0
        public static void MangleTrackingDishes()
        {
            // StrackingStation LV1
            //
            StaticModel model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_1");
            List <DishController.Dish> dishes = new List <DishController.Dish>();

            DishController controller = model.prefab.AddComponent <DishController>();

            controller.fakeTimeWarp = 1f;
            controller.maxSpeed     = 10f;
            controller.maxElevation = 20f;
            controller.minElevation = -70f;

            foreach (Transform dishTransform in model.prefab.transform.FindAllRecursive("TS_dish"))
            {
                Log.Normal("Dish: Found Dish");
                DishController.Dish dish = new DishController.Dish();

                dish.elevationTransform = dishTransform.FindRecursive("dish_antenna");
                //dish.elevationInit = new Quaternion();
                dish.rotationTransform = dishTransform.FindRecursive("dish_support");

                dish.elevationTransform.parent = dish.rotationTransform;

                dishes.Add(dish);
            }
            controller.dishes  = dishes.ToArray();
            controller.enabled = true;


            // StrackingStation LV2
            //
            model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_2");
            dishes.Clear();

            controller = model.prefab.AddComponent <DishController>();

            controller.fakeTimeWarp = 1f;
            controller.maxSpeed     = 10f;
            controller.maxElevation = 20f;
            controller.minElevation = -70f;

            foreach (Transform dishTransform in model.prefab.transform.FindAllRecursive("TS_dish"))
            {
                Log.Normal("Dish: Found Dish");
                DishController.Dish dish = new DishController.Dish();

                dish.elevationTransform = dishTransform.FindRecursive("dish_antenna");
                //dish.elevationInit = new Quaternion();
                dish.rotationTransform = dishTransform.FindRecursive("dish_support");

                dish.elevationTransform.parent = dish.rotationTransform;

                dishes.Add(dish);
            }
            controller.dishes  = dishes.ToArray();
            controller.enabled = true;


            // Extract LV3 Dish as Extra Dish
            model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_3");

            Transform   dishNorth = model.prefab.transform.FindRecursive("dish_north");
            string      modelName = "SQUAD_LV3_Tracking_Dish";
            StaticModel dishModel = new StaticModel();

            dishModel.prefab = dishNorth.gameObject;
            // dishModel.prefab.transform.parent = null;
            dishModel.name         = modelName;
            dishModel.path         = "KerbalKonstructs/" + modelName;
            dishModel.configPath   = model.path + ".cfg";
            dishModel.keepConvex   = true;
            dishModel.title        = "TrackingStation Lv3 Dish";
            dishModel.mesh         = modelName;
            dishModel.category     = "Dish";
            dishModel.author       = "Squad";
            dishModel.manufacturer = "Squad";
            dishModel.description  = "Squad original TrackingStation Lv3 Dish";

            dishModel.isSquad = true;

            StaticDatabase.RegisterModel(dishModel, dishModel.name);
        }
コード例 #28
0
        /// <summary>
        /// Instance Editor window
        /// </summary>
        /// <param name="windowID"></param>
        void InstanceEditorWindow(int windowID)
        {
            UpdateVectors();

            GUILayout.BeginHorizontal();
            {
                GUI.enabled = false;
                GUILayout.Button("-KK-", UIMain.DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUILayout.Button("Instance Editor", UIMain.DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUI.enabled = true;

                if (GUILayout.Button("X", UIMain.DeadButtonRed, GUILayout.Height(21)))
                {
                    //KerbalKonstructs.instance.saveObjects();
                    KerbalKonstructs.DeselectObject(true, true);
                    //this.Close();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));

            GUILayout.Space(2);

            GUILayout.BeginHorizontal();

            GUILayout.Button(selectedInstance.model.title + " (" + selectedInstance.indexInGroup.ToString() + ")", GUILayout.Height(23));

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Position");
                GUILayout.FlexibleSpace();

                if (GUILayout.Button(new GUIContent(tCopyPos, "Copy Position"), GUILayout.Width(23), GUILayout.Height(23)))
                {
                    savedpos      = true;
                    savedPosition = selectedInstance.transform.localPosition;
                    savedRotation = selectedInstance.transform.localEulerAngles;
                    // Debug.Log("KK: Instance position copied");
                }
                if (GUILayout.Button(new GUIContent(tPastePos, "Paste Position"), GUILayout.Width(23), GUILayout.Height(23)))
                {
                    if (savedpos)
                    {
                        selectedInstance.transform.localPosition    = savedPosition;
                        selectedInstance.transform.localEulerAngles = savedRotation;
                        ApplySettings();
                        // Debug.Log("KK: Instance position pasted");
                    }
                }


                if (GUILayout.Button(new GUIContent(tSnap, "Snap to Target"), GUILayout.Width(23), GUILayout.Height(23)))
                {
                    if (StaticsEditorGUI.instance.snapTargetInstance == null)
                    {
                        Log.UserError("No Snaptarget selected");
                    }
                    else
                    {
                        selectedInstance.transform.localPosition    = StaticsEditorGUI.instance.snapTargetInstance.transform.localPosition;
                        selectedInstance.transform.localEulerAngles = StaticsEditorGUI.instance.snapTargetInstance.transform.localEulerAngles;

                        ApplySettings();
                    }
                }


                GUILayout.FlexibleSpace();

                GUILayout.Label("Increment");
                increment = float.Parse(GUILayout.TextField(increment.ToString(), 5, GUILayout.Width(48)));

                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("0.001", GUILayout.Height(18)))
                {
                    increment = 0.001f;
                }
                if (GUILayout.Button("0.01", GUILayout.Height(18)))
                {
                    increment = 0.01f;
                }
                if (GUILayout.Button("0.1", GUILayout.Height(18)))
                {
                    increment = 0.1f;
                }
                if (GUILayout.Button("1", GUILayout.Height(18)))
                {
                    increment = 1f;
                }
                if (GUILayout.Button("10", GUILayout.Height(18)))
                {
                    increment = 10f;
                }
                if (GUILayout.Button("25", GUILayout.Height(16)))
                {
                    increment = 25f;
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
            }
            GUILayout.EndHorizontal();


            //
            // Set reference butons
            //
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Reference System: ");
                GUILayout.Label(referenceSystem.ToString(), UIMain.LabelWhite);
                GUILayout.FlexibleSpace();
                GUI.enabled = (referenceSystem == Reference.Center);

                if (GUILayout.Button(new GUIContent(UIMain.iconCubes.texture, "Model"), GUILayout.Height(23), GUILayout.Width(23)))
                {
                    referenceSystem = Reference.Model;
                    UpdateGizmo();
                    UpdateVectors();
                }

                GUI.enabled = (referenceSystem == Reference.Model);
                if (GUILayout.Button(new GUIContent(UIMain.iconWorld.texture, "Group Center"), GUILayout.Height(23), GUILayout.Width(23)))
                {
                    referenceSystem = Reference.Center;
                    UpdateGizmo();
                    UpdateVectors();
                }
                GUI.enabled = true;
            }
            GUILayout.EndHorizontal();
            //
            // Model Switching
            //
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Selected Variant: ");
                GUI.enabled = (selectedInstance.model.hasVariants);
                string vaiantstring = (String.IsNullOrEmpty(selectedInstance.VariantName)) ? "N.A." : selectedInstance.VariantName;

                if (GUILayout.Button(vaiantstring, GUILayout.Width(150), GUILayout.Height(21)))
                {
                    VariantSelector.staticInstance = selectedInstance;
                    VariantSelector.Open();
                }
                GUI.enabled = true;
                GUILayout.FlexibleSpace();
            }
            GUILayout.EndHorizontal();
            //
            // Position editing
            //
            GUILayout.BeginHorizontal();


            GUILayout.Label("Back / Fwd:");
            GUILayout.FlexibleSpace();
            posZStr = (GUILayout.TextField(posZStr, 11, GUILayout.Width(fTempWidth)));

            if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.back * increment);
            }
            if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.forward * increment);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Left / Right:");
            GUILayout.FlexibleSpace();
            posXStr = (GUILayout.TextField(posXStr, 11, GUILayout.Width(fTempWidth)));
            if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.left * increment);
            }
            if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.right * increment);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Down / Up:");
            GUILayout.FlexibleSpace();
            posYStr = (GUILayout.TextField(posYStr, 11, GUILayout.Width(fTempWidth)));
            if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.down * increment);
            }
            if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21)))
            {
                SetTransform(Vector3.up * increment);
            }



            GUILayout.EndHorizontal();

            GUI.enabled = true;


            if (GUILayout.Button("Snap to Terrain", GUILayout.Height(21)))
            {
                Vector3 pos = selectedInstance.CelestialBody.GetWorldSurfacePosition(selectedInstance.RefLatitude, selectedInstance.RefLongitude, selectedInstance.surfaceHeight);
                selectedInstance.transform.position = pos;

                ApplySettings();
            }


            GUI.enabled = true;


            GUILayout.Space(5);



            //
            // Orientation quick preset
            //
            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));
            GUILayout.Space(2);
            //GUILayout.BeginHorizontal();
            //{
            //    GUILayout.Label("Euler Rot.");
            //    GUILayout.FlexibleSpace();
            //    GUILayout.Label("X", GUILayout.Height(18));
            //    oriXStr = (GUILayout.TextField(oriXStr, 6, GUILayout.Width(48), GUILayout.Height(18)));
            //    GUILayout.Label("Y", GUILayout.Height(18));
            //    oriYStr = (GUILayout.TextField(oriYStr, 6, GUILayout.Width(48), GUILayout.Height(18)));
            //    GUILayout.Label("Z", GUILayout.Height(18));
            //    oriZStr = (GUILayout.TextField(oriZStr, 6, GUILayout.Width(48), GUILayout.Height(18)));

            //}
            //GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Orientation:");
                GUILayout.FlexibleSpace();
                if (GUILayout.Button(new GUIContent("Zero", "Zero Rotation"), GUILayout.Height(21), GUILayout.Width(50)))
                {
                    selectedInstance.transform.localEulerAngles = Vector3.zero;
                    ApplySettings();
                }

                if (GUILayout.Button(new GUIContent("C-U", "allign UP to GroupCenter Up-vector"), GUILayout.Height(21), GUILayout.Width(50)))
                {
                    Vector3    newfwd   = Vector3.ProjectOnPlane(selectedInstance.transform.forward, selectedInstance.transform.parent.up).normalized;
                    Quaternion rotation = new Quaternion();
                    rotation.SetLookRotation(newfwd, selectedInstance.transform.parent.up);

                    selectedInstance.transform.rotation = rotation;

                    ApplySettings();
                }
            }

            if (GUILayout.Button(new GUIContent("P-U", "alling UP to Position-Up"), GUILayout.Height(21), GUILayout.Width(50)))
            {
                Vector3    newfwd   = Vector3.ProjectOnPlane(selectedInstance.transform.forward, upVector).normalized;
                Quaternion rotation = new Quaternion();
                rotation.SetLookRotation(newfwd, upVector);

                selectedInstance.transform.rotation = rotation;

                ApplySettings();
            }

            GUILayout.EndHorizontal();

            //
            // Orientation adjustment
            //
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Pitch:");
                GUILayout.FlexibleSpace();

                fTempWidth = 80f;
                oriXStr    = (GUILayout.TextField(oriXStr, 8, GUILayout.Width(fTempWidth)));
                if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21)))
                {
                    SetRotation(Vector3.right, increment);
                }
                if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21)))
                {
                    SetRotation(Vector3.left, increment);
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Roll:");
                GUILayout.FlexibleSpace();
                oriZStr = (GUILayout.TextField(oriZStr, 8, GUILayout.Width(fTempWidth)));
                if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21)))
                {
                    SetRotation(Vector3.forward, increment);
                }
                if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21)))
                {
                    SetRotation(Vector3.back, increment);
                }
            }
            GUILayout.EndHorizontal();


            //
            // Rotation
            //
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Yaw:");
                GUILayout.FlexibleSpace();
                //                    rotStr = GUILayout.TextField(rotStr, 9, GUILayout.Width(fTempWidth));
                //  GUILayout.Box(Vector3.Angle(Vector3.ProjectOnPlane(selectedInstance.gameObject.transform.forward, selectedInstance.gameObject.transform.up), selectedInstance.gameObject.transform.parent.forward).ToString(),  GUILayout.Width(fTempWidth));
                //GUILayout.Box(GetHeading(), GUILayout.Width(fTempWidth));
                oriYStr = (GUILayout.TextField(oriYStr, 8, GUILayout.Width(fTempWidth)));

                if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    SetRotation(Vector3.up, -increment);
                }
                if (GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    SetRotation(Vector3.up, -increment);
                }
                if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    SetRotation(Vector3.up, increment);
                }
                if (GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    SetRotation(Vector3.up, increment);
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Heading: ", GUILayout.Height(23));
                GUILayout.Space(5);
                GUILayout.Button(instanceHeading.ToString(), UIMain.DeadButton, GUILayout.Height(23));
                GUILayout.FlexibleSpace();
            }
            GUILayout.EndHorizontal();


            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));
            GUILayout.Space(2);
            //
            // Scale
            //
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Model Scale: ");
                GUILayout.FlexibleSpace();
                selectedInstance.ModelScale = Math.Max(0.01f, float.Parse(GUILayout.TextField(selectedInstance.ModelScale.ToString(), 4, GUILayout.Width(fTempWidth))));

                if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    selectedInstance.ModelScale = Math.Max(0.01f, selectedInstance.ModelScale - increment);
                    ApplySettings();
                }
                if (GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    selectedInstance.ModelScale = Math.Max(0.01f, selectedInstance.ModelScale - increment);
                    ApplySettings();
                }
                if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    selectedInstance.ModelScale += increment;
                    ApplySettings();
                }
                if (GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(23)))
                {
                    selectedInstance.ModelScale += increment;
                    ApplySettings();
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.Space(5);



            GUI.enabled = true;



            if (GUILayout.Button("Facility Type: " + selectedInstance.facilityType.ToString(), GUILayout.Height(23)))
            {
                if (!FacilityEditor.instance.IsOpen())
                {
                    FacilityEditor.instance.Open();
                }
            }

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("GrasColor: ", GUILayout.Height(23));
                GUILayout.FlexibleSpace();

                GUI.enabled = ((grasColorEnabled || grassColor2Enabled) && (!UI2.GrassEditor.isOpen || GrassColorUI.instance.IsOpen()));
                if (GUILayout.Button("Preset", GUILayout.Width(90), GUILayout.Height(23)))
                {
                    if (grasColorEnabled)
                    {
                        GrassColorPresetUI.callBack   = GrassColorUI.instance.UpdateCallBack;
                        GrassColorUI.selectedInstance = selectedInstance;
                        GrassColorUI.instance.SetupFields();
                        GrassColorPresetUI.instance.Open();
                    }
                    if (grassColor2Enabled)
                    {
                        GrassColorPresetUI2.callBack = grassMod2.UpdateCallBack;
                        GrassColorPresetUI2.instance.Open();
                    }
                }

                if (GUILayout.Button("Edit", GUILayout.Width(90), GUILayout.Height(23)))
                {
                    if (grasColorEnabled)
                    {
                        GrassColorUI.instance.Open();
                    }
                    if (grassColor2Enabled)
                    {
                        UI2.GrassEditor.Open();
                    }
                }

                GUI.enabled = true;
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Set Group: ", GUILayout.Height(23));
                GUILayout.FlexibleSpace();

                if (GUILayout.Button(selectedInstance.Group, GUILayout.Width(185), GUILayout.Height(23)))
                {
                    GroupSelectorUI.instance.Close();
                    GroupSelectorUI.showOnlyLocal = true;
                    GroupSelectorUI.titleText     = "Select a new Group";
                    GroupSelectorUI.callBack      = SetGroup;
                    GroupSelectorUI.instance.Open();
                }
            }
            GUILayout.EndHorizontal();



            GUILayout.Space(3);

            GUILayout.BeginHorizontal();
            {
                enableColliders = GUILayout.Toggle(enableColliders, "Enable Colliders", GUILayout.Width(140), GUILayout.Height(23));

                if (enableColliders != enableColliders2)
                {
                    selectedInstance.ToggleAllColliders(enableColliders);
                    enableColliders2 = enableColliders;
                }

                GUILayout.FlexibleSpace();

                if (GUILayout.Button("Duplicate", GUILayout.Width(130), GUILayout.Height(23)))
                {
                    selectedInstance.SaveConfig();
                    KerbalKonstructs.DeselectObject(true, true);
                    SpawnInstance(selectedInstance.model, selectedInstance.groupCenter, selectedInstance.position, selectedInstance.Orientation);
                    MiscUtils.HUDMessage("Spawned duplicate " + selectedInstance.model.title, 10, 2);
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(5);

            GUILayout.BeginHorizontal();
            {
                bool isScanable2 = GUILayout.Toggle(selectedInstance.isScanable, "Static will show up on anomaly scanners", GUILayout.Width(250), GUILayout.Height(23));
                if (isScanable2 != selectedInstance.isScanable)
                {
                    selectedInstance.isScanable = isScanable2;
                    ApplySettings();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(6);



            GUI.enabled = true;

            GUI.enabled = !LaunchSiteEditor.instance.IsOpen();
            // Make a new LaunchSite here:

            if (!selectedInstance.hasLauchSites && string.IsNullOrEmpty(selectedInstance.model.DefaultLaunchPadTransform))
            {
                GUI.enabled = false;
            }

            if (GUILayout.Button((selectedInstance.hasLauchSites ? "Edit" : "Make") + " Launchsite", GUILayout.Height(23)))
            {
                LaunchSiteEditor.instance.Open();
            }
            GUILayout.FlexibleSpace();

            GUI.enabled = true;

            GUILayout.BeginHorizontal();
            {
                if (GUILayout.Button("Save", GUILayout.Width(110), GUILayout.Height(23)))
                {
                    selectedInstance.SaveConfig();
                    MiscUtils.HUDMessage("Saved changes to this object.", 10, 2);
                }
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Save&Close", GUILayout.Width(110), GUILayout.Height(23)))
                {
                    selectedInstance.SaveConfig();
                    MiscUtils.HUDMessage("Saved changes to this object.", 10, 2);
                    KerbalKonstructs.DeselectObject(true, true);
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(10);


            GUILayout.BeginHorizontal();
            {
                if (GUILayout.Button("Revert changes", GUILayout.Height(21)))
                {
                    if (selectedInstance.groupCenter != origCenter)
                    {
                        StaticDatabase.ChangeGroup(selectedInstance, origCenter);
                    }
                    selectedInstance.RelativePosition           = origPosition;
                    selectedInstance.transform.localPosition    = origPosition;
                    selectedInstance.transform.localEulerAngles = origRotation;
                    selectedInstance.Orientation = origRotation;
                    selectedInstance.ModelScale  = origScale;
                    ApplySettings();
                }
                if (GUILayout.Button("Delete Instance", GUILayout.Height(21)))
                {
                    DeleteInstance();
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.Space(5);



            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));

            GUILayout.Space(2);

            if (GUI.tooltip != "")
            {
                var labelSize = GUI.skin.GetStyle("Label").CalcSize(new GUIContent(GUI.tooltip));
                GUI.Box(new Rect(Event.current.mousePosition.x - (25 + (labelSize.x / 2)), Event.current.mousePosition.y - 40, labelSize.x + 10, labelSize.y + 5), GUI.tooltip);
            }

            GUI.DragWindow(new Rect(0, 0, 10000, 10000));
        }
コード例 #29
0
        /// <summary>
        /// used for loading the pyramid parts
        /// </summary>
        public static void LoadSquadAnomaliesLevel3()
        {
            foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>())
            {
                if (pqs.gameObject.name != "Pyramids")
                {
                    continue;
                }


                // find the lv2 parent
                GameObject baseGameObject  = pqs.gameObject;
                GameObject baseGameObject2 = null;

                foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true))
                {
                    // we only want to be one level down.
                    if (child.parent.gameObject != baseGameObject)
                    {
                        continue;
                    }
                    else
                    {
                        baseGameObject2 = child.gameObject;
                    }
                }


                foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true))
                {
                    // we only want to be one level down.
                    if (child.parent.gameObject != baseGameObject2)
                    {
                        continue;
                    }

                    string modelName  = "SQUAD_" + pqs.gameObject.name + "_" + child.gameObject.name;
                    string modelTitle = "Squad " + pqs.gameObject.name + " " + child.gameObject.name;

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad Anomalies";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;


                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    model.prefab = child.gameObject;


                    StaticDatabase.RegisterModel(model, modelName);
                }
            }
        }
コード例 #30
0
        /// <summary>
        /// Loads the statics of the KSC2
        /// </summary>
        public static void LoadSquadAnomaliesLevel2()
        {
            foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>())
            {
                if (pqs.gameObject.name != "KSC2" && pqs.gameObject.name != "Pyramids" && pqs.gameObject.name != "CommNetDish")
                {
                    continue;
                }

                GameObject baseGameObject = pqs.gameObject;
                foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true))
                {
                    // we only want to be one level down.
                    if (child.parent.gameObject != baseGameObject)
                    {
                        continue;
                    }

                    string modelName  = "SQUAD_" + pqs.gameObject.name + "_" + child.gameObject.name;
                    string modelTitle = "Squad " + pqs.gameObject.name + " " + child.gameObject.name;

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    // filter out some unneded stuff
                    if (modelName.Contains("ollider") || modelName.Contains("onolit"))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad Anomalies";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;

                    if (model.name.Equals("SQUAD_KSC2_launchpad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "PlatformPlane";
                    }

                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    model.prefab = child.gameObject;
                    //model.prefab = GameObject.Instantiate(child.gameObject);
                    //GameObject.DontDestroyOnLoad(model.prefab);
                    //model.prefab.SetActive(false);

                    StaticDatabase.RegisterModel(model, modelName);
                }
            }
        }