diff --git a/src/API.ts b/src/API.ts
index 856e697..645977d 100644
--- a/src/API.ts
+++ b/src/API.ts
@@ -131,9 +131,11 @@ export class UserAPI {
public onceEvaluator: boolean = true;
load: samples;
+ public global: { [key: string]: any };
constructor(public app: Editor) {
this.MidiConnection = new MidiConnection(this, app.settings);
+ this.global = {};
}
_loadUniverseFromInterface = (universe: string) => {
@@ -1045,49 +1047,6 @@ export class UserAPI {
this._drunk.toggleWrap(wrap);
};
- // =============================================================
- // Variable related functions
- // =============================================================
-
- public variable = (a: number | string, b?: any): any => {
- /**
- * Sets or returns the value of a variable internal to API.
- *
- * @param a - The name of the variable
- * @param b - [optional] The value to set the variable to
- * @returns The value of the variable
- */
- if (typeof a === "string" && b === undefined) {
- return this.variables[a];
- } else {
- this.variables[a] = b;
- return this.variables[a];
- }
- };
- v = this.variable;
-
- public delete_variable = (name: string): void => {
- /**
- * Deletes a variable internal to API.
- *
- * @param name - The name of the variable to delete
- */
- delete this.variables[name];
- };
- dv = this.delete_variable;
-
- public clear_variables = (): void => {
- /**
- * Clears all variables internal to API.
- *
- * @remarks
- * This function will delete all variables without warning.
- * Use with caution.
- */
- this.variables = {};
- };
- cv = this.clear_variables;
-
// =============================================================
// Randomness functions
// =============================================================
diff --git a/src/documentation/patterns/variables.ts b/src/documentation/patterns/variables.ts
index 489d816..5c79b95 100644
--- a/src/documentation/patterns/variables.ts
+++ b/src/documentation/patterns/variables.ts
@@ -7,20 +7,15 @@ export const variables = (application: Editor): string => {
# Variables
-By default, each script is independant from each other. Scripts live in their own bubble and you cannot get or set variables affecting a script from any other script.
+By default, each script is independant from each other. The variables defined in **script 1** are not available in **script 2**, etc. Moreover, they are overriden everytime the file is evaluated. It means that you cannot store any state or share information. However, you can use global variables to make that possible.
-**However**, everybody knows that global variables are cool and should be used everywhere. Global variables are an incredibely powerful tool to radically alter a composition in a few lines of code.
+There is a global object that you can use to store and retrieve information. It is a simple key/value store. You can store any type of data in it:
-- variable(a: number | string, b?: any): if only one argument is provided, the value of the variable will be returned through its name, denoted by the first argument. If a second argument is used, it will be saved as a global variable under the name of the first argument.
- - delete_variable(name: string): deletes a global variable from storage.
- - clear_variables(): clear **ALL** variables. **This is a destructive operation**!
-
-**Note:** since this example is running in the documentation, we cannot take advantage of the multiple scripts paradigm. Try to send a variable from the global file to the local file n°6.
-
${makeExample(
"Setting a global variable",
`
-v('my_cool_variable', 2)
+// This is script n°3
+global.my_variable = 2
`,
true,
)}
@@ -28,15 +23,16 @@ v('my_cool_variable', 2)
${makeExample(
"Getting that variable back and printing!",
`
-// Note that we just use one argument
-log(v('my_cool_variable'))
+// This is script n°4
+log(global.my_variable)
`,
- false,
+ true,
)}
+Now your scripts can share information with each other!
## Counter and iterators
-
+
You will often need to use iterators and/or counters to index over data structures (getting a note from a list of notes, etc...). There are functions ready to be used for this. Each script also comes with its own iterator that you can access using the i variable. **Note:** the script iteration count is **not** resetted between sessions. It will continue to increase the more you play, even if you just picked up an old project.
- counter(name: number | string, limit?: number, step?: number): reads the value of the counter name. You can also call this function using the dollar symbol: $.