public void OnDiceRendererVisible(DiceRenderer renderer, bool visible) { renderer.visible = visible; // Don't like this... if (visible) { // Is the renderer displayed? int index = FindSlot(renderer); if (index == -1) { // No, can it be? index = FindEmptySlot(); if (index != -1) { SetSlot(renderer, index); } // Else still can't display } // Else already displayed } else { // Is the renderer displayed? int index = FindSlot(renderer); if (index != -1) { // Yes, turn it off visibleRenderers[index] = null; SetSlot(renderer, -1); RecycleSlot(index); } // Else already off } }
int FindSlot(DiceRenderer diceRenderer) { for (int rendererIndex = 0; rendererIndex < visibleRenderers.Length; ++rendererIndex) { if (visibleRenderers[rendererIndex] == diceRenderer) { return(rendererIndex); } } return(-1); }
void SetSlot(DiceRenderer renderer, int index) { if (index != -1) { renderer.SetIndex(index); visibleRenderers[index] = renderer; renderer.gameObject.SetActive(true); } else { renderer.gameObject.SetActive(false); } }
public void DestroyDiceRenderer(DiceRenderer renderer) { int slot = FindSlot(renderer); if (slot != -1) { visibleRenderers[slot] = null; } allRenderers.Remove(renderer); GameObject.Destroy(renderer.gameObject); if (slot != -1) { RecycleSlot(slot); } }