Example #1
0
    IEnumerator DoDisconnectDieCr(EditDie editDie, System.Action <EditDie, bool, string> dieDisconnectedCallback)
    {
        var dt = dice.First(p => p == editDie);

        if (dt == null)
        {
            Debug.LogError("Trying to disconnect unknown edit die " + editDie.name);
        }
        else if (dt.die == null)
        {
            Debug.LogError("Trying to disconnect unknown die " + editDie.name);
        }
        else if (dt.die.connectionState != Die.ConnectionState.Ready)
        {
            Debug.LogError("Trying to disconnect die that isn't connected " + editDie.name + ", current state " + dt.die.connectionState);
        }
        else
        {
            bool?res = null;
            DicePool.Instance.DisconnectDie(dt.die, (d, r, s) => res = r);
            yield return(new WaitUntil(() => res.HasValue));

            if (res.Value)
            {
                dieDisconnectedCallback?.Invoke(editDie, true, null);
            }
            else
            {
                dieDisconnectedCallback?.Invoke(editDie, false, "Could not disconnect to Die " + editDie.name + ". Communication Error");
            }
        }
    }
Example #2
0
    void OnDieFound(EditDie editDie)
    {
        Debug.Assert(editDie == die);
        die.die.OnConnectionStateChanged += OnConnectionStateChanged;
        die.die.OnError               += OnError;
        die.die.OnAppearanceChanged   += OnAppearanceChanged;
        die.die.OnBatteryLevelChanged += OnBatteryLevelChanged;
        die.die.OnRssiChanged         += OnRssiChanged;

        bool saveUpdatedData = false;

        if (die.designAndColor != die.die.designAndColor)
        {
            OnAppearanceChanged(die.die, die.die.faceCount, die.die.designAndColor);
            saveUpdatedData = true;
        }

        if (die.name != die.die.name)
        {
            OnNameChanged(die.die, die.die.name);
            saveUpdatedData = true;
        }

        if (saveUpdatedData)
        {
            AppDataSet.Instance.SaveData();
        }
    }
Example #3
0
 void OnDieWillBeLost(EditDie editDie)
 {
     editDie.die.OnConnectionStateChanged -= OnConnectionStateChanged;
     editDie.die.OnAppearanceChanged      -= OnAppearanceChanged;
     editDie.die.OnBatteryLevelChanged    -= OnBatteryLevelChanged;
     editDie.die.OnRssiChanged            -= OnRssiChanged;
     editDie.die.OnError -= OnError;
 }
Example #4
0
 public void DeleteDie(EditDie editDie)
 {
     foreach (var preset in presets)
     {
         preset.DeleteDie(editDie);
     }
     dice.Remove(editDie);
 }
Example #5
0
    public void Setup(EditDie die)
    {
        dieView.Setup(die);

        // Connect to all the dice in the pool if possible
        refreshInfoCoroutine = RefreshInfo();
        StartCoroutine(refreshInfoCoroutine);
    }
Example #6
0
    public void Setup(EditDie die, int faceIndex, float time)
    {
        //var dieTexture = DiceRendererManager.Instance.GetTextureForDie(die.die);
        //dieImage.texture = dieTexture;

        rollText.text  = die.name + " rolled a " + (faceIndex + 1).ToString();
        timestamp.text = "";
    }
Example #7
0
 void OnDieAdded(EditDie editDie)
 {
     if (!connectedDice.Contains(editDie))
     {
         connectedDice.Add(editDie);
         DiceManager.Instance.ConnectDie(editDie, null);
     }
     RefreshView();
 }
Example #8
0
    IEnumerator PreviewOnDieCr()
    {
        if (previewDie == null)
        {
            bool?previewDieSelected = null;
            PixelsApp.Instance.ShowDiePicker(
                "Select Die for Preview",
                null,
                (ed) => true,
                (res, newDie) =>
            {
                previewDie         = newDie;
                previewDieSelected = res;
            });
            yield return(new WaitUntil(() => previewDieSelected.HasValue));
        }

        if (previewDie != null)
        {
            if (!previewDieConnected)
            {
                string error = null;
                yield return(DiceManager.Instance.ConnectDie(previewDie, (_, res, errorMsg) =>
                {
                    previewDieConnected = res;
                    error = errorMsg;
                }));

                if (!previewDieConnected)
                {
                    previewDie = null;
                    bool acknowledged = false;
                    PixelsApp.Instance.ShowDialogBox("Could not connect.", error, "Ok", null, _ => acknowledged = true);
                    yield return(new WaitUntil(() => acknowledged));
                }
            }

            if (previewDie != null && previewDieConnected)
            {
                previewDie.die.SetLEDAnimatorMode();
                yield return(new WaitForSeconds(0.5f)); // Fixme!!! add acknowledge from die instead

                var  editSet    = AppDataSet.Instance.ExtractEditSetForAnimation(editAnimation);
                var  dataSet    = editSet.ToDataSet();
                bool playResult = false;
                yield return(previewDie.die.PlayTestAnimation(dataSet, (res) => playResult = res));

                if (!playResult)
                {
                    bool acknowledged = false;
                    PixelsApp.Instance.ShowDialogBox("Transfer Error", "Could not play animation on " + previewDie.name + ", Transfer error", "Ok", null, _ => acknowledged = true);
                    previewDie = null;
                    yield return(new WaitUntil(() => acknowledged));
                }
            }
        }
    }
Example #9
0
 void OnDieSelected(bool result, EditDie newDie)
 {
     if (result && newDie != editAssignment.die)
     {
         editAssignment.die = newDie;
         onChange?.Invoke(editAssignment);
         UpdateView();
     }
 }
Example #10
0
    IEnumerator ConnectDieCr(EditDie editDie, System.Action <EditDie, bool, string> dieReadyCallback)
    {
        yield return(new WaitUntil(() => state == State.Idle));

        state = State.ConnectingDie;
        yield return(StartCoroutine(DoConnectDieCr(editDie, dieReadyCallback)));

        state = State.Idle;
    }
Example #11
0
    UIPairedDieToken CreatePairedDie(EditDie die)
    {
        // Create the gameObject
        var ret = GameObject.Instantiate <UIPairedDieToken>(pairedDieViewPrefab, Vector3.zero, Quaternion.identity, contentRoot.transform);

        ret.transform.SetAsFirstSibling();
        // Initialize it
        ret.Setup(die);
        return(ret);
    }
Example #12
0
    public bool CheckDependency(EditDie die)
    {
        bool dependencyFound = false;

        foreach (var preset in presets)
        {
            dependencyFound = dependencyFound | preset.CheckDependency(die);
        }
        return(dependencyFound);
    }
Example #13
0
    void OnWillRemoveDie(EditDie editDie)
    {
        connectedDice.Remove(editDie);
        var ui = pairedDice.FirstOrDefault(uid => uid.die == editDie);

        if (ui != null)
        {
            pairedDice.Remove(ui);
            DestroyPairedDie(ui);
        }
    }
Example #14
0
    public EditDie AddNewDie(Die die)
    {
        var ret = new EditDie()
        {
            name           = die.name,
            deviceId       = die.deviceId,
            faceCount      = die.faceCount,
            designAndColor = die.designAndColor,
        };

        dice.Add(ret);
        return(ret);
    }
Example #15
0
    UIDiePickerDieToken CreateDieToken(EditDie die)
    {
        // Create the gameObject
        var ret = GameObject.Instantiate <UIDiePickerDieToken>(dieTokenPrefab, contentRoot.transform);

        // Initialize it
        ret.Setup(die);

        // When we click on the pattern main button, go to the edit page
        ret.onClick.AddListener(() => Hide(true, ret.die));

        return(ret);
    }
Example #16
0
    public Coroutine ConnectDie(EditDie editDie, System.Action <EditDie, bool, string> dieReadyCallback)
    {
        var ourDie = dice.FirstOrDefault(d => d == editDie);

        if (ourDie == null)
        {
            Debug.LogError("Die " + editDie.name + " not in Dice Manager");
            dieReadyCallback?.Invoke(editDie, false, "Edit Die not in Dice Manager");
            return(null);
        }
        else
        {
            return(StartCoroutine(ConnectDieCr(editDie, dieReadyCallback)));
        }
    }
Example #17
0
    void Hide(bool result, EditDie die)
    {
        foreach (var uidie in dice)
        {
            DestroyDieToken(uidie);
        }
        dice.Clear();

        var closeActionCopy = closeAction;

        closeAction = null;

        gameObject.SetActive(false);
        closeActionCopy?.Invoke(result, die);
    }
Example #18
0
    /// <summary>
    /// Invoke the die picker
    /// </sumary>
    public void Show(string title, EditDie previousDie, System.Func <EditDie, bool> selector, System.Action <bool, EditDie> closeAction)
    {
        if (isShown)
        {
            Debug.LogWarning("Previous Die picker still active");
            ForceHide();
        }

        dieSelector = selector;
        if (dieSelector == null)
        {
            dieSelector = d => true;
        }

        var allDice = DiceManager.Instance.allDice.Where(dieSelector);

        if (allDice.Count() > 0)
        {
            noPairedDice.gameObject.SetActive(false);
            notEnoughPairedDice.gameObject.SetActive(false);
            foreach (var dt in allDice)
            {
                // New pattern
                var newDieUI = CreateDieToken(dt);
                newDieUI.SetSelected(dt == previousDie);
                dice.Add(newDieUI);
            }
        }
        else
        {
            if (DiceManager.Instance.allDice.Count() > 0)
            {
                noPairedDice.gameObject.SetActive(false);
                notEnoughPairedDice.gameObject.SetActive(true);
            }
            else
            {
                noPairedDice.gameObject.SetActive(true);
                notEnoughPairedDice.gameObject.SetActive(false);
            }
        }

        gameObject.SetActive(true);
        currentDie     = previousDie;
        titleText.text = title;

        this.closeAction = closeAction;
    }
Example #19
0
    IEnumerator DoConnectDieCr(EditDie editDie, System.Action <EditDie, bool, string> dieReadyCallback)
    {
        if (editDie.die == null)
        {
            DicePool.Instance.BeginScanForDice();
            float startScanTime = Time.time;
            yield return(new WaitUntil(() => Time.time > startScanTime + 3.0f || editDie.die != null));

            DicePool.Instance.StopScanForDice();

            if (editDie.die != null)
            {
                // We found the die, try to connect
                bool?res = null;
                DicePool.Instance.ConnectDie(editDie.die, (d, r, s) => res = r);
                yield return(new WaitUntil(() => res.HasValue));

                if (editDie.die.connectionState == Die.ConnectionState.Ready)
                {
                    dieReadyCallback?.Invoke(editDie, true, null);
                }
                else
                {
                    dieReadyCallback?.Invoke(editDie, false, "Could not connect to Die " + editDie.name + ". Communication Error");
                }
            }
            else
            {
                dieReadyCallback?.Invoke(editDie, false, "Could not find Die " + editDie.name + ".");
            }
        }
        else
        {
            // We already know what die matches the edit die, connect to it!
            bool?res = null;
            DicePool.Instance.ConnectDie(editDie.die, (d, r, s) => res = r);
            yield return(new WaitUntil(() => res.HasValue));

            if (editDie.die.connectionState == Die.ConnectionState.Ready)
            {
                dieReadyCallback?.Invoke(editDie, true, null);
            }
            else
            {
                dieReadyCallback?.Invoke(editDie, false, "Could not connect to Die " + editDie.name + ". Communication Error");
            }
        }
    }
Example #20
0
    void DoForgetDie(EditDie editDie)
    {
        var dt = dice.First(p => p == editDie);

        if (dt == null)
        {
            Debug.LogError("Trying to forget unknown edit die " + editDie.name);
        }
        else
        {
            onWillRemoveDie?.Invoke(editDie);
            if (dt.die != null)
            {
                DicePool.Instance.ForgetDie(dt.die, null);
            }
            AppDataSet.Instance.DeleteDie(editDie);
            dice.Remove(dt);
            AppDataSet.Instance.SaveData();
        }
    }
Example #21
0
    public void Setup(EditDie die)
    {
        this.die         = die;
        this.dieRenderer = DiceRendererManager.Instance.CreateDiceRenderer(die.designAndColor);
        if (dieRenderer != null)
        {
            dieRenderImage.texture = dieRenderer.renderTexture;
        }
        UpdateState();
        SetSelected(false);

        if (die.die == null)
        {
            die.onDieFound += OnDieFound;
        }
        else
        {
            OnDieFound(die);
        }
        die.onDieWillBeLost += OnDieWillBeLost;
    }
Example #22
0
    void OnDisable()
    {
        if (DiceRendererManager.Instance != null && this.dieRenderer != null)
        {
            DiceRendererManager.Instance.DestroyDiceRenderer(this.dieRenderer);
            this.dieRenderer = null;
        }

        foreach (var parameter in parameters.parameters)
        {
            GameObject.Destroy(parameter.gameObject);
        }
        parameters = null;

        if (previewDie != null)
        {
            previewDie.die.SetStandardMode();
            DiceManager.Instance.DisconnectDie(previewDie, null);
            previewDie          = null;
            previewDieConnected = false;
        }
    }
Example #23
0
    IEnumerator DisconnectDieCr(EditDie editDie, System.Action <EditDie, bool, string> dieDisconnectedCallback)
    {
        yield return(new WaitUntil(() => state == State.Idle));

        yield return(StartCoroutine(DoDisconnectDieCr(editDie, dieDisconnectedCallback)));
    }
Example #24
0
 public void Setup(EditDie die)
 {
     dieView.Setup(die);
     SetSelected(false);
 }
Example #25
0
    public static AppDataSet CreateTestDataSet()
    {
        AppDataSet ret = new AppDataSet();

        // We only save the dice that we have indicated to be in the pool
        // (i.e. ignore dice that are 'new' and we didn't connect to)
        var die0 = new EditDie()
        {
            name           = "Die 000",
            deviceId       = 0x123456789ABCDEF0,
            faceCount      = 20,
            designAndColor = DesignAndColor.V3_Orange
        };

        ret.dice.Add(die0);
        var die1 = new EditDie()
        {
            name           = "Die 001",
            deviceId       = 0xABCDEF0123456789,
            faceCount      = 20,
            designAndColor = DesignAndColor.V5_Black
        };

        ret.dice.Add(die1);
        var die2 = new EditDie()
        {
            name           = "Die 002",
            deviceId       = 0xCDEF0123456789AB,
            faceCount      = 20,
            designAndColor = DesignAndColor.V5_Grey
        };

        ret.dice.Add(die2);
        var die3 = new EditDie()
        {
            name           = "Die 003",
            deviceId       = 0xEF0123456789ABCD,
            faceCount      = 20,
            designAndColor = DesignAndColor.V5_Gold
        };

        ret.dice.Add(die3);

        EditAnimationSimple simpleAnim = new EditAnimationSimple();

        simpleAnim.duration = 1.0f;
        simpleAnim.color    = EditColor.MakeRGB(Color.blue);
        simpleAnim.faces    = 0b11111111111111111111;
        simpleAnim.name     = "Simple Anim 1";
        ret.animations.Add(simpleAnim);


        EditBehavior behavior = new EditBehavior();

        behavior.rules.Add(new EditRule()
        {
            condition = new EditConditionRolling(),
            actions   = new List <EditAction> ()
            {
                new EditActionPlayAnimation()
                {
                    animation = simpleAnim, faceIndex = 0, loopCount = 1
                }
            }
        });
        behavior.rules.Add(new EditRule()
        {
            condition = new EditConditionFaceCompare()
            {
                faceIndex = 19,
                flags     = ConditionFaceCompare_Flags.Equal
            },
            actions = new List <EditAction> ()
            {
                new EditActionPlayAnimation()
                {
                    animation = simpleAnim, faceIndex = 19, loopCount = 1
                }
            }
        });
        behavior.rules.Add(new EditRule()
        {
            condition = new EditConditionFaceCompare()
            {
                faceIndex = 0,
                flags     = ConditionFaceCompare_Flags.Less | ConditionFaceCompare_Flags.Equal | ConditionFaceCompare_Flags.Greater
            },
            actions = new List <EditAction> ()
            {
                new EditActionPlayAnimation()
                {
                    animation = simpleAnim, faceIndex = 2, loopCount = 1
                }
            }
        });
        ret.behaviors.Add(behavior);

        ret.presets.Add(new EditPreset()
        {
            name           = "Preset 0",
            dieAssignments = new List <EditDieAssignment>()
            {
                new EditDieAssignment()
                {
                    die      = die0,
                    behavior = behavior
                },
                new EditDieAssignment()
                {
                    die      = die1,
                    behavior = behavior
                }
            }
        });

        return(ret);
    }
Example #26
0
    IEnumerator ForgetDieCr(EditDie editDie)
    {
        yield return(new WaitUntil(() => state == State.Idle));

        DoForgetDie(editDie);
    }
Example #27
0
 public Coroutine ForgetDie(EditDie editDie)
 {
     return(StartCoroutine(ForgetDieCr(editDie)));
 }
Example #28
0
 public Coroutine DisconnectDie(EditDie editDie, System.Action <EditDie, bool, string> dieDisconnectedCallback)
 {
     return(StartCoroutine(DisconnectDieCr(editDie, dieDisconnectedCallback)));
 }