Commit graph

281 commits

Author SHA1 Message Date
Ray Schamp
7712b2902f Fix quote-props 2016-10-24 11:02:19 -04:00
Ray Schamp
14a2dbc50f Revert no-lonely-if 2016-10-24 10:28:31 -04:00
Ray Schamp
73edb65c4d Replace console with minilog 2016-10-23 22:20:30 -04:00
Ray Schamp
f6c0064235 All linting other than console statements 2016-10-23 22:20:29 -04:00
Ray Schamp
68ed110b49 Pass with eslint --fix
Resolved whitespace issues, e.g., space-before-function-paren and key-spacing
2016-10-23 12:41:45 -04:00
Tim Mickel
3d57c2e74c Drop single-stepping and pause modes (#294) 2016-10-20 11:42:16 -04:00
Tim Mickel
e49f076fa1 Interpreter fixes, enhancements, features (#280)
* Thread stepping rework; interp.redraw equivalent

* Add turbo mode and pause mode

* Yielding behavior to match Scratch 2.0

* Implement warp-mode procedure threads

* Add check for recursive call

* Inline wait block timer

* Revert to setInterval and always drawing

* Restore yielding in glide

* 30TPS compatibility mode

* 5-call count recursion limit

* Removing dead primitive code

* To simplify, access runtime.threads inline in `stepThreads`.

* Warp mode/timer fixes; recursive check fixes; clean-up

* Add basic single-stepping

* Add single-stepping speed slider

* Allow yielding threads to run in single-stepping

* Restore inactive threads tracking for block glows

* Add clock pausing during pause mode

* Documentation and clean-up throughout

* Don't look for block glows in `thread.topBlock`.

* Add null check for block glows; rename `_updateScriptGlows` to reflect block glowing

* Use the current executed block for glow, instead of stack

* Add more comments to `stepToProcedure`, and re-arrange to match 2.0

* Tweak to Blocks.prototype.getTopLevelScript

* Revert previous

* Fix threads array to be resilient to changes during `stepThreads`

* Restore inactive threads filtering

* Fix typo in "procedure"

* !! instead of == true
2016-10-17 23:23:16 -04:00
Eric Rosenbaum
7bd0142deb Merge branch 'develop' of https://github.com/LLK/scratch-vm into sound
# Conflicts:
#	playground/index.html
2016-10-17 17:13:43 -04:00
Ray Schamp
5615583fb2 Lint 2016-10-17 13:54:27 -04:00
Ray Schamp
bd95c1461d Add VM.clear method
Use it before loading projects so targets don't accumulate when multiple projects are loaded on the same instance.

Move check to see if the clone is the original clone onto the block implementation so all clones can be removed.

Fixes #274
2016-10-17 13:43:38 -04:00
Tim Mickel
3bfd755e60 Complete implementation of stop block (#271)
* "Other scripts in stage" sb2

* Complete implementation of "stop" block
2016-10-13 23:00:46 -04:00
Tim Mickel
c45b420115 Fix check for existing hat threads (#269) 2016-10-13 22:14:19 -04:00
Tim Mickel
1e86d48a31 Clicking blocks in the toolbox (#267) 2016-10-13 17:15:49 -04:00
Tim Mickel
8c654bbe60 Procedure blocks (#264) 2016-10-13 13:11:26 -04:00
Eric Rosenbaum
0024b209bd Merge remote-tracking branch 'LLK/develop' into develop 2016-10-11 13:47:24 -04:00
Eric Rosenbaum
ed650ba487 Merge remote-tracking branch 'LLK/develop' into develop 2016-10-05 17:16:13 -04:00
Liam
5871672551 Implement "go to" block (#238)
* Implement "go to" block

* Add a missing semicolon

My text editor doesn't automatically insert them and I'm not used to using
semicolons so much. :(

* Implement go-to-random

* Clean up the go-to-random code a bit

* Add rounding to _random_ picks
2016-10-04 18:19:52 -04:00
Tim Mickel
0a66c62f6a Mutations in block representation; an unfeatured procedure call (#212)
* Add scratch3_procedures and no-op for defnoreturn

* Add mutation adapter to parse mutations in CREATE/CHANGE events

* Add mutation-to-XML

* Update spec map for Blockly procedure names

* Placeholder for procedure special cases

* Basic stepping to procedures

* Remove extra case

* Validation for changeBlock
2016-10-03 17:43:24 -04:00
Eric Rosenbaum
7c91565408 Merge branch 'develop' of https://github.com/LLK/scratch-vm into develop 2016-09-27 18:12:20 -04:00
Tim Mickel
a118d50056 Variables and lists (#187)
* Import lists and variables from SB2

* Switch to Variable and List objects

* Add Clone.lookupOrCreateVariable, Clone.getVariable, Clone.setVariable

* Add (get, set, change) variable blocks.

* Copy variables and lists on clone instantiation

* Move variable options closer to blocks

* Add list primitives

* Move variable and lists storage to `Target` instead of `Clone`

* Move _computeIndex to a Cast function

* Rename `getList` -> `getListAsString`

* Renames renames

* Remove extra check in Cast.isNaN
2016-09-21 16:38:33 -04:00
Tim Mickel
aa5e8d2648 Clear graphic effects on green flag (#199) 2016-09-21 16:31:07 -04:00
Ray Schamp
4e547556a8 Use attachRenderer rather than the constructor
This makes the renderer optional as well as making the order of instantiation flexible.
2016-09-20 15:09:21 -04:00
Ray Schamp
499ba5235c Scope renderer to instance
This allows usage without global scope to attach a renderer to the VM. It also provides the ability to have multiple VMs/renderers to be used at once.
2016-09-20 02:52:33 -04:00
Tim Mickel
9744bcbb70 Clones (#150)
* Provide property to Clone to distinguish "original" clones

* Provide method to clone a clone's properties

* Don't report clones in the UI target list

* Add target info to Thread

* Allow hats to skip clones (for green flag)

* Green flag skips clones

* Implement "create clone" and hat

* Pass the runtime to sprites and clones (for start hats)

* Clone disposal; trigger hats after drawable initializes.

* Separate stop threads for target; fix handling of stop button

* Remove extraneous `skipClones` property

* Add global clone limit

* Don't allow a non-clone to delete itself.

* Rename `cloneClone` -> `makeClone`

* Variable updates in runtime.js

* Synchronous drawable initialization (until we put it back to promises)
2016-09-15 19:37:12 -04:00
Eric Rosenbaum
8872f663a4 Merge remote-tracking branch 'LLK/develop' into develop
# Conflicts:
#	playground/index.html
#	playground/playground.js
#	src/engine/execute.js
#	src/engine/runtime.js
#	src/index.js
#	src/sprites/clone.js
2016-09-15 16:58:41 -04:00
Tim Mickel
8987330853 Cleanly handle deleting running scripts (#162)
* Cleanly handle deleting running scripts

* Turn off glow request on retire thread; add null check
2016-09-15 13:51:40 -04:00
Eric Rosenbaum
e19c1942c3 Merge remote-tracking branch 'LLK/develop' into develop
# Conflicts:
#	src/index.js
#	src/sprites/clone.js
#	src/worker.js
2016-09-13 18:09:43 -04:00
Tim Mickel
6b08b95b97 Escape field values for XML-unsafe characters (#177)
* Escape field values for XML-unsafe characters

* String equality check ===
2016-09-13 17:51:17 -04:00
Tim Mickel
833c5ed313 When clicked hats (#156) 2016-09-12 17:16:10 -04:00
Tim Mickel
bbea1af5a3 Better shadow evaluation (#160)
* Better shadow evaluation

* Audit and improve casting for all primitives

* Force repeat times to int

* Remove colorPicker shadow menu
2016-09-12 13:14:16 -04:00
Tim Mickel
5df0acc895 Better glows (#152)
* Strip out old script glowing in thread management

* Add new tracking mechanism for glowing scripts

* Track parents and use them to determine script glows

* Use top-block for a thread if there's nothing on the stack

* Remove `console.log`
2016-09-08 09:40:53 -04:00
Tim Mickel
797f844de3 Stage, costumes, backdrops (#149)
* Add `Clone.prototype.getCostumeIndexByName`, keep in range

* Add basic costume primitives from Scratch 2.0

* Add costume getter block

* Add properties and methods for distinguishing stage and sprites-vs-clones

* Add backdrop-related looks blocks

* Fix up "switch to backdrop" to be working

* Costume/backdrop reporters are 1-indexed

* Fire "when backdrop switched" hats

* Cut cloning helpers for a separate PR

* Disable many blocks on the stage

* Refactor into _setCostumeOrBackdrop; implement switch backdrop and wait

* Fire hats even when backdrop unchanged
2016-09-08 09:40:27 -04:00
Tim Mickel
14feb64005 Create a new input if one doesn't exist (#148)
* Create a new input if one doesn't exist

* Add regression tests for move-into-empty and obscuring shadows via move
2016-09-08 09:40:01 -04:00
Eric Rosenbaum
6d21890338 Merge remote-tracking branch 'LLK/develop' into develop 2016-09-06 12:55:19 -04:00
Tim Mickel
9a8b68643a Shadow improvements (#135)
* Always add `next` to block representation

* Add `shadow` property to inputs, to maintain obscured shadows

* Create obscured shadows in SB2 import

* Add XML import of obscured shadows

* Alias SB2 shadow inputs to block inputs

* Add shadow to inputs on "delete inputs" test

* Add a small test to ensure obscured shadows are preserved

* Add more obscured shadow tests
2016-09-06 10:55:52 -04:00
dekrain
7caf8e588a More hats (#143)
* Key pressed hat

* Tabs -> Spaces

* Oops

* Edge activate

* Fix hat

Phew...

* I forgot to change it also here

:/ :/ :\

* Minor fixes for TravisCi

* Minor docs

* Line length
2016-09-03 16:33:45 -04:00
Tim Mickel
e831866789 Keyboard events, "key is down" reporter (#117)
* Keyboard events, "key is down" reporter

* Update comment about inputs

* Simplify/generalize keyMap into a keys-pressed list

* Cast values passed to scratchKeyToKeyCode appropriately.

* Cut unspaced key values

* Fix lint from merge commit
2016-09-02 11:23:09 -04:00
Tim Mickel
86f136dd10 Merge pull request #115 from tmickel/feature/2.0-loader
Start of a 2.0 project loader
2016-09-02 11:16:35 -04:00
Tim Mickel
23d9999a9f Add runtime.getTargetById helper 2016-08-31 12:18:24 -04:00
Tim Mickel
08f48c5b30 Always start runtime with an empty target list. 2016-08-31 12:03:41 -04:00
Tim Mickel
ad82a5cb74 Add naming mechanism for targets/clones 2016-08-31 11:50:10 -04:00
Tim Mickel
2c6722b958 Add unique ID for Targets 2016-08-31 11:39:57 -04:00
Tim Mickel
b1a3026ea1 Blockly XML encoding for Blocks object
Provide two functions, `toXML` and `blockToXML`, which can be used to generate workspaces based on the VM representation of the blocks.
2016-08-31 11:38:45 -04:00
Tim Mickel
c58bda1839 Record coordinate changes in block representation 2016-08-31 11:34:29 -04:00
Tim Mickel
05a5369d7b Switch Blockly listener to normal function (not closure/generated) 2016-08-31 11:34:17 -04:00
Tim Mickel
aa70c1bc3b Add shadow, x, y properties to block adapter 2016-08-31 11:32:59 -04:00
Tim Mickel
bdc95cffc0 Rename trigger->activate/start 2016-08-29 10:26:26 -04:00
Tim Mickel
1098a06985 Various renames for hat opcodes/top blocks, allScriptsDo 2016-08-29 10:18:49 -04:00
Tim Mickel
3ccfdf3df0 Use hasOwnProperty in getIsHat/getIsEdgeTriggeredHat 2016-08-29 10:03:21 -04:00
Tim Mickel
40c90bbcc7 Add isActiveThread and simplify broadcast-and-wait accordingly 2016-08-29 10:01:31 -04:00
Tim Mickel
64b82f4dc2 Switch back j->i 2016-08-29 09:52:34 -04:00
Tim Mickel
29887e24c9 Simplify execute hat check.
In case a reporter has side-effects, we'd probably like to run hat predicates even if there is no next block.
2016-08-24 11:04:23 -04:00
Tim Mickel
4f2cccf279 Fix issue when broadcasting in a when-broadcast 2016-08-23 18:37:03 -04:00
Tim Mickel
b4cf64009f General-purpose hat implementation 2016-08-23 18:12:32 -04:00
Tim Mickel
39fdbaf983 Add atStackTop helper to Thread 2016-08-23 18:12:19 -04:00
Tim Mickel
43f3b59f7c Add retireThread to seqeuencer 2016-08-23 15:53:34 -04:00
Tim Mickel
94e389c8fb Refactor script glowing into its own runtime function 2016-08-23 15:47:21 -04:00
Eric Rosenbaum
d121a4c6fa Merge remote-tracking branch 'LLK/develop' into develop
# Conflicts:
#	src/engine/runtime.js
2016-08-16 16:41:36 -04:00
Tim Mickel
aebcfde492 Add VM "I/O devices", clock, mouse as demo 2016-08-15 21:37:36 -04:00
Tim Mickel
4faaf1b685 Rename stacks to scripts
Further pushing toward removing ambiguity of what "stack" means in the codebase.
2016-08-11 11:11:27 -04:00
Tim Mickel
7780b25c46 Project wide rename substack -> branch 2016-08-10 11:43:49 -04:00
Eric Rosenbaum
951d7771f3 tonejs synth for play note blocks 2016-08-09 15:40:50 -04:00
Andrew Sliwinski
32b1d4ec61 Remove memoizee dependency and usage in adapter. Resolves GH-2 2016-08-08 17:07:50 -04:00
Tim Mickel
1f19d7a209 Only visually report when an actual value was returned 2016-07-07 19:44:26 -04:00
Tim Mickel
9c6dca8131 Add visual reporting of top-level reporter execution 2016-07-07 19:42:38 -04:00
Tim Mickel
d4353458ff Don't quit loop when a thread is yielding 2016-07-06 14:16:44 -04:00
Tim Mickel
0ae0ea5f22 Run threads for 60fps 2016-07-01 16:30:33 -04:00
Tim Mickel
660029010d Feed in requestAnimationFrame events to VM
Not sure exactly how to use these yet, but it seems helpful to have them in there.
2016-07-01 11:52:43 -04:00
Tim Mickel
ad30fa8059 Temporarily remove per-block glow 2016-07-01 11:27:01 -04:00
Tim Mickel
dda4fc8332 Yield frame on an empty substack 2016-07-01 11:24:06 -04:00
Tim Mickel
de6ba08866 Add single-frame yield mode 2016-07-01 10:44:43 -04:00
Tim Mickel
bb5acd1ef4 Fix merge issue in execute.js 2016-06-30 19:01:19 -04:00
Tim Mickel
1eaed6fff3 Implement graphic effects and size blocks 2016-06-30 18:59:47 -04:00
Tim Mickel
19da0b0032 Add renderer demo using scratch-render-webgl 2016-06-30 18:59:47 -04:00
Tim Mickel
809528abdc Straw-man implementation of targets/sprites/clones 2016-06-30 18:59:17 -04:00
Tim Mickel
1c24770f8c Remove debug calls from execute 2016-06-30 18:56:31 -04:00
Tim Mickel
ec4567aa8a Simplify logic for Thread status 2016-06-30 18:56:31 -04:00
Tim Mickel
ab6e0d3839 Remove YieldTimers, unused WeDo blocks 2016-06-30 18:56:31 -04:00
Tim Mickel
6daee9a70e Remove VM-locking yield mode per discussion 2016-06-30 18:56:23 -04:00
Tim Mickel
9a7ab57f6f Always yield thread when a promise is returned. 2016-06-30 18:56:23 -04:00
Tim Mickel
9881ee76b9 Deal with promise rejection also. 2016-06-30 18:56:23 -04:00
Tim Mickel
57057bfffc Remove unused require to fix build 2016-06-30 18:56:23 -04:00
Tim Mickel
d72cc55c11 Example that uses promises instead of util.report 2016-06-30 18:56:23 -04:00
Tim Mickel
09b9c506a9 Check for blocking case in stepToReporter 2016-06-30 18:56:23 -04:00
Tim Mickel
405ad1044e getBlockingThread_ returns null when none available. 2016-06-30 18:56:23 -04:00
Tim Mickel
d44b806b4f Add blocking yield mode 2016-06-30 18:56:23 -04:00
Tim Mickel
c63747e61b Move stepping logic for reporters to sequencer 2016-06-30 18:56:23 -04:00
Tim Mickel
e56c6e6980 Rename primitiveReturnValue -> primitiveReportedValue 2016-06-30 18:56:23 -04:00
Tim Mickel
e83cfa6049 Add comment and clear currentStackFrame.reported 2016-06-30 18:56:23 -04:00
Tim Mickel
9d9749681b Comment and else for reporter finishes right away 2016-06-30 18:56:23 -04:00
Tim Mickel
b21c9edf04 Commenting improvements 2016-06-30 18:56:23 -04:00
Tim Mickel
173f0615d3 Refactor: always push reports to the stack frame 2016-06-30 18:56:23 -04:00
Tim Mickel
6181bcd5cb Refactor Thread.peekParentStackFrame 2016-06-30 18:56:23 -04:00
Tim Mickel
bed3e28c02 Simplifications of execute ordering
and always cache returned reporter values in currentStackFrame.reported.
2016-06-30 18:56:23 -04:00
Tim Mickel
d15c93af05 Keep "waiting reporter name" on the stack frame.
Also add highlighting for inputs.
2016-06-30 18:56:23 -04:00
Tim Mickel
97f7571c6f Prototype implementation of yielding reporters 2016-06-30 18:56:23 -04:00
Tim Mickel
190208b620 Clean up yield-timers: support multiple, move logic to Threads. 2016-06-30 18:56:23 -04:00
Tim Mickel
652cc8a31c Fix references to window 2016-06-21 14:29:40 -04:00
Tim Mickel
695d0bd7fd Merge pull request #80 from tmickel/bugfix/empty-fields
Handling empty fields
2016-06-17 11:46:36 -04:00
Tim Mickel
7427fe4ff3 Add fix for adapter to deal with empty fields 2016-06-14 18:14:04 -04:00
Tim Mickel
056fb76492 Remove try/catch in execution - fix #75 2016-06-13 11:23:39 -04:00
Tim Mickel
a58fa43572 Add reset to numYieldingThreads and comment about YieldTimers 2016-06-10 13:38:35 -04:00
Tim Mickel
e9eb7c6e57 Remove leftover console.groupEnds in execute 2016-06-10 13:34:07 -04:00
Tim Mickel
0bf9ab59a1 Add implementation for ifElse 2016-06-10 10:40:15 -04:00
Tim Mickel
506e9c32be Don't attempt to glow a block that isn't known in the VM 2016-06-10 08:48:39 -04:00
Tim Mickel
7cc0c00da6 Correctly deal with empty substacks.
The stack needs to be popped in this situation.
2016-06-10 08:47:54 -04:00
Tim Mickel
559a2a0fab Remove redundant piece of code
The stack is pushed in after the thread finishes (`proceedThread`).
2016-06-10 08:41:44 -04:00
Tim Mickel
526a260101 Simplify execution by removing nextBlock
Everything is managed by the stack, including what the execute() function does.
2016-06-09 17:08:30 -04:00
Tim Mickel
d52938c255 Bind thread.yield passed to primitive to actual thread 2016-06-09 15:06:24 -04:00
Tim Mickel
88402ee68c Move popStack to inside execute 2016-06-09 14:45:54 -04:00
Tim Mickel
b0441e2ef5 Implement stub for number and add blocks 2016-06-09 14:29:07 -04:00
Tim Mickel
a987d9d9cc Only include field value in execute.argValues 2016-06-09 14:27:11 -04:00
Tim Mickel
c21700380f Pull sequencer-related callbacks out of execute 2016-06-09 14:23:34 -04:00
Tim Mickel
9df470255e Add helpers to thread object 2016-06-09 14:22:58 -04:00
Tim Mickel
1d16a97115 Recursive evaluation for block arguments 2016-06-09 13:28:50 -04:00
Tim Mickel
c4517a451b Add isInput execution property to avoid proceeding the thread 2016-06-09 13:28:06 -04:00
Tim Mickel
6e5ebcf6df Split execution into separate function and file 2016-06-09 13:27:30 -04:00
Tim Mickel
3898fe1c45 Instrument blocks.js with getters for fields and inputs 2016-06-09 13:26:07 -04:00
Tim Mickel
bd7f3245a2 Move scratch3 blocks into separate packages. 2016-06-09 11:45:58 -04:00
Tim Mickel
b9bd037963 Fixing eslint JSDoc from merge 2016-06-08 17:25:26 -04:00
Tim Mickel
42d03db28b Merge branch 'develop' into feature/eslint-jsdoc
# Conflicts:
#	.eslintrc
#	src/index.js
2016-06-08 17:23:41 -04:00
Tim Mickel
d17ffbb99b Merge pull request #60 from tmickel/feature/vm-playground-execution
Instrument VM and playground for better execution debugging
2016-06-08 17:15:36 -04:00
Tim Mickel
1f1a4941f3 Add .eslintrc rule to check JSDoc syntax
And fix the broken syntax rules
2016-06-08 16:57:08 -04:00
Tim Mickel
7a42e9ae68 Move blockListener to blocks.js; combine flyout listener 2016-06-08 13:44:09 -04:00
Tim Mickel
8fa29bc6de Spacing fix in blocks.js 2016-06-08 13:27:01 -04:00
Tim Mickel
c1e30cf2ee Add sequencer-level debug console logs 2016-06-07 21:05:32 -04:00
Tim Mickel
5767e05d56 Add block-by-block feedback to the VM playground 2016-06-07 20:59:34 -04:00
Tim Mickel
2339c5e710 Additional tests for invalid adapter inputs 2016-06-07 12:01:47 -04:00
Tim Mickel
3b4a00ce46 Add check for null substackNum, fix numbering 2016-06-07 11:32:29 -04:00
Tim Mickel
fd95d3045d Fix property check of topLevel in createBlock 2016-06-06 15:58:54 -04:00
Tim Mickel
f63e261892 Remove breaking check for blockId 2016-06-06 15:58:40 -04:00
Tim Mickel
dbb31462ad Extend getSubstack to support multiple substacks 2016-06-06 15:31:14 -04:00
Tim Mickel
9be33089a8 Refactor block management into a separate module. 2016-06-06 15:29:34 -04:00
Tim Mickel
25c3a38c16 Allow top-level creation of shadow blocks in adapter 2016-06-06 14:57:58 -04:00
Tim Mickel
aa152fd604 Rewrite of moveBlock to better reflect Blockly 2016-06-06 14:55:01 -04:00
Tim Mickel
214daa8087 Always unset topLevel in deleteStack_
Blocks may have topLevel set even if they are not present in this.stacks
2016-06-06 14:54:32 -04:00
Tim Mickel
18e4228399 Update runtime's handling of delete for new blocks structure 2016-06-06 14:53:59 -04:00
Tim Mickel
285c2792ef Only add to stacks if topLevel is true in CREATE 2016-06-06 14:53:42 -04:00
Tim Mickel
9fef9d7edd Fix up adapter's domToBlock 2016-06-06 14:44:51 -04:00
Tim Mickel
0dfc72893c Update Runtime createBlock for new structure; _addStack helper. 2016-06-06 14:12:43 -04:00
Tim Mickel
b28c50e6a5 Rewrite of adapter to support trees of blocks, inputs 2016-06-06 14:09:27 -04:00
Tim Mickel
dd53b86b8c Reduce amount of time for executing blocks 2016-05-05 13:09:37 -04:00
Tim Mickel
5c03167ec3 Hack helper for distance sensors 2016-05-03 17:39:02 -04:00
Tim Mickel
659c9b274a Add motorStop patch to stopAll 2016-05-03 17:18:28 -04:00
Tim Mickel
79b50e5172 Remove block glows from sequencer 2016-05-03 17:18:21 -04:00
Tim Mickel
833f40cfe5 Allow pushing threads that are not on this.stacks
For flyout running
2016-05-03 15:58:20 -04:00
Tim Mickel
9363432456 Hacked implementation of broadcasts 2016-05-03 14:57:10 -04:00
Tim Mickel
5f5fe6fafd Fix to check if block still exists 2016-05-03 14:35:02 -04:00
Tim Mickel
8facd64376 Hack for getting argument values 2016-05-03 14:25:12 -04:00
Tim Mickel
90a5982ff9 Fix Runtime.stopAll
Removing threads as we were looping was causing not all of them to be hit.
2016-05-03 14:11:37 -04:00