Commit graph

2516 commits

Author SHA1 Message Date
Evelyn Eastmond
b7e0edcabc Fixing linting. 2019-05-11 11:08:00 -04:00
Evelyn Eastmond
6e0b4351d8 Clarify comment. 2019-05-11 10:55:51 -04:00
Evelyn Eastmond
693038972e Clarify comment. 2019-05-11 10:54:45 -04:00
Evelyn Eastmond
bdda6f7fc6 Fix inaccurate comment. 2019-05-11 10:52:00 -04:00
Evelyn Eastmond
048598aef8 Fix inaccurate comment. 2019-05-11 10:50:25 -04:00
Evelyn Eastmond
14ffae04f8 Fix inaccurate comment. 2019-05-11 10:48:35 -04:00
Evelyn Eastmond
0256fff8ce Update public getters to new variable names. 2019-05-11 10:46:45 -04:00
Evelyn Eastmond
9ae2c4b1f1 Adding a comment. 2019-05-11 10:40:27 -04:00
Evelyn Eastmond
eabff71461 Changing some variable names regarding duration and rotation blocks for clarity. 2019-05-11 10:37:42 -04:00
Karishma Chadha
f2301e0e4d
Merge pull request #2126 from mzgoddard/runtime-script-cache-fix
Runtime script cache fix
2019-05-08 16:00:28 -04:00
Eric Rosenbaum
86f4ca5806 Do not localize motor IDs 2019-05-02 16:21:08 -04:00
Eric Rosenbaum
b75b8027a1 Always clear motor promises when setting state 2019-04-30 11:37:10 -04:00
Eric Rosenbaum
8245b46d56 Change extension name to all-caps BOOST 2019-04-29 15:43:38 -04:00
Eric Rosenbaum
85f3a3c3c5
Merge branch 'develop' into bugfix/2125 2019-04-29 14:06:13 -04:00
Evelyn Eastmond
2a04e9c7f2 Don't set motor power or direction if in rotation state. 2019-04-29 11:58:34 -04:00
Evelyn Eastmond
8745c9b3ac Move false flag left because it will get fixed by PR 2140 instead. 2019-04-29 11:54:12 -04:00
Evelyn Eastmond
c1292f6a59 Don't set motor power if it's already equal to the input power. 2019-04-29 11:53:40 -04:00
Evelyn Eastmond
71c3b72892 Moving false flag from Math.abs to turnOnForDegrees, fixing typo. 2019-04-29 11:53:40 -04:00
Evelyn Eastmond
7e01326d71 Fixing linting. 2019-04-29 11:45:15 -04:00
Evelyn Eastmond
a67b303294 Remove console logs and change a comment. 2019-04-29 11:42:09 -04:00
Evelyn Eastmond
c37a41c352 Only clear pending duration timeout if not in _ON_FOR_TIME state. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
75eae9a58a Fixing motor status setter to not clear rotation if already in rotation state. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
5109cd474c Remove more power===0 checks. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
410e13b4e3 Remove resetState and all power===0 checks. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
d0ed16d47c Fixing Math.abs false arg? and moving it to turnOnForDegrees call. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
dd82079bad Fixing a comment style. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
bb6514f1d6 Removing some tabs. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
14162b9920 Adding an empty line back in. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
7ed8d376c5 Putting in a comment. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
99c7528a1e Removing some empty changed lines. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
12233b73dd Fixing comments to reflect original code. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
73fc5b8723 Fixing lint. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
83bf1be066 Comment out all the power = 0 checks that came over from WeDo. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
270a445703 Playing with power states while we figure out the design. 2019-04-29 09:22:36 -04:00
Evelyn Eastmond
597bd68c0d Remove commented line. 2019-04-29 09:21:06 -04:00
Evelyn Eastmond
f0edd10346 Change turnOnForever and turnOff behavior for power = 0 case. 2019-04-29 09:21:06 -04:00
Karishma Chadha
39f15d3699
Update comment for new extension update event 2019-04-25 11:36:31 -04:00
unknown
a0f0a4092c Moving position reversal back to reporter to avoid conflicts. 2019-04-24 22:42:54 -04:00
Evelyn Eastmond
a61b01628e Putting back a line deleted by accident. 2019-04-24 11:28:29 -04:00
Karishma Chadha
92a73fef55 Add a runtime event to track when the toolbox extension blocks need updating. 2019-04-24 11:28:02 -04:00
Evelyn Eastmond
e3ec614173 Move reversing of sign to _onMessage, before clamping. 2019-04-24 11:24:56 -04:00
Evelyn Eastmond
adb4c0482c Reversing the sign on Motor A reported position. 2019-04-23 19:05:12 -04:00
Eric Rosenbaum
b80b05ead7
Merge pull request #2131 from ericrosenbaum/feature/add-tts-arabic
Add Arabic to Text to Speech extension
2019-04-23 17:23:19 -04:00
Christopher Willis-Ford
91f0d59be0 fix extension block color application 2019-04-23 12:31:31 -07:00
Karishma Chadha
297047a6b9 Fix serialization of blockInfo mutation property to XML 2019-04-23 11:44:45 -04:00
Christopher Willis-Ford
a27ea76d25 add "scratch_extension" only if a block has an icon 2019-04-22 17:47:31 -07:00
Christopher Willis-Ford
107e49245f adjust getBlocksXML to return categories separately
before: getBlocksXML returns one big XML string
after: getBlocksXML returns an array of {id,xml}, one entry per category
2019-04-22 12:32:52 -07:00
Christopher Willis-Ford
0247447792 embed extension blockInfo into block XML 2019-04-22 09:53:05 -07:00
Evelyn Eastmond
9a60d10190 Adding send interval delay to setMotorDirection opcode. 2019-04-22 12:17:47 -04:00
Evelyn Eastmond
26e6d25325 Make set motor speed opcode yield for send interval duration. 2019-04-22 11:59:02 -04:00
Eric Rosenbaum
f1c1883881 Add Arabic to Text to Speech 2019-04-21 21:18:56 -04:00
Christopher Willis-Ford
bd1aaecdf3 add category info to extension add & update events 2019-04-19 16:06:11 -07:00
Christopher Willis-Ford
833d33355c retrieve blockInfo from args when isDynamic is set 2019-04-19 16:06:11 -07:00
Christopher Willis-Ford
638062e982 pass blockInfo to extension methods
Sometimes a single extension method needs to service several different
instances of the same opcode. This can happen with variables or custom
procedures, for example. This change allows the extension method to
inspect the `blockInfo` for instance data, including arbitrary
extension-specific properties if necessary.
2019-04-19 14:35:35 -07:00
Michael "Z" Goddard
ebdf3865d4
retire new threads if they have no block after the hat 2019-04-19 16:48:09 -04:00
Michael "Z" Goddard
548e28480a
add BlocksRuntimeCache; rewrite startHats 2019-04-19 13:22:22 -04:00
Michael "Z" Goddard
c3f9e0945b
determine _pushThread defaults without Object.assign 2019-04-19 13:22:20 -04:00
Christopher Willis-Ford
a308b1e02f use xmlEscape instead of escape-html for extensions 2019-04-17 16:48:58 -07:00
Karishma Chadha
23136ad9c3
Revert "Cache hat block information for the runtime" 2019-04-17 16:05:24 -04:00
Karishma Chadha
a984d1ae9d
Merge pull request #1930 from mzgoddard/runtime-script-cache
Cache hat block information for the runtime
2019-04-17 15:55:47 -04:00
Eric Rosenbaum
ddd5bb2d7b
Merge pull request #2119 from ericrosenbaum/bugfix/boost-color-sensing-fixes
BOOST color sensing fixes
2019-04-16 15:44:13 -04:00
Eric Rosenbaum
8dc4832100 Reorganize color ids and indices 2019-04-16 15:24:39 -04:00
Katie Broida
eedc0b16e0
Merge pull request #2041 from ktbee/use-empty-bitmap-size
Set height and width to zero for the canvas and costume size if bitmap's sourceHeight or sourceWidth are zero
2019-04-16 14:50:42 -04:00
Kevin Nørby Andersen
1c8dfea382
Merge pull request #2115 from knandersen/bugfix/2108
Fix #2108 by making setMotorPower() and setMotorDirection() yield for a tick
2019-04-15 18:41:28 -04:00
Eric Rosenbaum
07768652f9 clean up whencolor is seeingcolor functions 2019-04-15 11:34:02 -04:00
Eric Rosenbaum
1381d2c4c0 Add boolean “seeing color brick?” 2019-04-15 09:59:03 -04:00
Eric Rosenbaum
bd5bc7947b rename hat to “when color brick seen” 2019-04-15 09:58:44 -04:00
Eric Rosenbaum
0cadf685b2 Remove color reporter 2019-04-12 17:14:34 -04:00
Eric Rosenbaum
d77944beff Clean up detection of color any 2019-04-12 17:09:10 -04:00
Eric Rosenbaum
c25b84d510 Clean up color sensing using IDs 2019-04-12 16:56:09 -04:00
Kevin Andersen
6611abec9e Makes setMotorPower() and setMotorDirection() yield for a tick 2019-04-12 14:12:43 -04:00
Kevin Andersen
12e969119a Simplified the return value for when power is 0 in motorOnForRotation() 2019-04-12 14:07:26 -04:00
Kevin Andersen
a98f3af2e1 Added a special case in motorOnForRotation() to avoid hanging blocks if power is 0 2019-04-12 13:56:29 -04:00
Kevin Andersen
8ece9757aa changes BoostMotor.status(value) to reset all motor state 2019-04-12 12:27:54 -04:00
Kevin Andersen
3f0816bac8 This commit addresses point 1 from the discussion with @ericrosenbaum around moving the setting of motor-state into the BoostMotor-class rather than having it in the opcodes.
- turnOn() renamed to _turnOn() and marked as a private function, i.e. it should only be called by BoostMotor-functions, not opcodes.
- New function turnOnForever() to be called by opcodes.
- turnOff() now sets the motor state.
- _clearRotationState now does a check for null rather than a truthy value
- all motor state setting removed from Boost-class and opcodes: stopAllMotors(), motorOnFor(), motorOnForRotation(), motorOn(), motorOff()
- turnOnForever(), turnOnFor() and turnOnForDegrees() now have a resetState-parameter with the default value of true. This allows the setMotorPower() and setMotorDirection()-functions to not reset state, to avoid them resolving the promises of the original motor commands that they are affecting.
2019-04-12 11:33:10 -04:00
Michael "Z" Goddard
39b18fedde
stop all removes threads from future execution
Stop all does not **stop** all threads. It stops the active thread and
removes all other threads from executing in the future.
2019-04-11 14:42:10 -04:00
Kevin Andersen
cd7319d044 Added state-change for Boost.stopAllMotors() 2019-04-11 14:07:07 -04:00
Kevin Andersen
c3908b5f2c removed power wrongly being set in setMotorDirection() 2019-04-11 11:16:51 -04:00
Kevin Andersen
ba2aaf90dd Corrected documentation for BoostMotor._clearRotationState() 2019-04-11 11:12:52 -04:00
Kevin Andersen
63726044e4 Major change of motor state handling to increase reliability, clear responsibility of handling state, and readability of the code.
BoostMotor now has a status getter/setter that replaces isOn() and is responsible for clearing various motor state parameters.

A new BoostMotorState-enum contains the possible states a motor can be in.

Since time-based motor commands really just trigger a BoostMotor.turnOn(), it's the opcodes that are responsible for setting the motor state.
2019-04-11 10:39:56 -04:00
Eric Rosenbaum
66ff92433e
Merge pull request #2107 from ericrosenbaum/bugfix/boost-when-color
Fix BOOST whenColor hat
2019-04-10 10:30:20 -04:00
picklesrus
d182659a57
Merge pull request #2065 from picklesrus/duplicate-sprites
Fix #4573 by using an existing utitlity that re-ids blocks when we du…
2019-04-10 09:05:53 -04:00
Karishma Chadha
51ad4185d1 Update src/sprites/sprite.js
Don't use object.values because it doesn't work in old Safaris.

Co-Authored-By: picklesrus <picklesrus@users.noreply.github.com>
2019-04-10 08:55:54 -04:00
Eric Rosenbaum
c0ea5be1d3 Fix whenColor hat 2019-04-09 17:36:14 -04:00
Kevin Andersen
b8bbe80c4f get position from this._peripheral.motor() 2019-04-09 16:20:21 -04:00
Kevin Andersen
b2c18e9dcd BoostMotor.power(value) now sets to 0 if value is 0 rather than scaling, to ensure that blocks skip immediately if speed set to 0 2019-04-09 15:34:08 -04:00
Kevin Andersen
75fc37aa30 Fixed conflicts 2019-04-09 14:57:27 -04:00
Kevin Andersen
41873bf7bf Use the power-getter rather than accessing the property directly 2019-04-09 14:52:41 -04:00
Kevin Andersen
3e55841011 Resolves #2087 and #2088. Because we weren't clearing a motor's _pendingPromiseFunction after executing it, it kept lingering, which made setMotorPower() and setMotorDirection() trigger a rotation-based command even if was responding to a timed or forever motorcommand. By clearing the property every time we fire the function, and by using pendingPromiseFunction as the conditional in setMotorPower() and setMotorDirection(), this should be taken care of. 2019-04-09 11:45:42 -04:00
Kevin Andersen
7b917cabb4 Added isBusy-flag in onMessage to make sure promises aren't resolved if the motor is still busy. Added check in motorOnForRotation() that ensure that any previous pendingPromiseFunction() is resolved before creating a new one, to avoid hanging blocks 2019-04-09 09:30:26 -04:00
Kevin Andersen
19e6a1d4c9 Merge branch 'develop' of https://github.com/LLK/scratch-vm into bugfix/2089,2088,2087 2019-04-09 08:51:28 -04:00
Kevin Andersen
c664fca9d7 changed getMotorPosition() to use the Boost.motor()-function instead of accessing the _motors-property directly 2019-04-09 08:47:00 -04:00
Kevin Andersen
ecbbacd4c0 It seems like there's a tradeoff between how we choose to set the max power of the motors. Previously, I had set the motors' max power (torque) to follow their target speed, meaning they accelerated smoothly, but also lost their torque. Then in the following commit I changed the max power to 100 which means maximum torque to achieve the target speed, which resulted in very abrupt accelerations and erratic motor movement when changing speeds:
873b56c985

In the following commit I changed the functionality so that we add a fixed amount (10) more power than the target speed, e.g. for speed 50 it would provide power 60. This is fine for high speeds, but for low speeds it provides poor torque:

e3cdbffa2a

I assume it would be possible to design some sort of calculation that enabled high torque for low speeds, and vice versa. I will discuss with the team.
2019-04-08 17:56:54 -04:00
Kevin Andersen
e24ace83a0 noticed several instances of getting especially power and direction properties from private variables instead of using the getter 2019-04-08 17:48:30 -04:00
Kevin Andersen
e986b0f4cb - changed max power setting in motor functions to be calculated with MathUtil.clamp() instead of MathUtil.wrapClamp() to avoid values rolling over!
- added an else-case to both setMotorDirection() and setMotorPower() so that dynamic speed/direction changes also affect the motorOn()-blocks just like the time- and rotation-based ones.
2019-04-08 13:48:10 -04:00
Kevin Andersen
d9e0267fa0 Resolves #2086. This issue was caused by turnOnForDegrees() not resolving a promise. Additionally, this promise can only be resolved if its assigned before turnOnDegrees() was called, so in motorOnForRotation() it is now switched around. 2019-04-05 14:18:33 -04:00
Kevin Andersen
2ee8042b6a Resolves #2085
This was caused because the case for BoostMessage.PORT_FEEDBACK didn't handle the BoostPortFeedback.DISCARDED type, which corresponds to a command failing on the Boost hub.
2019-04-05 13:35:28 -04:00
Kevin Andersen
2c6a9d85cf Resolves #2087 and #2088 for rotation-based commands.
There's quite a few interactions between degrees, their sign, and the currently set direction for the motor the degrees relate to. In this case, BoostMotor.turnOnDegrees() was being run with -degrees, and since that function does a Math.max between 0 and degrees, it resulted in 0 degrees.

Because of this, and for clarity, turnOnDegrees now only gets called with positive values. If running CCW, that should be specified in the direction-parameter.
2019-04-05 13:05:52 -04:00
Kevin Andersen
e3cdbffa2a Resolves #2089.
Partly resolves #2087, #2088.

This was happening because scratch-vm is responsible for timed motor commands rather than using the Boost hubs commands to run motors for a specific amount of time.
This meant that when we simply sent a motorOn-command, the hub would immediately return feedback for the motor that the command had completed.
The fix for this was, for timed motor commands, to not receive feedback from the motor, and instead have scratch-vm modify the BoostMotor._status.

TODO: Fix for rotation-based commands.

Agreed. Changed to 50%.

- BoostMotorMaxPower changed to BoostMotorMaxPowerAdd and now describes an extra boost (no pun intended) to the motor. Documentation added that describes the feature.
- _colorBucket renamed to _colorSamples for clarity.
- oldColor is renamed to previousColor, and is now initialized in this._sensors.
- Modified documentation.
2019-04-04 15:37:48 -04:00
Kevin Nørby Andersen
f02433510a
Merge pull request #2061 from knandersen/boostextension
Add LEGO BOOST Scratch 3.0 extension
2019-04-03 19:05:37 -04:00