/// <summary> /// Cleanly destroys a die, disconnecting if necessary and triggering events in the process /// Does not remove it from the list though /// </sumary> void DestroyDie(PoolDie ourDie) { void doDestroy() { // Trigger event onWillDestroyDie?.Invoke(ourDie.die); ourDie.setState.Invoke(Die.ConnectionState.Invalid); GameObject.Destroy(ourDie.die.gameObject); dice.Remove(ourDie); } switch (ourDie.die.connectionState) { default: doDestroy(); break; case Die.ConnectionState.Ready: // Register to be notified when disconnection is complete if (ourDie.currentConnectionCount == 0) { ourDie.onDisconnectionResult += (d, r, s) => doDestroy(); DoDisconnectDie(ourDie.die); } break; } }
/// <summary> /// Creates a new die for the pool /// </sumary> PoolDie CreateDie(Central.IDie centralDie, uint deviceId = 0, int faceCount = 0, DesignAndColor design = DesignAndColor.Unknown) { var dieObj = new GameObject(name); dieObj.transform.SetParent(transform); Die die = dieObj.AddComponent <Die>(); System.Action <Die.ConnectionState> setStateAction; System.Action <Die.LastError> setLastErrorAction; die.Setup(centralDie.name, centralDie.address, deviceId, faceCount, design, out setStateAction, out setLastErrorAction); var ourDie = new PoolDie() { die = die, centralDie = centralDie, setState = setStateAction, setError = setLastErrorAction, }; dice.Add(ourDie); return(ourDie); }