From fb65711f08770b469287f41a05f72df044db3e67 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 14 Mar 2016 21:37:03 -0700 Subject: [PATCH] fixing scroll issues --- sim/libmbit.ts | 12 +++++++----- sim/state.ts | 12 ++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sim/libmbit.ts b/sim/libmbit.ts index 1f076143..6bd0fb49 100644 --- a/sim/libmbit.ts +++ b/sim/libmbit.ts @@ -92,6 +92,7 @@ namespace ks.rt.micro_bit { export function showDigit(v: number) { if (!quiet) console.log("DIGIT:", v) + plotLeds(createImageFromString(v.toString()[0])); } export function clearScreen() { @@ -106,14 +107,15 @@ namespace ks.rt.micro_bit { function scrollImage(leds: micro_bit.Image, interval: number, stride: number): void { let cb = getResume() let off = stride > 0 ? 0 : leds.width - 1; + let display = board().image; board().animationQ.enqueue({ interval: interval, frame: () => { - if (off >= leds.width || off < 0) - return false; - let c = Math.min(5, leds.width - off); - leds.copyTo(off, 5, board().image, 0) + if (off >= leds.width || off < 0) return false; + stride > 0 ? display.shiftLeft(stride) : display.shiftRight(-stride); + let c = Math.min(stride, leds.width - off); + leds.copyTo(off, c, display, 5 - stride) off += stride; return true; }, @@ -129,7 +131,7 @@ namespace ks.rt.micro_bit { if (interval < 0) return; let leds = createImageFromString(x.toString()); - if (x < 0 || x >= 10) scrollImage(leds, interval, 5); + if (x < 0 || x >= 10) scrollImage(leds, interval, 1); else showLeds(leds, interval * 5); } diff --git a/sim/state.ts b/sim/state.ts index 3992a8c9..53bbfbf0 100644 --- a/sim/state.ts +++ b/sim/state.ts @@ -298,6 +298,18 @@ namespace ks.rt.micro_bit { } } } + public shiftLeft(cols: number) { + for(let x = 0; x < this.width;++x) + for(let y = 0; y < 5;++y) + this.set(x, y, x < this.width - cols ? this.get(x + cols,y) : 0); + } + + public shiftRight(cols: number) { + for(let x = this.width -1; x <=0;--x) + for(let y = 0; y < 5;++y) + this.set(x, y, x > cols ? this.get(x - cols,y) : 0); + } + public clear(): void { for (var i = 0; i < this.data.length; ++i) this.data[i] = 0;