Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
0f273131f6 | |||
9ae0c48477 | |||
5f538f418e | |||
859b68b6e3 | |||
6576f7bd66 | |||
5a670f3291 | |||
7129487618 | |||
e1797b457a | |||
c82efa452d | |||
493014af01 | |||
fb4a96d81b | |||
bbf115f33c | |||
5d9c2cf590 | |||
b99231f6e2 | |||
2676907129 | |||
6f4c533ebb | |||
85dcaea979 | |||
8560b31657 | |||
b896588f45 | |||
0b4d4facfe | |||
52ad897ee3 | |||
72582f2a60 | |||
2b2048da7d | |||
e85fa990bd | |||
81a61538c3 | |||
cc8751bd09 | |||
03f933a1c8 | |||
10a77d9fef | |||
773f8a8688 | |||
f67743d935 | |||
237a57ee86 | |||
b80edb43fc | |||
6c9b609fe0 |
@ -1,5 +1,6 @@
|
|||||||
# Lessons
|
# Lessons
|
||||||
|
|
||||||
|
|
||||||
### @short Lessons
|
### @short Lessons
|
||||||
|
|
||||||
### ~column
|
### ~column
|
||||||
|
@ -126,15 +126,3 @@ This is useful if you have something connected at the other end. As explained ab
|
|||||||
let msg = serial.readString()
|
let msg = serial.readString()
|
||||||
```
|
```
|
||||||
|
|
||||||
* reads an image
|
|
||||||
|
|
||||||
```
|
|
||||||
img = serial.readImage()
|
|
||||||
```
|
|
||||||
|
|
||||||
* reads the state of the screen from serial
|
|
||||||
|
|
||||||
```
|
|
||||||
serial.readScreen()
|
|
||||||
```
|
|
||||||
|
|
||||||
|
2
docs/static/microbitlogo.svg
vendored
Normal file
2
docs/static/microbitlogo.svg
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' width='193.50101' height='32.755001' version='1.1'><g transform='translate(-1.3555,0.63251107)'><title>micro:bit logo</title><path d='m 38.7185,20.11349 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 m -22.311,-6.077 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.99 22.576,0 c 4.979,0 9.027,4.047 9.027,9.027 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.03,-4.053 -9.03,-9.031 -0.001,-4.98 4.053,-9.027 9.03,-9.027 m 22.576,24.076 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.299 -6.748,-15.051 -15.047,-15.051 l -22.576,0 c -8.299,0 -15.049,6.752 -15.049,15.051 0,8.299 6.75,15.049 15.049,15.049 l 22.576,0 m 112.099,-21.953 c 0,-1.453 -1.195,-2.633 -2.662,-2.633 -1.455,0 -2.639,1.18 -2.639,2.633 0,1.471 1.184,2.672 2.639,2.672 1.466,0 2.662,-1.202 2.662,-2.672 z m -66.786,5.445 c 0,-4.764 -2.893,-8.093 -7.031,-8.093 -2.027,0 -3.814,0.851 -5.223,2.47 -1.467,-1.661 -3.152,-2.47 -5.127,-2.47 -4.162,0 -7.066,3.329 -7.066,8.093 l 0,10.466 3.812,0 0,-10.644 c 0,-2.416 1.336,-4.104 3.254,-4.104 1.617,0 3.25,1.409 3.25,4.104 l 0,10.645 3.848,0 0,-10.645 c 0,-2.416 1.338,-4.104 3.252,-4.104 1.863,0 3.217,1.727 3.217,4.104 l 0,10.645 3.814,0 0,-10.467 z m 6.953,-7.632 -3.846,0 0,18.099 3.846,0 0,-18.099 z m 0.569,-5.128 c 0,-1.377 -1.096,-2.454 -2.492,-2.454 -1.4,0 -2.453,1.054 -2.453,2.454 0,1.398 1.078,2.494 2.453,2.494 1.375,0 2.492,-1.117 2.492,-2.494 z m 18.328,20.914 0.576,-0.521 -2.828,-2.658 -0.488,0.455 c -1.252,1.149 -2.504,1.686 -3.945,1.686 -3.064,0 -5.557,-2.557 -5.557,-5.699 0,-3.121 2.492,-5.66 5.557,-5.66 1.432,0 2.646,0.521 3.949,1.693 l 0.512,0.46 2.748,-2.802 -0.49,-0.502 c -1.754,-1.793 -4.016,-2.696 -6.719,-2.696 -2.459,0 -4.869,1.022 -6.605,2.798 -1.738,1.734 -2.691,4.119 -2.691,6.709 0,2.596 0.953,4.979 2.684,6.705 1.771,1.811 4.117,2.811 6.615,2.811 2.401,-0.003 4.647,-0.937 6.682,-2.779 z m 7.25,-6.947 c 0,-3.322 1.145,-4.686 4.217,-5.029 l 0.641,-0.07 0,-3.797 -0.777,0.058 c -5.629,0.458 -8.143,3.247 -8.143,9.048 l 0,9.051 4.062,0 0,-9.261 0,0 z m 21.998,6.923 c 1.762,-1.756 2.729,-4.146 2.729,-6.715 0,-2.565 -0.967,-4.951 -2.723,-6.702 -1.77,-1.809 -4.105,-2.806 -6.576,-2.806 -2.492,0 -4.84,0.997 -6.613,2.806 -1.752,1.792 -2.721,4.174 -2.721,6.702 0,2.53 0.969,4.916 2.721,6.707 1.771,1.81 4.121,2.808 6.613,2.808 2.472,0 4.808,-0.998 6.57,-2.8 z m -1.229,-6.714 c 0,3.18 -2.361,5.665 -5.377,5.665 -2.945,0 -5.346,-2.541 -5.346,-5.665 0,-3.137 2.398,-5.695 5.346,-5.695 2.963,-0.002 5.377,2.558 5.377,5.695 z m 12.917,6.418 c 0,-1.468 -1.195,-2.667 -2.662,-2.667 -1.455,0 -2.639,1.199 -2.639,2.667 0,1.453 1.184,2.632 2.639,2.632 1.466,0 2.662,-1.179 2.662,-2.632 z m 19.507,0.296 c 1.76,-1.756 2.73,-4.146 2.73,-6.715 0,-2.528 -0.973,-4.911 -2.729,-6.702 -1.746,-1.787 -4.08,-2.77 -6.574,-2.77 -2.035,0 -3.84,0.572 -5.484,1.744 l 0,-9.934 -3.816,0 0.008,15.582 c -0.037,0.411 -0.037,0.821 -0.037,1.198 0,6.119 3.836,10.396 9.33,10.396 2.475,0.001 4.807,-0.997 6.572,-2.799 z m -1.013,-6.677 c 0,3.123 -2.494,5.66 -5.559,5.66 -3.115,0 -5.557,-2.484 -5.557,-5.66 0,-3.143 2.494,-5.698 5.557,-5.698 3.065,0 5.559,2.556 5.559,5.698 z m 10.881,-9.085 -3.846,0 0,18.099 3.846,0 0,-18.099 z m 0.572,-5.128 c 0,-1.377 -1.098,-2.454 -2.492,-2.454 -1.4,0 -2.457,1.054 -2.457,2.454 0,1.398 1.076,2.494 2.457,2.494 1.373,0 2.492,-1.117 2.492,-2.494 z m 13.83,19.759 -0.619,-0.089 c -2.855,-0.409 -4.133,-2.104 -4.133,-5.495 l 0,-5.126 4.752,0 0,-3.674 -4.752,0 0,-4.006 -3.887,0 0,4.006 -1.662,0 0,3.674 1.662,0 0,4.525 c 0,6.215 2.113,8.932 7.783,10.029 l 0.855,0.164 0,-4.008 0.001,0 z' style='fill:#000000' /></g></svg>
|
After Width: | Height: | Size: 3.8 KiB |
File diff suppressed because one or more lines are too long
3
libs/microbit/core.d.ts
vendored
3
libs/microbit/core.d.ts
vendored
@ -153,6 +153,9 @@ declare interface Number {
|
|||||||
toString(): string;
|
toString(): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Numbers and arithmetic operators
|
||||||
|
*/
|
||||||
declare namespace Math {
|
declare namespace Math {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,20 +19,4 @@ namespace serial {
|
|||||||
void writeString(StringData *text) {
|
void writeString(StringData *text) {
|
||||||
uBit.serial.sendString(ManagedString(text));
|
uBit.serial.sendString(ManagedString(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the current pixel values, byte-per-pixel, over serial.
|
|
||||||
*/
|
|
||||||
//%
|
|
||||||
void writeScreen() {
|
|
||||||
uBit.serial.sendDisplayState();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the screen from serial.
|
|
||||||
*/
|
|
||||||
//%
|
|
||||||
void readScreen() {
|
|
||||||
uBit.serial.readDisplayState();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
12
libs/microbit/shims.d.ts
vendored
12
libs/microbit/shims.d.ts
vendored
@ -489,18 +489,6 @@ declare namespace serial {
|
|||||||
*/
|
*/
|
||||||
//% shim=serial::writeString
|
//% shim=serial::writeString
|
||||||
function writeString(text: string): void;
|
function writeString(text: string): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the current pixel values, byte-per-pixel, over serial.
|
|
||||||
*/
|
|
||||||
//% shim=serial::writeScreen
|
|
||||||
function writeScreen(): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the screen from serial.
|
|
||||||
*/
|
|
||||||
//% shim=serial::readScreen
|
|
||||||
function readScreen(): void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kindscript-microbit",
|
"name": "kindscript-microbit",
|
||||||
"version": "0.2.27",
|
"version": "0.2.41",
|
||||||
"description": "BBC micro:bit target for KindScript",
|
"description": "BBC micro:bit target for KindScript",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"JavaScript",
|
"JavaScript",
|
||||||
@ -29,6 +29,6 @@
|
|||||||
"typescript": "^1.8.7"
|
"typescript": "^1.8.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"kindscript": "0.2.28"
|
"kindscript": "0.2.42"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
114
sim/simsvg.ts
114
sim/simsvg.ts
@ -1,4 +1,5 @@
|
|||||||
namespace ks.rt.micro_bit {
|
namespace ks.rt.micro_bit {
|
||||||
|
const Svg = ks.rt.Svg;
|
||||||
|
|
||||||
export interface IBoardTheme {
|
export interface IBoardTheme {
|
||||||
accent?: string;
|
accent?: string;
|
||||||
@ -46,119 +47,6 @@ namespace ks.rt.micro_bit {
|
|||||||
disableTilt?:boolean;
|
disableTilt?:boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Svg {
|
|
||||||
static pt : SVGPoint;
|
|
||||||
static cursorPoint(pt: SVGPoint, svg: SVGSVGElement, evt : MouseEvent) : SVGPoint {
|
|
||||||
pt.x = evt.clientX;
|
|
||||||
pt.y = evt.clientY;
|
|
||||||
return pt.matrixTransform(svg.getScreenCTM().inverse());
|
|
||||||
}
|
|
||||||
|
|
||||||
static rotateElement(el : SVGElement, originX : number ,originY : number,degrees:number){
|
|
||||||
el.setAttribute(
|
|
||||||
'transform',
|
|
||||||
`translate(${originX},${originY}) rotate(${degrees+90}) translate(${-originX},${-originY})`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static elt(name:string) : SVGElement {
|
|
||||||
return document.createElementNS("http://www.w3.org/2000/svg", name)
|
|
||||||
}
|
|
||||||
|
|
||||||
static hydrate(el : SVGElement, props: any) {
|
|
||||||
for(let k in props) {
|
|
||||||
if (k == "title") {
|
|
||||||
Svg.title(el, props[k])
|
|
||||||
} else el.setAttributeNS(null, k, props[k])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static child(parent : Element, name: string, props: any) : SVGElement {
|
|
||||||
var el = <SVGElement>Svg.elt(name);
|
|
||||||
Svg.hydrate(el, props);
|
|
||||||
parent.appendChild(el);
|
|
||||||
return el;
|
|
||||||
}
|
|
||||||
|
|
||||||
static path(parent: Element, cls: string, data:string, title?: string) : SVGElement {
|
|
||||||
let p : any = {class:cls, d:data};
|
|
||||||
if (title) p["title"] = title;
|
|
||||||
return Svg.child(parent, "path", p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static fill(el: SVGElement, c : string) {
|
|
||||||
(<SVGStylable><any>el).style.fill = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
static fills(els: SVGElement[], c : string) {
|
|
||||||
els.forEach(el => (<SVGStylable><any>el).style.fill = c);
|
|
||||||
}
|
|
||||||
|
|
||||||
static buttonEvents(el : Element,
|
|
||||||
move: (ev: MouseEvent) => void,
|
|
||||||
start?: (ev:MouseEvent) => void,
|
|
||||||
stop?: (ev:MouseEvent) => void) {
|
|
||||||
let captured = false;
|
|
||||||
el.addEventListener('mousedown', (ev: MouseEvent) => {
|
|
||||||
captured = true;
|
|
||||||
if (start) start(ev)
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
el.addEventListener('mousemove', (ev:MouseEvent) => {
|
|
||||||
if (captured) {
|
|
||||||
move(ev);
|
|
||||||
ev.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
el.addEventListener('mouseup', (ev:MouseEvent) => {
|
|
||||||
captured = false;
|
|
||||||
if (stop) stop(ev);
|
|
||||||
});
|
|
||||||
el.addEventListener('mouseleave', (ev:MouseEvent) => {
|
|
||||||
captured = false;
|
|
||||||
if (stop) stop(ev);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static linearGradient(defs: SVGDefsElement, id : string) : SVGLinearGradientElement {
|
|
||||||
let gradient = <SVGLinearGradientElement>Svg.child(defs, "linearGradient", { id: id, x1:"0%", y1:"0%", x2:"0%", y2:"100%" });
|
|
||||||
let stop1 = Svg.child(gradient, "stop", {offset:"0%"})
|
|
||||||
let stop2 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
let stop3 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
let stop4 = Svg.child(gradient, "stop", {offset:"100%"})
|
|
||||||
return gradient;
|
|
||||||
}
|
|
||||||
|
|
||||||
static setGradientColors(lg : SVGLinearGradientElement, start:string, end:string) {
|
|
||||||
if (!lg) return;
|
|
||||||
|
|
||||||
(<SVGStopElement>lg.childNodes[0]).style.stopColor = start;
|
|
||||||
(<SVGStopElement>lg.childNodes[1]).style.stopColor = start;
|
|
||||||
(<SVGStopElement>lg.childNodes[2]).style.stopColor = end;
|
|
||||||
(<SVGStopElement>lg.childNodes[3]).style.stopColor = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
static setGradientValue(lg : SVGLinearGradientElement, percent: string) {
|
|
||||||
(<SVGStopElement>lg.childNodes[1]).setAttribute("offset", percent);
|
|
||||||
(<SVGStopElement>lg.childNodes[2]).setAttribute("offset", percent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static animate(el: SVGElement, cls: string) {
|
|
||||||
el.classList.add(cls);
|
|
||||||
let p = el.parentElement;
|
|
||||||
p.removeChild(el);
|
|
||||||
p.appendChild(el)
|
|
||||||
}
|
|
||||||
|
|
||||||
static title(el : SVGElement, txt:string) {
|
|
||||||
let t = Svg.child(el, "title", {});
|
|
||||||
t.textContent = txt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class MicrobitBoardSvg
|
export class MicrobitBoardSvg
|
||||||
{
|
{
|
||||||
public element : SVGSVGElement;
|
public element : SVGSVGElement;
|
||||||
|
@ -596,8 +596,8 @@ namespace ks.rt {
|
|||||||
writeSerial(s: string) {
|
writeSerial(s: string) {
|
||||||
for (let i = 0; i < s.length; ++i) {
|
for (let i = 0; i < s.length; ++i) {
|
||||||
let c = s[i];
|
let c = s[i];
|
||||||
switch (c) {
|
this.serialOutBuffer += c;
|
||||||
case '\n':
|
if (c == '\n') {
|
||||||
Runtime.postMessage(<SimulatorSerialMessage>{
|
Runtime.postMessage(<SimulatorSerialMessage>{
|
||||||
type: 'serial',
|
type: 'serial',
|
||||||
data: this.serialOutBuffer,
|
data: this.serialOutBuffer,
|
||||||
@ -605,8 +605,6 @@ namespace ks.rt {
|
|||||||
})
|
})
|
||||||
this.serialOutBuffer = ''
|
this.serialOutBuffer = ''
|
||||||
break;
|
break;
|
||||||
case '\r': continue;
|
|
||||||
default: this.serialOutBuffer += c;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user