basic item selection Nov 12, 2021 - Wiley Wiggins Downloads: roomtest1.zip, 3.3mb use arrow keys/return Troubleshooting basic room item selection and moving. Bugz: moving the selection off the last column of a row selects… nothing? and then the next row on another keypress overflow function crashy drop function borks holding after the pickup function can’t move up to the beginning of the rop row or down to the end of the last row generally crappy var sketchHeight = 710; var sketchWidth = 1200; var defaultItemHeight = 120; var defaultItemWidth = 80; var maxRoomItems = 56; var maxRoomRows =4; let maxRoomColumns = maxRoomItems / maxRoomRows; var maxInventoryItems = 14; var terminalBarHeight = 40; var terminalBarYLocation = sketchHeight-150; let isLit; let roomColor; let roomItems = []; let inventory =[]; let characters = []; let inscription; let selectedItemNumber = 0; let lifting = false; let holding= false; let heldItem; let liftDuration = 1000; function preload() { candleLit_sprite_sheet = loadSpriteSheet('assets/animation/candleLit.png', 200, 267, 13); candleUnlit_sprite_frame = loadAnimation('assets/animation/candleUnlit.png'); incenseLit_sprite_sheet = loadSpriteSheet('assets/animation/incenseLit.png', 200, 387, 11); incenseUnlit_sprite_frame = loadAnimation('assets/animation/incenseUnlit.png'); EBGaramond = loadFont('assets/fonts/EBGaramond12-AllSC.otf'); courierCode = loadFont('assets/fonts/courier_prime_code-webfont.woff'); } function setup() { textFont(EBGaramond); let canvas = createCanvas(sketchWidth, sketchHeight); noSmooth(); canvas.parent('sketch'); roomColor = color('#ddaabb'); noStroke(); terminalColor = color(red(roomColor) /3, green(roomColor)/3, blue(roomColor)/3); dashboardColor = color(red(roomColor) /2, green(roomColor)/2, blue(roomColor)/2); thermometerFillColor = color(red(roomColor) /2, green(roomColor)/2, blue(roomColor)/3); for (i = 0; i < 40; i++){ let candle = createSprite(-100,-100); // this is bad, it's drawing an extra sprite when the sprite is created, so I hide it offscreen let candleLitAnim = loadAnimation(candleLit_sprite_sheet); candle.addAnimation('normal', candleLitAnim); let candleItem = new Item('candle', candle); roomItems.push(candleItem); let incense = createSprite(-100,-100); let incenseLitAnim = loadAnimation(incenseLit_sprite_sheet); incense.addAnimation('normal', incenseLitAnim); let incenseItem = new Item('incense', incense); roomItems.push(incenseItem); } inscription = "Robert Taylor Biggs, 1921 - 1986"; console.log(`${roomColor},${inscription},${roomItems[0].itemName} `) } class Item { constructor(name, sprite, active) { this.name = name; this.sprite = sprite; this.active = active; } } function drawDashboard() { rectMode(CORNER); fill(dashboardColor); rect(0, height-150, width, 150); fill(terminalColor); rect(0, terminalBarYLocation, width, terminalBarHeight); fill(255); } function drawMessage(item) { fill(255); textSize(width/50); textFont(courierCode); if (!holding) { text("hold button to get " + item.name, width/2,terminalBarYLocation + terminalBarHeight/1.5 ); } else { text("press button to " + item.actionName +" "+ item.name + " | hold button to place " + item.name, width/2,terminalBarYLocation + terminalBarHeight/1.5 ); } } function liftItem(item) { if (lifting) { fill(thermometerFillColor); let diff = millis() - startTime; let x = map(diff, 0, liftDuration, 0, width); x = constrain(x, 0, width); normalizedValue = x/liftDuration; easedWidth = cubicIn(normalizedValue) * width; rect(0, terminalBarYLocation, easedWidth, terminalBarHeight); if (x >= width) { lifting = false; holding = true; heldItem = item; } drawMessage(item); } } function dropItem(itemName) { if (lifting) { fill(thermometerFillColor); let diff = millis() - startTime; let x = map(diff, 0, liftDuration, 0, width); x = constrain(x, 0, width); normalizedValue = x/liftDuration; easedWidth = cubicIn(normalizedValue) * width; rect(0, terminalBarYLocation, easedWidth, terminalBarHeight); if (x >= width) { lifting = false; holding= false; heldItem = null; } drawMessage("hold button to place", itemName); } else { console.log("tried dropping but wasn't lifting"); } } function itemOverflow(){ if (roomItems.length > maxRoomItems){ for (i = maxRoomItems; i <= roomItems.length; i++){ inventory.push(inventory[inventory.length]); roomItems.splice[i,1]; } } if (inventory.length > maxInventoryItems){ for (i = maxInventoryItems; i <= inventory.length; i++){ roomItems.push(roomItems[roomItems.length]); inventory.splice[i,1]; } } } function drawSpritesfromArrays(array) { let duration = 1; let itemRowCounter = 1; let itemColumnCounter = 1; for (i = 0; i < array.length; i++) { let thisItem = array[i]; let thisSprite = thisItem.sprite; if (thisItem != heldItem){ thisSprite.scale = .5; } else { thisSprite.scale = .8; drawMessage(thisItem); } if (itemColumnCounter > maxRoomColumns){ itemRowCounter +=1 ; itemColumnCounter = 1; } else { if (selectedItemNumber === i && !holding) { TweenLite.to(thisSprite, duration, {scale: .6}); drawMessage(thisItem); if (keyIsDown(RETURN)) { liftItem(thisItem); TweenLite.to(thisSprite, 1.5, {scale: .8}); } } /*else if (selectedItemNumber === i && holding) { drawMessage(thisItem); if (keyIsDown(RETURN)) { dropItem(heldItem); TweenLite.to(thisSprite, 1.5, {scale: .4}); } }*/ else if (selectedItemNumber != i){ TweenLite.to(thisSprite, duration, {scale: .4}); } else { thisSprite.scale = .8; } thisSprite.position.x = itemColumnCounter * defaultItemWidth; thisSprite.position.y = itemRowCounter * defaultItemHeight; itemColumnCounter +=1; } } } function draw() { //textOutput(); textAlign(CENTER); background(roomColor); textSize(width/25); fill(0); text(inscription, width/2, 50); drawSprites(); drawDashboard(); drawSpritesfromArrays(roomItems); //drawSpritesfromArrays(inventory); //itemOverflow(); //not working } function itemMove(mod) { nextItemNumber = mod; let previousItemNumber = selectedItemNumber; let nextItem = roomItems[nextItemNumber]; selectedItemNumber = mod; if (holding) { roomItems[selectedItemNumber] = heldItem; roomItems[previousItemNumber] = nextItem; } } function changeItemArray() { // switch item array from roomItems to inventory or back } function keyPressed() { if (keyCode === LEFT_ARROW) { mod = selectedItemNumber - 1 if (mod >= 0){ itemMove(mod); } else { selectedItemNumber = 0; } } else if (keyCode === RIGHT_ARROW) { mod = selectedItemNumber + 1 if (mod <= roomItems.length){ itemMove(mod); } else { selectedItemNumber = roomItems.length; } } else if (keyCode === DOWN_ARROW) { mod = selectedItemNumber + 15 if (mod <= maxRoomItems){ itemMove(mod); } else { changeItemArray(); } } else if (keyCode === UP_ARROW) { mod = selectedItemNumber - 15; if (mod > 0){ itemMove(mod); } } else if (keyCode === RETURN) { if (!lifting) { console.log("button pressed"); startTime = millis(); lifting = true; } } console.log("current selection: " + selectedItemNumber); } function keyReleased() { if (keyCode === RETURN) { lifting = false; } }