scratch-vm/README.md

95 lines
2.6 KiB
Markdown
Raw Normal View History

2016-04-08 13:10:37 -04:00
## scratch-vm
2016-05-10 12:40:52 -04:00
#### Scratch VM is a library for representing, running, and maintaining the state of computer programs written using [Scratch Blocks](https://github.com/LLK/scratch-blocks).
2016-04-08 13:10:37 -04:00
2016-05-17 21:09:15 -04:00
[![Build Status](https://travis-ci.org/LLK/scratch-vm.svg?branch=develop)](https://travis-ci.org/LLK/scratch-vm)
2016-05-17 09:44:54 -04:00
[![Dependency Status](https://david-dm.org/LLK/scratch-vm.svg)](https://david-dm.org/LLK/scratch-vm)
[![devDependency Status](https://david-dm.org/LLK/scratch-vm/dev-status.svg)](https://david-dm.org/LLK/scratch-vm#info=devDependencies)
2016-04-18 17:22:23 -04:00
2016-04-08 13:10:37 -04:00
## Installation
```bash
npm install scratch-vm
```
2016-04-18 17:20:30 -04:00
## Setup
2016-04-08 13:10:37 -04:00
```js
2016-04-18 17:20:30 -04:00
var VirtualMachine = require('scratch-vm');
var vm = new VirtualMachine();
2016-04-08 13:10:37 -04:00
2016-04-18 17:20:30 -04:00
// Block events
2016-05-10 12:12:31 -04:00
workspace.addChangeListener(function(e) {
// Handle "tapping" a block
if (e instanceof Blockly.Events.Ui && e.element === 'click') {
var stackBlock = workspace.getBlockById(e.blockId).getRootBlock().id;
vm.runtime.toggleStack(stackBlock);
// Otherwise, pass along to the block listener
} else {
vm.blockListener(e);
}
});
2016-04-18 17:20:30 -04:00
2016-05-10 12:12:31 -04:00
// Run threads
vm.runtime.start();
2016-04-18 17:20:30 -04:00
```
## Standalone Build
```bash
make build
```
```html
<script src="/path/to/vm.js"></script>
<script>
var vm = new window.VirtualMachine();
// do things
</script>
2016-04-08 13:10:37 -04:00
```
## Abstract Syntax Tree
#### Overview
2016-05-10 12:12:31 -04:00
The Virtual Machine constructs and maintains the state of an [Abstract Syntax Tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree) (AST) by listening to events emitted by the [scratch-blocks](https://github.com/LLK/scratch-blocks) workspace via the `blockListener`. At any time, the current state of the AST can be viewed by inspecting the `vm.runtime.blocks` object.
#### Anatomy of a Block
```json
{
"7AJZR#NA;m*b}R]pdq63": {
"id": "7AJZR#NA;m*b}R]pdq63",
"opcode": "control_wait",
"inputs": {
"DURATION": {
"name": "DURATION",
"block": ",xA8/S!Z6+kR,9dph.rO"
}
},
"fields": {},
"next": null,
"topLevel": true
},
",xA8/S!Z6+kR,9dph.rO": {
"id": ",xA8/S!Z6+kR,9dph.rO",
"opcode": "math_number",
"inputs": {},
"fields": {
"NUM": {
"name": "NUM",
"value": "1"
}
},
"next": null,
"topLevel": false
}
}
```
2016-04-08 13:10:37 -04:00
## Testing
```bash
make test
```
```bash
make coverage
```
2016-05-10 12:18:03 -04:00
2016-05-17 08:49:54 -04:00
## Donate
We provide [Scratch](https://scratch.mit.edu) free of charge, and want to keep it that way! Please consider making a [donation](https://secure.donationpay.org/scratchfoundation/) to support our continued engineering, design, community, and resource development efforts. Donations of any size are appreciated. Thank you!