示例#1
0
        private void constructSingleModel(Transform parent, ModelOrientation orientation, bool reUse)
        {
            String modelName = modelDefinition.modelName;

            if (String.IsNullOrEmpty(modelName))//no model to setup
            {
                return;
            }
            if (reUse)
            {
                Transform tr = parent.transform.FindModel(modelDefinition.modelName);
                if (tr != null)
                {
                    tr.name            = modelDefinition.modelName;
                    tr.gameObject.name = modelDefinition.modelName;
                }
                model = tr == null ? null : tr.gameObject;
            }
            if (!String.IsNullOrEmpty(modelName) && model == null)
            {
                model = SSTUUtils.cloneModel(modelName);
            }
            if (model != null)
            {
                model.transform.NestToParent(parent);
                if ((modelDefinition.invertForTop && orientation == ModelOrientation.TOP) || (modelDefinition.invertForBottom && orientation == ModelOrientation.BOTTOM))
                {
                    model.transform.Rotate(modelDefinition.invertAxis, 180, Space.Self);
                }
            }
            else
            {
                MonoBehaviour.print("ERROR: Could not locate model for name: " + modelName);
            }
        }
示例#2
0
        public void setupModel(Part part, Transform baseTransform, Transform targetRotator)
        {
            this.partTransform = part.transform;

            String suffix = (main ? "-main-" : "-drogue-") + index;

            retractedTarget = targetRotator.FindOrCreate("ParachuteRetractedTarget" + suffix).gameObject;
            retractedTarget.transform.NestToParent(targetRotator);
            retractedTarget.transform.localPosition = new Vector3(-retractedUpVector.x, -retractedUpVector.z, retractedUpVector.y);

            semiDeployedTarget = targetRotator.FindOrCreate("ParachuteSemiDeployTarget" + suffix).gameObject;
            semiDeployedTarget.transform.NestToParent(targetRotator);
            semiDeployedTarget.transform.localPosition = new Vector3(-semiDeployedUpVector.x, -semiDeployedUpVector.z, semiDeployedUpVector.y);

            fullDeployedTarget = targetRotator.FindOrCreate("ParachuteFullDeployTarget" + suffix).gameObject;
            fullDeployedTarget.transform.NestToParent(targetRotator);
            fullDeployedTarget.transform.localPosition = new Vector3(-fullDeployedUpVector.x, -fullDeployedUpVector.z, fullDeployedUpVector.y);

            parachutePivot = baseTransform.FindOrCreate("ParachuteSpacingPivot" + suffix).gameObject;
            parachutePivot.transform.NestToParent(baseTransform);
            parachutePivot.transform.localPosition = new Vector3(localPosition.x, localPosition.y, -localPosition.z);//TODO -- why does this need to be inverted?

            Transform modelTransform = parachutePivot.transform.FindRecursive(modelName);

            if (modelTransform == null)
            {
                baseModel = SSTUUtils.cloneModel(modelName);
            }
            else
            {
                baseModel = modelTransform.gameObject;
            }
            baseModel.transform.NestToParent(parachutePivot.transform);
            if (!String.IsNullOrEmpty(texture))
            {
                SSTUUtils.setMainTextureRecursive(baseModel.transform, GameDatabase.Instance.GetTexture(texture, false));
            }

            Transform tr = baseModel.transform.FindRecursive(definition.capName);

            if (tr == null)
            {
                MonoBehaviour.print("ERROR: Could not locate transform for cap name: " + definition.capName);
            }
            capModel = tr.gameObject;
            tr       = baseModel.transform.FindRecursive(definition.lineName);
            if (tr == null)
            {
                MonoBehaviour.print("ERROR: Could not locate transform for line name: " + definition.lineName);
            }
            lineModel = tr.gameObject;

            Vector3 lookDir = (-(parachutePivot.transform.position - semiDeployedTarget.transform.position));

            lookDir.Normalize();
            parachutePivot.transform.rotation = Quaternion.LookRotation(lookDir, part.transform.forward);
            prevWind = parachutePivot.transform.rotation;
            baseModel.transform.localRotation = Quaternion.AngleAxis(-90, Vector3.left);
        }
示例#3
0
 private void setupModel()
 {
     if (!String.IsNullOrEmpty(modelDefinition.modelName))
     {
         Transform  baseTransform = getBaseTransform();
         GameObject model         = SSTUUtils.cloneModel(modelDefinition.modelName);
         model.transform.NestToParent(baseTransform);
         model.transform.localScale = new Vector3(scale, scale, scale);
     }
 }
        public override void setupModel(Transform parent, ModelOrientation orientation)
        {
            model = new GameObject("MSCSolarRoot");
            model.transform.NestToParent(parent);
            int len = positions == null? 0 : positions.Length;

            models = new GameObject[len];
            for (int i = 0; i < len; i++)
            {
                models[i] = new GameObject("MSCSolar");
                models[i].transform.NestToParent(model.transform);
                SSTUUtils.cloneModel(modelDefinition.modelName).transform.NestToParent(models[i].transform);
                models[i].transform.Rotate(positions[i].rotation, Space.Self);
                models[i].transform.localPosition = positions[i].position;
                models[i].transform.localScale    = positions[i].scale;
            }
        }
 public override void setupModel(Transform parent, ModelOrientation orientation)
 {
     if (model != null || models != null)
     {
         destroyCurrentModel();
     }
     model = new GameObject(modelDefinition.name);
     model.transform.NestToParent(parent);
     models = new GameObject[4];
     for (int i = 0; i < 4; i++)
     {
         models[i] = SSTUUtils.cloneModel(modelDefinition.modelName);
     }
     foreach (GameObject go in models)
     {
         go.transform.NestToParent(model.transform);
     }
 }
示例#6
0
        private void constructSubModels(Transform parent, ModelOrientation orientation, bool reUse)
        {
            String modelName = modelDefinition.modelName;

            if (String.IsNullOrEmpty(modelName))//no model name given, log user-error for them to correct
            {
                MonoBehaviour.print("ERROR: Could not setup sub-models for ModelDefinition: " + modelDefinition.name + " as no modelName was specified to use as the root transform.");
                MonoBehaviour.print("Please add a modelName to this model definition to enable sub-model creation.");
                return;
            }
            //attempt to re-use the model if it is already present on the part
            if (reUse)
            {
                Transform tr = parent.transform.FindModel(modelDefinition.modelName);
                if (tr != null)
                {
                    tr.name            = modelDefinition.modelName;
                    tr.gameObject.name = modelDefinition.modelName;
                }
                model = tr == null ? null : tr.gameObject;
            }
            //not re-used, recreate it entirely from the sub-model data
            if (model == null)
            {
                //create a new GO at 0,0,0 with default orientation and the given model name
                //this will be the 'parent' for sub-model creation
                model = new GameObject(modelName);

                SubModelData[] smds = modelDefinition.subModelData;
                SubModelData   smd;
                GameObject     clonedModel;
                Transform      localParent;
                int            len = smds.Length;
                //add sub-models to the base model transform
                for (int i = 0; i < len; i++)
                {
                    smd         = smds[i];
                    clonedModel = SSTUUtils.cloneModel(smd.modelURL);
                    if (clonedModel == null)
                    {
                        continue;
                    }                                    //TODO log error
                    clonedModel.transform.NestToParent(model.transform);
                    clonedModel.transform.localRotation = Quaternion.Euler(smd.rotation);
                    clonedModel.transform.localPosition = smd.position;
                    clonedModel.transform.localScale    = smd.scale;
                    if (!string.IsNullOrEmpty(smd.parent))
                    {
                        localParent = model.transform.FindRecursive(smd.parent);
                        if (localParent != null)
                        {
                            clonedModel.transform.parent = localParent;
                        }
                    }
                    //de-activate any non-active sub-model transforms
                    //iterate through all transforms for the model and deactivate(destroy?) any not on the active mesh list
                    if (smd.modelMeshes.Length > 0)
                    {
                        smd.setupSubmodel(clonedModel);
                    }
                }
            }
            //regardless of if it was new or re-used, reset its position and orientation
            model.transform.NestToParent(parent);
            if ((modelDefinition.invertForTop && orientation == ModelOrientation.TOP) || (modelDefinition.invertForBottom && orientation == ModelOrientation.BOTTOM))
            {
                model.transform.Rotate(modelDefinition.invertAxis, 180, Space.Self);
            }
        }