if (typeof defaultMode === 'undefined') { var defaultMode = "sketch"; } if (typeof defaultSize === 'undefined') { var defaultSize = "128"; } if (typeof defaultDisplay === 'undefined') { var defaultDisplay = "both"; } if (typeof defaultEmoji === 'undefined') { var defaultDisplay = 76; } if (typeof backgroundColor === 'undefined') { var backgroundColor = "rgb(232, 232, 232)"; } let canvasWidth = 960; let canvasHeight = 500; let glyphSelector; let modeSelector; let sizeSelector; let show_oddball = false; let oddball_row = 0; let oddball_col = 0; let val_sliders = []; let max_vals = [360, 100, 100]; let curEmoji = defaultEmoji; let NUM_EMOJI = 872; let EMOJI_WIDTH = 38; let lastKeyPressedTime; let secondsUntilSwapMode = 10; let secondsPerEmoji = 5; let isSwappingEmoji = false; let emojiSwapLerp = 0; let prevEmoji = 0; let lastEmojiSwappedTime; let emojiImg; let sketchImg; let curEmojiImg; let curEmojiPixels; let curEmojiColors, nextEmojiColors, prevEmojiColors; function preload() { emojiImg = loadImage("twemoji36b_montage.png"); sketchImg = loadImage("sketch.png"); } function setup() { // create the drawing canvas, save the canvas element let main_canvas = createCanvas(canvasWidth, canvasHeight); main_canvas.parent('canvasContainer'); let now = millis(); lastKeyPressedTime = now; lastEmojiSwappedTime = now; // create two sliders for (i=0; i<3; i++) { let slider = createSlider(0, 10*max_vals[i], 10*max_vals[i]/2); slider.parent("slider" + (i+1) + "Container") slider.changed(sliderUpdated); slider.mouseMoved(sliderUpdated); slider.touchMoved(sliderUpdated); val_sliders.push(slider); } modeSelector = createSelect(); modeSelector.option('sketch'); modeSelector.option('edit'); modeSelector.option('random'); modeSelector.option('gradient'); modeSelector.option('oddball'); modeSelector.option('image'); modeSelector.changed(modeChangedEvent); modeSelector.value(defaultMode); modeSelector.parent('selector1Container'); glyphSelector = createSelect(); glyphSelector.option('color'); glyphSelector.option('glyph'); glyphSelector.option('both'); glyphSelector.value(defaultDisplay); glyphSelector.parent('selector2Container'); sizeSelector = createSelect(); sizeSelector.option('32'); sizeSelector.option('64'); sizeSelector.option('128'); sizeSelector.parent('selector3Container'); sizeSelector.value(defaultSize); sizeSelector.changed(sizeChangedEvent); guideCheckbox = createCheckbox('', false); guideCheckbox.parent('checkContainer'); guideCheckbox.changed(guideChangedEvent); button = createButton('redo'); button.mousePressed(buttonPressedEvent); button.parent('buttonContainer'); curEmojiImg = createImage(36, 36); // create an array for HSB values: [18][18][3] curEmojiPixels = Array(18); curEmojiColors = Array(18); for(let i=0; i<18; i++) { curEmojiPixels[i] = Array(18); curEmojiColors[i] = Array(18); for(let j=0; j<18; j++) { curEmojiPixels[i][j] = Array(3); } } gray_glyph = new Glyph(); refreshGridData(); modeChangedEvent(); } function sliderUpdated() { redraw(); } function mouseClicked() { if (mouseX > width/4) { refreshGridData(); } redraw(); } function dataInterpolate(data1, data2, val) { let d = new Array(3); for(let i=0; i<3; i++) { d[i] = lerp(data1[i], data2[i], val); } return d; } let numGridRows; let numGridCols; let gridValues; // row, col order let gridOffsetX, gridOffsetY; let gridSpacingX, gridSpacingY; // Generate data for putting glyphs in a grid function clamp(num, min, max) { return Math.min(Math.max(num, min), max); } function refreshGridData() { let mode = modeSelector.value(); let glyphSize = parseInt(sizeSelector.value(), 10); if (mode == "image") { if(glyphSize == 32) { numGridCols = 18; numGridRows = 17; gridOffsetX = 320; gridSpacingX = 31; gridOffsetY = 2; gridSpacingY = 29; } else if(glyphSize == 64) { numGridCols = 10; numGridRows = 9; gridOffsetX = 280; gridSpacingX = 66; gridOffsetY = -18; gridSpacingY = 59; } else if(glyphSize == 128) { numGridCols = 6; numGridRows = 5; gridOffsetX = 164; gridSpacingX = 132; gridOffsetY = -50; gridSpacingY = 118; } else if(glyphSize == 256) { numGridCols = 3; numGridRows = 3; gridOffsetX = 172; gridSpacingX = 262; gridOffsetY = -100; gridSpacingY = 234; } } else if(glyphSize == 128) { numGridCols = 6; numGridRows = 3; gridOffsetX = 38; gridSpacingX = 156; gridOffsetY = 32; gridSpacingY = 166; } else if(glyphSize == 256) { numGridCols = 3; numGridRows = 1; gridOffsetX = 20; gridSpacingX = 320; gridOffsetY = 100; gridSpacingY = 500; } else if(glyphSize == 64) { numGridCols = 12; numGridRows = 6; gridOffsetX = 15; gridSpacingX = 78; gridOffsetY = 15; gridSpacingY = 81; } else if(glyphSize == 32) { numGridCols = 21; numGridRows = 11; gridOffsetX = 22; gridSpacingX = 44; gridOffsetY = 22; gridSpacingY = 42; } gridValues = new Array(numGridRows); for (let i=0; i