-
Notifications
You must be signed in to change notification settings - Fork 281
Vectors #2074
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Vectors #2074
Changes from all commits
e437ea9
f0f99b6
17680ea
af93815
5d4882b
b9ad34e
8cd2ad5
c8ba421
1425e97
bafa172
c83d9f4
080e790
957cc7f
293efd2
84784db
2bdeb70
fe8abcc
6c6085d
766784d
58b0eca
6587f1b
215bcf8
7f5daee
094a242
7dfa05a
db0edbd
86ddd01
fa0d902
abbdf2f
a481dcb
14cdecc
7e9c6fc
d422aff
2c7e9da
38f99bf
7fe7b1a
1d505e4
f374566
30b67f0
605495f
84a6583
6b220ab
b48d9cf
41bd715
9a0b0d1
3b7f9d8
9b0792b
e262c63
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
// Name: Vectors | ||
// ID: unknownvectors | ||
// Description: variables with a direction. | ||
// By: Unknown07724 <https://scratch.mit.edu/users/Unknown07724/> | ||
// License: MPL-2.0 | ||
|
||
(function (Scratch) { | ||
"use strict"; | ||
|
||
const Vectoricon = | ||
"data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzNi43OTk1IiBoZWlnaHQ9IjMyLjI0ODkxIiB2aWV3Qm94PSIwLDAsMzYuNzk5NSwzMi4yNDg5MSI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIxOC40NzA2OCwtMTY1LjYwMTIyKSI+PGcgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48Zz48cGF0aCBkPSJNMjMxLjA4MzA0LDE4NC4yMDMxbDExLjgxMjk2LC0xNC44NjI4NWw3Ljc2Mzc1LDcuNzYzNzVsLTE1Ljk5NTY2LDExLjAyODd6IiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMSIvPjxwYXRoIGQ9Ik0yNTQuNzcwMTgsMTY2LjEwMTIybDAsMTcuNDI3OTRsLTE3LjQyNzk0LC0xNy40Mjc5NHoiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxIi8+PHBhdGggZD0iTTI0MS42NDkzMywxNzIuNjI0MWw1LjE2NjY2LC0zLjUwOTEzbDQuNTM4MzMsNi45NTg4MSwtNS4xNjY2NiwzLjUwOTEzeiIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAiLz48cGF0aCBkPSJNMjQxLjQyMTQ5LDE3Mi4wNzE2M2wyLjU4ODU5LC0zLjQ2NzY4bDEuMjMzODIsMC45ODk2M2wtMy40MTg4NCwzLjQxODg0eiIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAiLz48L2c+PHRleHQgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE4LjU5NTY4LDE5MS43MjUxMykgc2NhbGUoMC41LDAuNSkiIGZvbnQtc2l6ZT0iNDAiIHhtbDpzcGFjZT0icHJlc2VydmUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIwLjUiIGZvbnQtZmFtaWx5PSJTYW5zIFNlcmlmIiBmb250LXdlaWdodD0ibm9ybWFsIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPjx0c3BhbiB4PSIwIiBkeT0iMCI+MS4yPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg=="; | ||
|
||
// Unsandboxed check | ||
if (!Scratch.extensions.unsandboxed) { | ||
throw new Error("This extension must run unsandboxed"); | ||
} | ||
|
||
const ids = []; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why can't this be a set |
||
const directions = {}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. these should be Object.create(null); or a Map |
||
const magnitudes = {}; | ||
|
||
class UnknownVectors { | ||
getInfo() { | ||
return { | ||
id: "unknownvectors", | ||
name: Scratch.translate("Vectors"), | ||
color1: "#3495eb", | ||
blocksIconURL: Vectoricon, | ||
blocks: [ | ||
{ | ||
opcode: "vectorCreate", | ||
blockType: Scratch.BlockType.COMMAND, | ||
text: Scratch.translate( | ||
"create vector with ID [ID], direction [DIRECTION] and magnitude [MAGNITUDE]" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you have inconsistent capitalization across the blocks, the blocks should be written starting with lowercase. they are NOT sentences. |
||
), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
DIRECTION: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 90, | ||
}, | ||
MAGNITUDE: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 10, | ||
}, | ||
}, | ||
}, | ||
{ | ||
opcode: "vectorChangeMag", | ||
blockType: Scratch.BlockType.COMMAND, | ||
text: Scratch.translate( | ||
"change vector [ID]'s magnitude to [MAGNITUDE]" | ||
), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
MAGNITUDE: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 10, | ||
}, | ||
}, | ||
}, | ||
{ | ||
opcode: "vectorChange", | ||
blockType: Scratch.BlockType.COMMAND, | ||
text: Scratch.translate( | ||
"change vector [ID] to direction [DIRECTION] and magnitude [MAGNITUDE]" | ||
), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
DIRECTION: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 90, | ||
}, | ||
MAGNITUDE: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 10, | ||
}, | ||
}, | ||
}, | ||
{ | ||
opcode: "vectorDelete", | ||
blockType: Scratch.BlockType.COMMAND, | ||
text: Scratch.translate("delete vector with [ID]"), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
}, | ||
}, | ||
{ | ||
opcode: "vectorChangedir", | ||
blockType: Scratch.BlockType.COMMAND, | ||
text: Scratch.translate( | ||
"change vector [ID]'s direction to [DIRECTION]" | ||
), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
DIRECTION: { | ||
type: Scratch.ArgumentType.NUMBER, | ||
defaultValue: 90, | ||
}, | ||
}, | ||
}, | ||
{ | ||
opcode: "vectorMag", | ||
blockType: Scratch.BlockType.REPORTER, | ||
text: Scratch.translate("magnitude of vector [ID]"), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
}, | ||
}, | ||
{ | ||
opcode: "listOfIDs", | ||
blockType: Scratch.BlockType.REPORTER, | ||
text: Scratch.translate("List of IDs"), | ||
}, | ||
{ | ||
opcode: "vectorDir", | ||
blockType: Scratch.BlockType.REPORTER, | ||
text: Scratch.translate("direction of vector [ID]"), | ||
arguments: { | ||
ID: { type: Scratch.ArgumentType.STRING, defaultValue: "vec1" }, | ||
}, | ||
}, | ||
], | ||
}; | ||
} | ||
|
||
vectorCreate(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
if (!ids.includes(id)) ids.push(id); | ||
directions[id] = Scratch.Cast.toNumber(args.DIRECTION); | ||
magnitudes[id] = Scratch.Cast.toNumber(args.MAGNITUDE); | ||
} | ||
|
||
vectorChange(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
directions[id] = Scratch.Cast.toNumber(args.DIRECTION); | ||
magnitudes[id] = Scratch.Cast.toNumber(args.MAGNITUDE); | ||
} | ||
|
||
vectorChangedir(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
directions[id] = Scratch.Cast.toNumber(args.DIRECTION); | ||
} | ||
|
||
vectorChangeMag(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
magnitudes[id] = Scratch.Cast.toNumber(args.MAGNITUDE); | ||
} | ||
|
||
vectorMag(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
return magnitudes[id] !== undefined | ||
? magnitudes[id] | ||
: Scratch.translate("null"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. translating block return values is usually not a good idea; people may compare the result of this block to the string |
||
} | ||
|
||
vectorDelete(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
const index = ids.indexOf(id); | ||
if (index !== -1) { | ||
ids.splice(index, 1); | ||
delete directions[id]; | ||
delete magnitudes[id]; | ||
} | ||
} | ||
|
||
vectorDir(args) { | ||
const id = Scratch.Cast.toString(args.ID); | ||
return directions[id] !== undefined | ||
? directions[id] | ||
: Scratch.translate("null"); | ||
} | ||
|
||
listofIDs() { | ||
return ids.join(", "); | ||
} | ||
} | ||
|
||
Scratch.extensions.register(new UnknownVectors()); | ||
})(Scratch); |
Uh oh!
There was an error while loading. Please reload this page.