private void AddManagers(GameObject go, GameObject root) { // Replace materials for this object MaterialSwapper.ReplaceMaterialsForGameObject(go); // Add a tube light manager if there are tube light descriptors if (go.GetComponentInChildren <TubeLight>(true) != null) { TubeLightManager tlm = root.GetComponent <TubeLightManager>(); if (tlm == null) { tlm = root.AddComponent <TubeLightManager>(); } tlm.CreateTubeLights(go); } // Rotation effect manager if (go.GetComponentInChildren <RotationEventEffect>(true) != null) { RotationEventEffectManager rotManager = root.GetComponent <RotationEventEffectManager>(); if (rotManager == null) { rotManager = root.AddComponent <RotationEventEffectManager>(); } rotManager.CreateEffects(go); } // Add a trackRing controller if there are track ring descriptors if (go.GetComponentInChildren <TrackRings>(true) != null) { foreach (TrackRings trackRings in go.GetComponentsInChildren <TrackRings>(true)) { GameObject ringPrefab = trackRings.trackLaneRingPrefab; // Add managers to prefabs (nesting) AddManagers(ringPrefab, root); } TrackRingsManagerSpawner trms = root.GetComponent <TrackRingsManagerSpawner>(); if (trms == null) { trms = root.AddComponent <TrackRingsManagerSpawner>(); } trms.CreateTrackRings(go); } // Add spectrogram manager if (go.GetComponentInChildren <Spectrogram>(true) != null) { foreach (Spectrogram spec in go.GetComponentsInChildren <Spectrogram>(true)) { GameObject colPrefab = spec.columnPrefab; AddManagers(colPrefab, root); } SpectrogramColumnManager specManager = go.GetComponent <SpectrogramColumnManager>(); if (specManager == null) { specManager = go.AddComponent <SpectrogramColumnManager>(); } specManager.CreateColumns(go); } if (go.GetComponentInChildren <SpectrogramMaterial>(true) != null) { // Add spectrogram materials manager SpectrogramMaterialManager specMatManager = go.GetComponent <SpectrogramMaterialManager>(); if (specMatManager == null) { specMatManager = go.AddComponent <SpectrogramMaterialManager>(); } specMatManager.UpdateMaterials(); } if (go.GetComponentInChildren <SpectrogramAnimationState>(true) != null) { // Add spectrogram animation state manager SpectrogramAnimationStateManager specAnimManager = go.GetComponent <SpectrogramAnimationStateManager>(); if (specAnimManager == null) { specAnimManager = go.AddComponent <SpectrogramAnimationStateManager>(); } specAnimManager.UpdateAnimationStates(); } // Add Song event manager if (go.GetComponentInChildren <SongEventHandler>(true) != null) { foreach (SongEventHandler handler in go.GetComponentsInChildren <SongEventHandler>()) { SongEventManager manager = handler.gameObject.AddComponent <SongEventManager>(); manager._songEventHandler = handler; } } // Add EventManager if (go.GetComponentInChildren <EventManager>(true) != null) { foreach (EventManager em in go.GetComponentsInChildren <EventManager>()) { PlatformEventManager pem = em.gameObject.AddComponent <PlatformEventManager>(); pem._EventManager = em; } } }
/// <summary> /// Recursively attaches managers to a <see cref="CustomPlatform"/> /// </summary> /// <param name="go">The current <see cref="GameObject"/>, this parameter acts as a pointer</param> /// <param name="root">The root <see cref="GameObject"/> of the <see cref="CustomPlatform"/></param> private void AddManagers(GameObject go, GameObject root) { // Rotation effect manager if (go.GetComponentInChildren <RotationEventEffect>(true) != null || go.GetComponentInChildren <PairRotationEventEffect>(true) != null) { RotationEventEffectManager rotManager = go.GetComponent <RotationEventEffectManager>(); if (rotManager == null) { rotManager = _container.InstantiateComponent <RotationEventEffectManager>(go); PlatformManager.SpawnedComponents.Add(rotManager); rotManager.CreateEffects(go); } } // Add a trackRing controller if there are track ring descriptors if (go.GetComponentInChildren <TrackRings>(true) != null) { foreach (TrackRings trackRings in go.GetComponentsInChildren <TrackRings>(true)) { GameObject ringPrefab = trackRings.trackLaneRingPrefab; // Add managers to prefabs (nesting) AddManagers(ringPrefab, root); } TrackRingsManagerSpawner trms = go.GetComponent <TrackRingsManagerSpawner>(); if (trms == null) { trms = _container.InstantiateComponent <TrackRingsManagerSpawner>(go); PlatformManager.SpawnedComponents.Add(trms); } trms.CreateTrackRings(go); } // Add spectrogram manager if (go.GetComponentInChildren <Spectrogram>(true) != null) { foreach (Spectrogram spec in go.GetComponentsInChildren <Spectrogram>(true)) { GameObject colPrefab = spec.columnPrefab; AddManagers(colPrefab, root); } SpectrogramColumnManager specManager = go.GetComponent <SpectrogramColumnManager>(); if (specManager == null) { specManager = _container.InstantiateComponent <SpectrogramColumnManager>(go); PlatformManager.SpawnedComponents.Add(specManager); } specManager.CreateColumns(go); } if (go.GetComponentInChildren <SpectrogramMaterial>(true) != null) { // Add spectrogram materials manager SpectrogramMaterialManager specMatManager = go.GetComponent <SpectrogramMaterialManager>(); if (specMatManager == null) { specMatManager = _container.InstantiateComponent <SpectrogramMaterialManager>(go); PlatformManager.SpawnedComponents.Add(specMatManager); } specMatManager.UpdateMaterials(go); } if (go.GetComponentInChildren <SpectrogramAnimationState>(true) != null) { // Add spectrogram animation state manager SpectrogramAnimationStateManager specAnimManager = go.GetComponent <SpectrogramAnimationStateManager>(); if (specAnimManager == null) { specAnimManager = _container.InstantiateComponent <SpectrogramAnimationStateManager>(go); PlatformManager.SpawnedComponents.Add(specAnimManager); } specAnimManager.UpdateAnimationStates(); } if (go.GetComponentInChildren <ColorMaterial>(true) != null) { // Add color materials manager ColorMaterialManager colMatManager = go.GetComponent <ColorMaterialManager>(); if (colMatManager == null) { colMatManager = _container.InstantiateComponent <ColorMaterialManager>(go); PlatformManager.SpawnedComponents.Add(colMatManager); } colMatManager.UpdateMaterials(go); } // Add Song event manager if (go.GetComponentInChildren <SongEventHandler>(true) != null) { foreach (SongEventHandler handler in go.GetComponentsInChildren <SongEventHandler>()) { SongEventManager manager = _container.InstantiateComponent <SongEventManager>(handler.gameObject); PlatformManager.SpawnedComponents.Add(manager); manager._songEventHandler = handler; } } // Add EventManager if (go.GetComponentInChildren <EventManager>(true) != null) { foreach (EventManager em in go.GetComponentsInChildren <EventManager>()) { PlatformEventManager pem = _container.InstantiateComponent <PlatformEventManager>(em.gameObject); PlatformManager.SpawnedComponents.Add(pem); pem._eventManager = em; } } }