Пример #1
0
    /// <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;
        }
    }
Пример #2
0
    /// <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);
    }