Пример #1
0
        public override Condition ToCondition(EditDataSet editSet, DataSet set)
        {
            var ret = new ConditionIdle();

            ret.repeatPeriodMs = (ushort)Mathf.RoundToInt(period * 1000.0f);
            return(ret);
        }
Пример #2
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionConnectionState()
     {
         flags = this.flags
     });
 }
Пример #3
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionHelloGoodbye()
     {
         flags = this.flags
     });
 }
Пример #4
0
 public override Action ToAction(EditDataSet editSet, DataSet set)
 {
     return(new ActionPlayAudioClip()
     {
         clipId = (byte)clip.id,
     });
 }
Пример #5
0
        public override Condition ToCondition(EditDataSet editSet, DataSet set)
        {
            var ret = new ConditionRolling();

            ret.repeatPeriodMs = (ushort)Mathf.RoundToInt(recheckAfter * 1000.0f);
            return(ret);
        }
Пример #6
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionFaceCompare()
     {
         faceIndex = (byte)this.faceIndex,
         flags = this.flags
     });
 }
Пример #7
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionBatteryState()
     {
         flags = this.flags,
         repeatPeriodMs = (ushort)Mathf.RoundToInt(recheckAfter * 1000.0f)
     });
 }
Пример #8
0
        public Keyframe ToKeyframe(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            Keyframe ret = new Keyframe();

            // Get the intensity from the color and scale
            ret.setTimeAndIntensity((ushort)(time * 1000), (byte)(ColorUtils.desaturate(color) * 255.0f));
            return(ret);
        }
Пример #9
0
    void SetupInstance(int animationIndex, int startTime, byte remapFace)
    {
        currentAnimationIndex = animationIndex;
        EditDataSet tempEditSet = AppDataSet.Instance.ExtractEditSetForAnimation(animations[animationIndex]);

        dataSet         = tempEditSet.ToDataSet();
        currentInstance = dataSet.animations[0].CreateInstance(dataSet.animationBits);
        currentInstance.start(startTime, remapFace, false);
    }
Пример #10
0
        public RGBKeyframe ToRGBKeyframe(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            RGBKeyframe ret = new RGBKeyframe();
            // Add the color to the palette if not already there, otherwise grab the color index
            var colorIndex = EditColor.toColorIndex(ref bits.palette, color);

            ret.setTimeAndColorIndex((ushort)(time * 1000), (ushort)colorIndex);
            return(ret);
        }
Пример #11
0
 public override Action ToAction(EditDataSet editSet, DataSet set)
 {
     return(new ActionPlayAnimation()
     {
         animIndex = (byte)editSet.animations.IndexOf(animation),
         faceIndex = (byte)this.faceIndex,
         loopCount = (byte)this.loopCount
     });
 }
Пример #12
0
 public void MergeEditSet(EditDataSet set)
 {
     data.patterns.AddRange(set.patterns);
     data.patterns.AddRange(set.rgbPatterns);
     data.animations.AddRange(set.animations);
     if (set.behavior != null)
     {
         data.behaviors.Add(set.behavior);
     }
 }
Пример #13
0
        public override Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            var ret = new AnimationSimple();

            ret.duration   = (ushort)(this.duration * 1000.0f);
            ret.faceMask   = (uint)this.faces;
            ret.colorIndex = (ushort)color.toColorIndex(ref bits.palette);
            ret.fade       = (byte)(255.0f * fade);
            ret.count      = (byte)count;
            return(ret);
        }
Пример #14
0
        public override Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            var ret = new AnimationRainbow();

            ret.duration  = (ushort)(this.duration * 1000.0f);
            ret.faceMask  = (uint)this.faces;
            ret.fade      = (byte)(255.0f * fade);
            ret.count     = (byte)count;
            ret.traveling = traveling ? (byte)1 : (byte)0;
            return(ret);
        }
Пример #15
0
    public void ImportAnimation(string jsonFilePath)
    {
        if (System.IO.File.Exists(jsonFilePath))
        {
            var serializer = CreateSerializer();
            using (StreamReader sw = new StreamReader(jsonFilePath))
                using (JsonReader reader = new JsonTextReader(sw))
                {
                    var editSet = new EditDataSet();
                    serializer.Populate(reader, editSet);

                    // Now merge the data into the app data set
                    MergeEditSet(editSet);
                    SaveData();
                }
        }
    }
Пример #16
0
        public Behavior ToBehavior(EditDataSet editSet, DataSet set)
        {
            // Add our rules to the set
            int rulesOffset = set.rules.Count;

            foreach (var editRule in rules)
            {
                var rule = editRule.ToRule(editSet, set);
                set.rules.Add(rule);
            }

            return(new Behavior()
            {
                rulesOffset = (ushort)rulesOffset,
                rulesCount = (ushort)rules.Count
            });
        }
Пример #17
0
        public override Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            var ret = new AnimationGradient();

            ret.duration = (ushort)(this.duration * 1000.0f);
            ret.faceMask = (uint)this.faces;

            // Add gradient
            ret.gradientTrackOffset = (ushort)bits.rgbTracks.Count;
            var tempTrack = new EditRGBTrack()
            {
                gradient = gradient
            };
            var gradientTrack = tempTrack.ToTrack(editSet, bits);

            bits.rgbTracks.Add(gradientTrack);
            return(ret);
        }
Пример #18
0
        public RGBTrack ToTrack(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            RGBTrack ret = new RGBTrack();

            ret.keyframesOffset = (ushort)bits.rgbKeyframes.Count;
            ret.keyFrameCount   = (byte)gradient.keyframes.Count;
            ret.ledMask         = 0;
            foreach (int index in ledIndices)
            {
                ret.ledMask |= (uint)(1 << index);
            }

            // Add the keyframes
            foreach (var editKeyframe in gradient.keyframes)
            {
                var kf = editKeyframe.ToRGBKeyframe(editSet, bits);
                bits.rgbKeyframes.Add(kf);
            }

            return(ret);
        }
        public override Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            var ret = new AnimationGradientPattern();

            ret.duration           = (ushort)(duration * 1000); // stored in milliseconds
            ret.speedMultiplier256 = (ushort)(this.speedMultiplier * 256.0f);
            ret.tracksOffset       = (ushort)editSet.getPatternTrackOffset(pattern);
            ret.trackCount         = (ushort)pattern.gradients.Count;

            // Add gradient
            ret.gradientTrackOffset = (ushort)bits.rgbTracks.Count;
            var tempTrack = new EditRGBTrack()
            {
                gradient = gradient
            };
            var gradientTrack = tempTrack.ToTrack(editSet, bits);

            bits.rgbTracks.Add(gradientTrack);
            ret.overrideWithFace = (byte)(overrideWithFace ? 1 : 0);

            return(ret);
        }
Пример #20
0
        public Track[] ToTracks(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            Track[] ret = new Track[gradients.Count];
            for (int i = 0; i < gradients.Count; ++i)
            {
                Track t = new Track();
                t.keyframesOffset = (ushort)bits.keyframes.Count;
                t.keyFrameCount   = (byte)gradients[i].keyframes.Count;
                t.ledMask         = 0;
                t.ledMask         = (uint)(1 << i);

                // Add the keyframes
                foreach (var editKeyframe in gradients[i].keyframes)
                {
                    var kf = editKeyframe.ToKeyframe(editSet, bits);
                    bits.keyframes.Add(kf);
                }
                ret[i] = t;
            }

            return(ret);
        }
Пример #21
0
        public override Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits)
        {
            var ret = new AnimationKeyframed();

            ret.duration           = (ushort)(duration * 1000); // stored in milliseconds
            ret.speedMultiplier256 = (ushort)(this.speedMultiplier * 256.0f);
            ret.tracksOffset       = (ushort)editSet.getPatternRGBTrackOffset(pattern);
            //// Copy the pattern so we can adjust the hue of the keyframes
            //var patternCopy = pattern.Duplicate();
            //foreach (var t in patternCopy.gradients)
            //{
            //    foreach (var k in t.keyframes)
            //    {
            //        float h, s, v;
            //        Color.RGBToHSV(k.color, out h, out s, out v);
            //        h = Mathf.Repeat(h + hueAdjust, 1.0f);
            //        k.color = Color.HSVToRGB(h, s, v);
            //    }
            //}
            //var tracks = patternCopy.ToRGBTracks(editSet, bits);
            ret.trackCount = (ushort)pattern.gradients.Count;
            ret.flowOrder  = flowOrder ? (byte)1 : (byte)0;
            return(ret);
        }
Пример #22
0
        public Rule ToRule(EditDataSet editSet, DataSet set)
        {
            // Create our condition
            var cond = condition.ToCondition(editSet, set);

            set.conditions.Add(cond);
            int conditionIndex = set.conditions.Count - 1;

            // Create our action
            int actionOffset = set.actions.Count;

            foreach (var editAction in actions)
            {
                var act = editAction.ToAction(editSet, set);
                set.actions.Add(act);
            }

            return(new Rule()
            {
                condition = (ushort)conditionIndex,
                actionOffset = (ushort)actionOffset,
                actionCount = (ushort)actions.Count,
            });
        }
Пример #23
0
    public EditDataSet ExtractEditSetForAnimation(EditAnimation animation)
    {
        EditDataSet ret = new EditDataSet();

        ret.animations.Add(animation);

        foreach (var pattern in patterns)
        {
            bool asRGB = false;
            if (animation.DependsOnPattern(pattern, out asRGB))
            {
                if (asRGB)
                {
                    ret.rgbPatterns.Add(pattern);
                }
                else
                {
                    ret.patterns.Add(pattern);
                }
            }
        }

        return(ret);
    }
Пример #24
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionHandling());
 }
Пример #25
0
 public abstract Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits);
Пример #26
0
    public void UpdateDieDataSet(Behaviors.EditBehavior behavior, Dice.EditDie die, System.Action <bool> callback)
    {
        // Make sure the die is ready!
        ShowProgrammingBox("Connecting to " + die.name + "...");
        DiceManager.Instance.ConnectDie(die, (editDie, res, message) =>
        {
            if (res)
            {
                // The die is ready to be uploaded to

                // Generate the data to be uploaded
                EditDataSet editSet = new EditDataSet();

                // Grab the behavior
                editSet.behavior = behavior.Duplicate();

                // And add the animations that this behavior uses
                var animations = editSet.behavior.CollectAnimations();

                // Add default rules and animations to behavior / set
                if (AppDataSet.Instance.defaultBehavior != null)
                {
                    // Rules that are in fact copied over
                    var copiedRules = new List <EditRule>();

                    foreach (var rule in AppDataSet.Instance.defaultBehavior.rules)
                    {
                        if (!editSet.behavior.rules.Any(r => r.condition.type == rule.condition.type))
                        {
                            var ruleCopy = rule.Duplicate();
                            copiedRules.Add(ruleCopy);
                            editSet.behavior.rules.Add(ruleCopy);
                        }
                    }

                    // Copied animations
                    var copiedAnims = new Dictionary <Animations.EditAnimation, Animations.EditAnimation>();

                    // Add animations used by default rules
                    foreach (var editAnim in AppDataSet.Instance.defaultBehavior.CollectAnimations())
                    {
                        foreach (var copiedRule in copiedRules)
                        {
                            if (copiedRule.DependsOnAnimation(editAnim))
                            {
                                Animations.EditAnimation copiedAnim = null;
                                if (!copiedAnims.TryGetValue(editAnim, out copiedAnim))
                                {
                                    copiedAnim = editAnim.Duplicate();
                                    animations.Add(copiedAnim);
                                    copiedAnims.Add(editAnim, copiedAnim);
                                }
                                copiedRule.ReplaceAnimation(editAnim, copiedAnim);
                            }
                        }
                    }
                }

                editSet.animations.AddRange(animations);

                foreach (var pattern in AppDataSet.Instance.patterns)
                {
                    bool asRGB = false;
                    if (animations.Any(anim => anim.DependsOnPattern(pattern, out asRGB)))
                    {
                        if (asRGB)
                        {
                            editSet.rgbPatterns.Add(pattern);
                        }
                        else
                        {
                            editSet.patterns.Add(pattern);
                        }
                    }
                }

                // Set the behavior
                var dataSet = editSet.ToDataSet();

                // Check the dataset against the one stored in the die
                var hash = dataSet.ComputeHash();

                // Get the hash directly from the die
                editDie.die.GetDieInfo((info_res) =>
                {
                    if (info_res)
                    {
                        if (hash != editDie.die.dataSetHash)
                        {
                            // We need to upload the dataset first
                            Debug.Log("Uploading dataset to die " + editDie.name);
                            var dataSetDataSize = dataSet.ComputeDataSetDataSize();
                            Debug.Log("Dataset data size " + dataSetDataSize);
                            UpdateProgrammingBox(0.0f, "Uploading data to " + editDie.name + "...");
                            editDie.die.UploadDataSet(dataSet,
                                                      (pct) =>
                            {
                                UpdateProgrammingBox(pct, "Uploading data to " + editDie.name + "...");
                            },
                                                      (res2, errorMsg) =>
                            {
                                if (res2)
                                {
                                    editDie.die.GetDieInfo(res3 =>
                                    {
                                        if (res3)
                                        {
                                            HideProgrammingBox();
                                            if (hash != editDie.die.dataSetHash)
                                            {
                                                ShowDialogBox("Error verifying data sent to " + editDie.name, message, "Ok", null, null);
                                                callback?.Invoke(false);
                                            }
                                            else
                                            {
                                                die.currentBehavior = behavior;
                                                AppDataSet.Instance.SaveData();
                                                onDieBehaviorUpdatedEvent?.Invoke(die, die.currentBehavior);
                                                callback?.Invoke(true);
                                            }
                                            DiceManager.Instance.DisconnectDie(editDie, null);
                                        }
                                        else
                                        {
                                            HideProgrammingBox();
                                            ShowDialogBox("Error fetching profile hash value from " + editDie.name, message, "Ok", null, null);
                                            DiceManager.Instance.DisconnectDie(editDie, null);
                                            callback?.Invoke(false);
                                        }
                                    });
                                }
                                else
                                {
                                    HideProgrammingBox();
                                    ShowDialogBox("Error uploading data to " + editDie.name, errorMsg, "Ok", null, null);
                                    DiceManager.Instance.DisconnectDie(editDie, null);
                                    callback?.Invoke(false);
                                }
                            });
                        }
                        else
                        {
                            Debug.Log("Die " + editDie.name + " already has preset with hash 0x" + hash.ToString("X8") + " programmed.");
                            HideProgrammingBox();
                            ShowDialogBox("Profile already Programmed", "Die " + editDie.name + " already has profile \"" + behavior.name + "\" programmed.", "Ok", null, null);
                            DiceManager.Instance.DisconnectDie(editDie, null);
                            callback?.Invoke(true);
                        }
                    }
                    else
                    {
                        HideProgrammingBox();
                        ShowDialogBox("Error verifying profile hash on " + editDie.name, message, "Ok", null, null);
                        DiceManager.Instance.DisconnectDie(editDie, null);
                        callback?.Invoke(false);
                    }
                });
            }
            else
            {
                HideProgrammingBox();
                ShowDialogBox("Error connecting to " + editDie.name, message, "Ok", null, null);
                callback(false);
            }
        });
    }
Пример #27
0
 public abstract Action ToAction(EditDataSet editSet, DataSet set);
Пример #28
0
 public override Condition ToCondition(EditDataSet editSet, DataSet set)
 {
     return(new ConditionCrooked());
 }
Пример #29
0
 public abstract Condition ToCondition(EditDataSet editSet, DataSet set);