Adding mouseX() and mouseY() to arrays
This commit is contained in:
@ -8,6 +8,8 @@ declare global {
|
|||||||
sub(amount: number): number[];
|
sub(amount: number): number[];
|
||||||
mult(amount: number): number[];
|
mult(amount: number): number[];
|
||||||
div(amount: number): number[];
|
div(amount: number): number[];
|
||||||
|
mouseX(): T[],
|
||||||
|
mouseY(): T[],
|
||||||
palindrome(): T[];
|
palindrome(): T[];
|
||||||
random(index: number): T;
|
random(index: number): T;
|
||||||
rand(index: number): T;
|
rand(index: number): T;
|
||||||
@ -34,6 +36,28 @@ declare global {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const makeArrayExtensions = (api: UserAPI) => {
|
export const makeArrayExtensions = (api: UserAPI) => {
|
||||||
|
|
||||||
|
Array.prototype.mouseX = function <T>(this: T[]): T {
|
||||||
|
/**
|
||||||
|
* @returns Value from list based on mouse X position
|
||||||
|
*/
|
||||||
|
const mouse_position = api.mouseX();
|
||||||
|
const screenWidth = window.innerWidth;
|
||||||
|
const zoneWidth = screenWidth / this.length;
|
||||||
|
const zoneIndex = Math.floor(mouse_position / zoneWidth);
|
||||||
|
|
||||||
|
return this[zoneIndex];
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.prototype.mouseY = function <T>(this: T[]): T {
|
||||||
|
const mouse_position = api.mouseY();
|
||||||
|
const screenHeight = window.innerHeight;
|
||||||
|
const zoneHeight = screenHeight / this.length;
|
||||||
|
const zoneIndex = Math.floor(mouse_position / zoneHeight);
|
||||||
|
|
||||||
|
return this[zoneIndex];
|
||||||
|
};
|
||||||
|
|
||||||
Array.prototype.square = function(): number[] {
|
Array.prototype.square = function(): number[] {
|
||||||
/**
|
/**
|
||||||
* @returns New array with squared values.
|
* @returns New array with squared values.
|
||||||
|
|||||||
@ -73,6 +73,18 @@ beat([1, 0.5].beat()) :: sound(['bass3'].bar())
|
|||||||
`
|
`
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
- <ic>mouseX()</ic> / <ic>mouseY()</ic>: divides the screen in <ic>n</ic> zones and returns the value corresponding to the mouse position on screen.</ic>
|
||||||
|
|
||||||
|
${makeExample(
|
||||||
|
"Controlling an arpeggio (octave and note) with mouse", `
|
||||||
|
beat(0.25)::sound('wt_piano')
|
||||||
|
.note([0,2,3,4,5,7,8,9,11,12].scale(
|
||||||
|
'minor', 30 + [0,12,24].mouseY()).mouseX())
|
||||||
|
.room(0.5).size(4).lpad(-2, .2).lpf(500, 0.3)
|
||||||
|
.ad(0, .2).out()
|
||||||
|
`, true
|
||||||
|
)}
|
||||||
|
|
||||||
- <ic>palindrome()</ic>: Concatenates a list with the same list in reverse.
|
- <ic>palindrome()</ic>: Concatenates a list with the same list in reverse.
|
||||||
|
|
||||||
${makeExample(
|
${makeExample(
|
||||||
|
|||||||
Reference in New Issue
Block a user