Example #1
0
        internal static void ApplyVariant(StaticInstance instance)
        {
            if (!instance.model.hasVariants || String.IsNullOrEmpty(instance.VariantName))
            {
                return;
            }

            if (!(instance.model.variants.ContainsKey(instance.VariantName)))
            {
                Log.UserError("Cannot find variant: " + instance.VariantName + "on model " + instance.model.name);
                return;
            }

            ModelVariant variant = instance.model.variants[instance.VariantName];

            // apply Textures before altering them later
            foreach (AdvancedTextures advTexture in instance.gameObject.GetComponentsInChildren <AdvancedTextures>(true))
            {
                advTexture.Start();
            }


            variant.AlterTexture(instance.mesh);

            variant.DeactivateGameObjects(instance.mesh);

            if (instance == UI.EditorGUI.selectedInstance)
            {
                instance.gameObject.BroadcastMessage("StaticObjectUpdate");
            }
        }
Example #2
0
        internal static void ParseModelConfig(StaticModel target, ConfigNode cfgNode)
        {
            if (!ConfigUtil.initialized)
            {
                ConfigUtil.InitTypes();
            }

            foreach (var field in ConfigUtil.modelFields.Values)
            {
                ConfigUtil.ReadCFGNode(target, field, cfgNode);
            }

            foreach (ConfigNode variNode in cfgNode.GetNodes("VARIANT"))
            {
                Log.Normal("found variant: " + variNode.GetValue("name"));
                ModelVariant variant = new ModelVariant(target, variNode);

                if (string.IsNullOrEmpty(variant.name))
                {
                    Log.UserError("model " + target.name + " has a variant without a name");
                    continue;
                }

                if (!target.variants.ContainsKey(variant.name))
                {
                    Log.Normal("added variant: " + variant.name);
                    target.variants.Add(variant.name, variant);
                }
                else
                {
                    Log.UserError("model " + target.name + " already has a vaiant with name: " + variant.name);
                }
            }
        }
Example #3
0
        internal static GameObject SpawnVariant(StaticInstance instance)
        {
            if (instance.model.hasVariants)
            {
                if (!String.IsNullOrEmpty(instance.VariantName))
                {
                    if (instance.model.variants.ContainsKey(instance.VariantName))
                    {
                        ModelVariant variant = instance.model.variants[instance.VariantName];
                        if (String.IsNullOrEmpty(variant.newMeshName))
                        {
                            variant.newMeshName = instance.model.mesh;
                            variant.prefab      = instance.model.prefab;
                        }
                        else
                        {
                            variant.prefab = GameDatabase.Instance.GetModelPrefab(instance.model.path + "/" + variant.newMeshName);
                            if (variant.prefab == null)
                            {
                                Log.UserError("Could not find " + instance.model.path + "/" + variant.newMeshName + ".mu! Did the modder forget to include it or did you actually install it?");
                            }
                        }

                        return(GameObject.Instantiate(variant.prefab));
                    }
                    else
                    {
                        Log.UserError("Cannot find variant: " + instance.VariantName + "on model " + instance.model.name);
                        return(null);
                    }
                }
                else
                {
                    // Default is the first one
                    instance.VariantName = instance.model.variants.Keys.ToArray()[0];
                    return(SpawnVariant(instance));
                }
            }
            else
            {
                return(GameObject.Instantiate(instance.model.prefab));
            }
        }
        private void Spawn()
        {
            CelestialBody.CBUpdate();
            isSpawned = true;

            mesh = ModelVariant.SpawnVariant(this);
            {
                if (_mesh == null)
                {
                    Log.UserError("Cannot spawn 3dModel of Instance: " + model.name);
                    Destroy();
                    return;
                }
            }

            if (model.isSquad)
            {
                InstanceUtil.MangleSquadStatic(this);
            }
            InstanceUtil.SetLayerRecursively(this, 15);

            mesh.SetActive(true);

            //Scaling
            origScale = gameObject.transform.localScale;             // save the original scale for later use
            gameObject.transform.localScale *= ModelScale;

            foreach (StaticModule module in model.modules)
            {
                moduleKey = (module.moduleNamespace + "_" + module.moduleClassname);
                Type moduleType;
                if (staticModules.ContainsKey(moduleKey))
                {
                    moduleType = staticModules[moduleKey];
                }
                else
                {
                    moduleType = AssemblyLoader.loadedAssemblies.SelectMany(asm => asm.assembly.GetTypes()).FirstOrDefault(t => t.Namespace == module.moduleNamespace && t.Name == module.moduleClassname);
                    staticModules.Add(moduleKey, moduleType);
                }

                StaticModule mod = mesh.AddComponent(moduleType) as StaticModule;

                if (mod != null)
                {
                    mod.enabled        = false;
                    mod.staticInstance = this;
                    foreach (string fieldName in module.moduleFields.Keys)
                    {
                        FieldInfo field = mod.GetType().GetField(fieldName);
                        if (field != null)
                        {
                            field.SetValue(mod, Convert.ChangeType(module.moduleFields[fieldName], field.FieldType));
                        }
                        else
                        {
                            Log.UserWarning("Field " + fieldName + " does not exist in " + module.moduleClassname);
                        }
                    }
                    //myStaticModules.Add(mod);
                }
                else
                {
                    Log.UserError("Module " + module.moduleClassname + " could not be loaded in " + gameObject.name);
                }
            }


            foreach (Renderer renderer in gameObject.GetComponentsInChildren <Renderer>(true))
            {
                renderer.enabled = true;
                AdvancedTextures.CheckForExistingMaterial(renderer);
            }

            ModelVariant.ApplyVariant(this);

            //Make LaunchSites more sturdy
            if (!model.isSquad)
            {
                Destructable.MakeDestructable(this);
                if (hasLauchSites)
                {
                    destructible.impactMomentumThreshold = Math.Max(destructible.impactMomentumThreshold, 3000f);
                    launchSite.AttachSelector();
                }
            }

            foreach (var facility in myFacilities)
            {
                facility.AttachSelector();
            }
        }