public override Condition ToCondition(EditDataSet editSet, DataSet set) { var ret = new ConditionIdle(); ret.repeatPeriodMs = (ushort)Mathf.RoundToInt(period * 1000.0f); return(ret); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionConnectionState() { flags = this.flags }); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionHelloGoodbye() { flags = this.flags }); }
public override Action ToAction(EditDataSet editSet, DataSet set) { return(new ActionPlayAudioClip() { clipId = (byte)clip.id, }); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { var ret = new ConditionRolling(); ret.repeatPeriodMs = (ushort)Mathf.RoundToInt(recheckAfter * 1000.0f); return(ret); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionFaceCompare() { faceIndex = (byte)this.faceIndex, flags = this.flags }); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionBatteryState() { flags = this.flags, repeatPeriodMs = (ushort)Mathf.RoundToInt(recheckAfter * 1000.0f) }); }
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); }
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); }
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); }
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 }); }
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); } }
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); }
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); }
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(); } } }
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 }); }
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); }
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); }
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); }
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); }
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, }); }
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); }
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionHandling()); }
public abstract Animation ToAnimation(EditDataSet editSet, DataSet.AnimationBits bits);
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); } }); }
public abstract Action ToAction(EditDataSet editSet, DataSet set);
public override Condition ToCondition(EditDataSet editSet, DataSet set) { return(new ConditionCrooked()); }
public abstract Condition ToCondition(EditDataSet editSet, DataSet set);