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); } }
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); }
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); } }
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); } }