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"); } } }
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(); } }
void OnDieWillBeLost(EditDie editDie) { editDie.die.OnConnectionStateChanged -= OnConnectionStateChanged; editDie.die.OnAppearanceChanged -= OnAppearanceChanged; editDie.die.OnBatteryLevelChanged -= OnBatteryLevelChanged; editDie.die.OnRssiChanged -= OnRssiChanged; editDie.die.OnError -= OnError; }
public void DeleteDie(EditDie editDie) { foreach (var preset in presets) { preset.DeleteDie(editDie); } dice.Remove(editDie); }
public void Setup(EditDie die) { dieView.Setup(die); // Connect to all the dice in the pool if possible refreshInfoCoroutine = RefreshInfo(); StartCoroutine(refreshInfoCoroutine); }
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 = ""; }
void OnDieAdded(EditDie editDie) { if (!connectedDice.Contains(editDie)) { connectedDice.Add(editDie); DiceManager.Instance.ConnectDie(editDie, null); } RefreshView(); }
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)); } } } }
void OnDieSelected(bool result, EditDie newDie) { if (result && newDie != editAssignment.die) { editAssignment.die = newDie; onChange?.Invoke(editAssignment); UpdateView(); } }
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; }
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); }
public bool CheckDependency(EditDie die) { bool dependencyFound = false; foreach (var preset in presets) { dependencyFound = dependencyFound | preset.CheckDependency(die); } return(dependencyFound); }
void OnWillRemoveDie(EditDie editDie) { connectedDice.Remove(editDie); var ui = pairedDice.FirstOrDefault(uid => uid.die == editDie); if (ui != null) { pairedDice.Remove(ui); DestroyPairedDie(ui); } }
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); }
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); }
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))); } }
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); }
/// <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; }
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"); } } }
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(); } }
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; }
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; } }
IEnumerator DisconnectDieCr(EditDie editDie, System.Action <EditDie, bool, string> dieDisconnectedCallback) { yield return(new WaitUntil(() => state == State.Idle)); yield return(StartCoroutine(DoDisconnectDieCr(editDie, dieDisconnectedCallback))); }
public void Setup(EditDie die) { dieView.Setup(die); SetSelected(false); }
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); }
IEnumerator ForgetDieCr(EditDie editDie) { yield return(new WaitUntil(() => state == State.Idle)); DoForgetDie(editDie); }
public Coroutine ForgetDie(EditDie editDie) { return(StartCoroutine(ForgetDieCr(editDie))); }
public Coroutine DisconnectDie(EditDie editDie, System.Action <EditDie, bool, string> dieDisconnectedCallback) { return(StartCoroutine(DisconnectDieCr(editDie, dieDisconnectedCallback))); }