scratch-vm/README.md

124 lines
3.9 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-10-27 15:40:24 -04:00
[![Coverage Status](https://coveralls.io/repos/github/LLK/scratch-vm/badge.svg?branch=develop)](https://coveralls.io/github/LLK/scratch-vm?branch=develop)
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
This requires you to have Git and Node.js installed.
2016-08-29 10:12:57 -04:00
In your own node environment/application:
2016-04-08 13:10:37 -04:00
```bash
npm install https://github.com/LLK/scratch-vm.git
2016-04-08 13:10:37 -04:00
```
2016-08-26 09:46:02 -04:00
If you want to edit/play yourself:
```bash
2016-09-26 11:24:44 -04:00
git clone https://github.com/LLK/scratch-vm.git
2016-08-26 09:46:02 -04:00
cd scratch-vm
npm install
```
2016-04-08 13:10:37 -04:00
## Development Server
This requires Node.js to be installed.
2016-04-08 13:10:37 -04:00
2016-09-14 17:00:17 -04:00
For convenience, we've included a development server with the VM. This is sometimes useful when running in an environment that's loading remote resources (e.g., SVGs from the Scratch server).
2016-04-18 17:20:30 -04:00
## Running the Development Server
Open a Command Prompt or Terminal in the repository and run:
```bash
npm start
2016-04-18 17:20:30 -04:00
```
## Playground
To run the Playground, make sure the dev server's running and go to [http://localhost:8073/](http://localhost:8073/) - you will be directed to the playground, which demonstrates various tools and internal state.
![VM Playground Screenshot](https://i.imgur.com/nOCNqEc.gif)
2016-04-18 17:20:30 -04:00
## Standalone Build
```bash
2016-10-17 09:35:59 -04:00
npm run build
2016-04-18 17:20:30 -04:00
```
```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
```
## How to include in a Node.js App
For an extended setup example, check out the /playground directory, which includes a fully running VM instance.
```js
var VirtualMachine = require('scratch-vm');
var vm = new VirtualMachine();
// Block events
workspace.addChangeListener(vm.blockListener);
// Run threads
2016-09-14 17:00:17 -04:00
vm.start();
```
## Abstract Syntax Tree
#### Overview
2016-09-14 17:00:17 -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`. Each target (code-running object, for example, a sprite) keeps an AST for its blocks. At any time, the current state of an AST can be viewed by inspecting the `vm.runtime.targets[...].blocks` object.
#### Anatomy of a Block
2016-09-14 17:00:17 -04:00
The VM's block representation contains all the important information for execution and storage. Here's an example representing the "when key pressed" script on a workspace:
```json
{
2016-09-14 17:00:17 -04:00
"_blocks": {
"Q]PK~yJ@BTV8Y~FfISeo": {
"id": "Q]PK~yJ@BTV8Y~FfISeo",
"opcode": "event_whenkeypressed",
"inputs": {
},
"fields": {
2016-09-14 17:00:17 -04:00
"KEY_OPTION": {
"name": "KEY_OPTION",
"value": "space"
}
},
"next": null,
2016-09-14 17:00:17 -04:00
"topLevel": true,
"parent": null,
"shadow": false,
"x": -69.333333333333,
"y": 174
}
2016-09-14 17:00:17 -04:00
},
"_scripts": [
"Q]PK~yJ@BTV8Y~FfISeo"
]
}
```
2016-04-08 13:10:37 -04:00
## Testing
```bash
2016-10-17 09:35:59 -04:00
npm test
2016-04-08 13:10:37 -04:00
```
```bash
2016-10-17 09:35:59 -04:00
npm run coverage
2016-04-08 13:10:37 -04:00
```
2016-05-10 12:18:03 -04:00
2016-10-18 12:57:12 -04:00
## Publishing to GitHub Pages
```bash
npm run deploy
```
This will push the currently built playground to the gh-pages branch of the
currently tracked remote. If you would like to change where to push to, add
a repo url argument:
```bash
npm run deploy -- -r <your repo url>
```
2016-05-17 08:49:54 -04:00
## Donate
2016-08-29 10:12:57 -04:00
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!