private IvyController GetFreeIvy() { IvyController res = null; for (int i = 0; i < ivys.Count; i++) { if (!ivys[i].gameObject.activeSelf) { res = ivys[i]; break; } } return(res); }
public void PrepareRuntimeBaked() { RTIvy rtIvy = ivyGO.GetComponent <RTIvy>(); RuntimeBakedIvy rtBakedIvy = (RuntimeBakedIvy)rtIvy; RuntimeGrowthParameters defaultGrowthParameters = new RuntimeGrowthParameters(); IvyController ivyController = ivyGO.GetComponent <IvyController>(); if (rtIvy == null) { rtBakedIvy = ivyGO.GetComponent <RuntimeBakedIvy>(); if (rtBakedIvy == null) { rtBakedIvy = ivyGO.AddComponent <RuntimeBakedIvy>(); } if (ivyController == null) { ivyController = ivyGO.AddComponent <IvyController>(); } ivyController.rtIvy = rtBakedIvy; ivyController.ivyContainer = currentIvyInfo.infoPool.ivyContainer; ivyController.ivyParameters = currentIvyInfo.infoPool.ivyParameters; ivyController.growthParameters = defaultGrowthParameters; rtBakedIvy.meshFilter = rtBakedIvy.GetComponent <MeshFilter>(); rtBakedIvy.meshRenderer = rtBakedIvy.GetComponent <MeshRenderer>(); if (rtBakedIvy.mrProcessedMesh == null) { GameObject processedMesh = new GameObject(); processedMesh.name = "processedMesh"; processedMesh.transform.parent = rtBakedIvy.transform; processedMesh.transform.localPosition = Vector3.zero; processedMesh.transform.localRotation = Quaternion.identity; MeshRenderer mrProcessedMesh = processedMesh.AddComponent <MeshRenderer>(); MeshFilter mfProcessedMesh = processedMesh.AddComponent <MeshFilter>(); rtBakedIvy.mrProcessedMesh = mrProcessedMesh; rtBakedIvy.mfProcessedMesh = mfProcessedMesh; } } ivyController.ivyParameters = currentIvyInfo.infoPool.ivyParameters; }
public override void OnInspectorGUI() { serializedObject.Update(); IvyController ivyController = (IvyController)target; RuntimeGrowthParameters growthParameters = ivyController.growthParameters; GUILayout.Space(10f); if (ivyController.rtIvy is RuntimeProceduralIvy) { EditorGUILayout.LabelField(STR_PROCEDURAL_IVY); } else if (ivyController.rtIvy is RuntimeBakedIvy) { EditorGUILayout.LabelField(STR_BAKED_IVY); } GUILayout.Space(10f); EditorGUILayout.PropertyField(spGrowthSpeed); if (ivyController.rtIvy is RuntimeProceduralIvy) { EditorGUILayout.PropertyField(spLifetime); } EditorGUILayout.PropertyField(spDelay); GUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(spSpeedOverLifetimeEnabled); if (spSpeedOverLifetimeEnabled.boolValue) { EditorGUILayout.PropertyField(spSpeedOverLifetimeCurve, GUIContent.none); } GUILayout.EndHorizontal(); EditorGUILayout.PropertyField(spStartGrowthOnAwake); serializedObject.ApplyModifiedProperties(); }
public void CastIvy(IvyPreset ivyPreset, Vector3 position, Quaternion rotation) { IvyController selectedIvy = GetFreeIvy(); if (selectedIvy == null) { IvyController ivyControllerInstance = Instantiate <IvyController>(prefabIvyController); ivyControllerInstance.transform.parent = transform; selectedIvy = ivyControllerInstance; ivys.Add(ivyControllerInstance); } selectedIvy.transform.position = position; selectedIvy.transform.rotation = rotation; selectedIvy.transform.Rotate(Vector3.right, -90f); selectedIvy.ivyParameters = ivyPreset.ivyParameters; selectedIvy.gameObject.SetActive(true); selectedIvy.StartGrowth(); }