public void InitializeEffect(ModuleWaterfallFX host, bool fromNothing) { parentModule = host; Transform[] parents = parentModule.part.FindModelTransforms(parentName); Utils.Log(String.Format("[WaterfallEffect]: Initializing effect {0} at {1} [{2} instances]", name, parentName, parents.Length), LogType.Effects); effectTransforms = new List <Transform>(); baseScales = new List <Vector3>(); for (int i = 0; i < parents.Length; i++) { GameObject effect = new GameObject($"Waterfall_FX_{name}_{i}"); Transform effectTransform = effect.transform; if (parents[i] == null) { Utils.LogError(String.Format("[WaterfallEffect]: Couldn't find Parent Transform {0} on model to attach effect to", parentName, LogType.Any)); return; } effectTransform.SetParent(parents[i], true); effectTransform.localPosition = Vector3.zero; effectTransform.localEulerAngles = Vector3.zero; model.Initialize(effectTransform, fromNothing); baseScales.Add(effectTransform.localScale); Utils.Log($"[WaterfallEffect] local Scale {baseScales[i]}, baseScale, {effectTransform.localScale}", LogType.Effects); effectTransform.localPosition = TemplatePositionOffset; effectTransform.localEulerAngles = TemplateRotationOffset; effectTransform.localScale = Vector3.Scale(baseScales[i], TemplateScaleOffset); Utils.Log($"[WaterfallEffect] local Scale {effectTransform.localScale}, baseScale, {baseScales[i]}, {Vector3.Scale(baseScales[i], TemplateScaleOffset)}", LogType.Effects); Utils.Log($"[WaterfallEffect] Applied template offsets {TemplatePositionOffset}, {TemplateRotationOffset}, {TemplateScaleOffset}", LogType.Effects); effectTransforms.Add(effectTransform); } for (int i = 0; i < fxModifiers.Count; i++) { fxModifiers[i].Init(this); } effectRendererMaterials = new List <Material>(); effectRendererTransforms = new List <Transform>(); effectRenderers = new List <Renderer>(); foreach (Transform t in model.modelTransforms) { Renderer[] renderers = t.GetComponentsInChildren <Renderer>(); foreach (Renderer r in renderers) { effectRenderers.Add(r); effectRendererMaterials.Add(r.material); effectRendererTransforms.Add(r.transform); } } InitializeIntegrators(); }
public void InitializeEffect(ModuleWaterfallFX host, bool fromNothing) { Utils.Log(String.Format("[WaterfallEffect]: Initializing effect {0} at {1}", name, parentName), LogType.Effects); parentModule = host; Transform[] parents = parentModule.part.FindModelTransforms(parentName); effectTransforms = new List <Transform>(); for (int i = 0; i < parents.Length; i++) { GameObject effect = new GameObject($"Waterfall_FX_{name}_{i}"); effectTransform = effect.transform; if (parents[i] == null) { Utils.LogError(String.Format("[WaterfallEffect]: Couldn't find Parent Transform {0} on model to attach effect to", parentName)); return; } model.Initialize(effectTransform, fromNothing); effectTransform.SetParent(parents[i], true); effectTransform.localPosition = PositionOffset; if (RotationOffset == Vector3.zero) { effectTransform.localRotation = Quaternion.identity; } else { effectTransform.localRotation = Quaternion.LookRotation(RotationOffset); } effectTransform.localScale = new Vector3(effectTransform.localScale.x * ScaleOffset.x, effectTransform.localScale.y * ScaleOffset.y, effectTransform.localScale.z * ScaleOffset.z); savedScale = effectTransform.localScale; Utils.Log($"[WaterfallEffect]: Effect GameObject {effect.name} generated at {effectTransform.localPosition}, {effectTransform.localRotation}, {effectTransform.localScale}", LogType.Effects); effectTransforms.Add(effectTransform); } for (int i = 0; i < fxModifiers.Count; i++) { fxModifiers[i].Init(this); } }