public void BuildRandom() { if (turretBase != null) { DestroyTurret(); } TurretComponentLibrary library = FindObjectOfType <TurretComponentLibrary>(); if (library != null) { if (generateIds.Length > 0) { UnityEngine.Random.seed = generateSeed; Base[] bases = library.GetBases(); if (bases.Length > 0 && generateIds[0] < bases.Length && generateIds[0] >= 0) { Base baseComponent = bases[generateIds[0]]; Base instance = InstantiateBase(baseComponent); BuildRandom(Util.Subset(generateIds, 1), new TurretComponent[] { instance }); } } else { UnityEngine.Random.seed = generateSeed; Base[] bases = library.GetBases(); if (bases.Length > 0) { Base baseComponent = bases[UnityEngine.Random.Range(0, bases.Length)]; InstantiateBase(baseComponent); turretBase.BuildRandom(); } } } }
private void BuildRandom(int[] ids, TurretComponent[] components) { TurretComponentLibrary library = FindObjectOfType <TurretComponentLibrary>(); int count = 0; List <TurretComponent> newComponents = new List <TurretComponent>(); for (int i = 0; i < components.Length; i++) { for (int j = 0; j < components[i].slots.Length && j < ids.Length; j++) { TurretComponent[] prefabs = library.GetComponentsMatching(components[i].slots[j]); if (prefabs.Length > 0 && ids[count] < prefabs.Length && ids[count] >= 0) { TurretComponent turretComponent = prefabs[ids[count]]; TurretComponent newComponent = components[i].InstantiateComponentAt(turretComponent, components[i].slots[j]); newComponents.Add(newComponent); } count++; if (count >= generateIds.Length) { return; } } } if (newComponents.Count > 0) { BuildRandom(Util.Subset(ids, count), newComponents.ToArray()); } }
// ==== DEBUG ==== internal override void BuildRandom() { foreach (Slot slot in slots) { TurretComponentLibrary library = FindObjectOfType <TurretComponentLibrary>(); if (library != null) { TurretComponent[] components = library.GetComponentsMatching(slot, typeof(Motor)); if (components.Length > 0) { TurretComponent baseComponent = components[UnityEngine.Random.Range(0, components.Length)]; InstantiateComponentAt(baseComponent, slot); slot.component.BuildRandom(); } } } }
internal virtual void BuildRandom(int[] generateIds) { TurretComponentLibrary library = FindObjectOfType <TurretComponentLibrary>(); if (library != null) { for (int i = 0; i < slots.Length && i < generateIds.Length; i++) { TurretComponent[] components = library.GetComponentsMatching(slots[i]); if (components.Length > 0 && generateIds[i] < components.Length && generateIds[i] >= 0) { TurretComponent turretComponent = components[generateIds[i]]; InstantiateComponentAt(turretComponent, slots[i]); slots[i].component.BuildRandom(Util.Subset(generateIds, slots.Length)); } } } }
public void Awake() { instance = this; }