Add tooltips
This commit is contained in:
parent
a3b2061743
commit
124f40942f
92
game.js
92
game.js
@ -93,6 +93,7 @@ const TITLE = 7;
|
|||||||
const STARTUP = 8;
|
const STARTUP = 8;
|
||||||
|
|
||||||
var ISTESTING = false;
|
var ISTESTING = false;
|
||||||
|
var MOUSEOVERTIME = -1
|
||||||
|
|
||||||
const UP = 0;
|
const UP = 0;
|
||||||
const RIGHT = 1;
|
const RIGHT = 1;
|
||||||
@ -198,24 +199,24 @@ var KEY_ROTATION_UP = ["W","K","w","k","8","ArrowUp"]
|
|||||||
var KEY_ROTATION_DOWN = ["S","J","s","j","2","ArrowDown"]
|
var KEY_ROTATION_DOWN = ["S","J","s","j","2","ArrowDown"]
|
||||||
var KEY_BRIDGED_BELT = ["Shift"]
|
var KEY_BRIDGED_BELT = ["Shift"]
|
||||||
|
|
||||||
var CONVEYOR_BUILD_BUTTON = {img:ID_CONVEYOR,x:-1,y:-1,w:-1,h:-1,lastselected:DEF_CONVEYOR}
|
var CONVEYOR_BUILD_BUTTON = {img:ID_CONVEYOR,x:-1,y:-1,w:-1,h:-1,lastselected:DEF_CONVEYOR,tooltip:"Conveyor Belt\nMoves bots in a direction.\n\nHold (Shift) to bridge over other belts",mobileTooltip:"Conveyor Belt\nMoves bots in a direction.\n\nHold button down to toggle bridge mode. Used to bridge over other belts"}
|
||||||
var BRANCH_BUILD_BUTTON = {img:ID_BRANCH,x:-1,y:-1,w:-1,h:-1,submenu_buttons:[DEF_BRANCHUP_RB,DEF_BRANCHUP_BR,DEF_BRANCHUP_GY,DEF_BRANCHUP_YG,DEF_BRANCHUP_PPI,DEF_BRANCHUP_PIP,DEF_BRANCHUP_BLGR,DEF_BRANCHUP_GRBL],lastselected:undefined,default:DEF_BRANCHUP_RB}
|
var BRANCH_BUILD_BUTTON = {img:ID_BRANCH,x:-1,y:-1,w:-1,h:-1,submenu_buttons:[DEF_BRANCHUP_RB,DEF_BRANCHUP_BR,DEF_BRANCHUP_GY,DEF_BRANCHUP_YG,DEF_BRANCHUP_PPI,DEF_BRANCHUP_PIP,DEF_BRANCHUP_BLGR,DEF_BRANCHUP_GRBL],lastselected:undefined,default:DEF_BRANCHUP_RB,tooltip:"Branch\nReads next tape and moves bot in the\nmatching color direction.\n\nMoves bot forward and does not consume\ntape if no match found."}
|
||||||
var WRITER_BUILD_BUTTON = {img:ID_WRITER,x:-1,y:-1,w:-1,h:-1,submenu_buttons:[DEF_WRITERRIGHT_R,DEF_WRITERRIGHT_B,DEF_WRITERRIGHT_G,DEF_WRITERRIGHT_Y,DEF_WRITERRIGHT_P,DEF_WRITERRIGHT_PI,DEF_WRITERRIGHT_BL,DEF_WRITERRIGHT_GR],lastselected:undefined,default:DEF_WRITERRIGHT_R}
|
var WRITER_BUILD_BUTTON = {img:ID_WRITER,x:-1,y:-1,w:-1,h:-1,submenu_buttons:[DEF_WRITERRIGHT_R,DEF_WRITERRIGHT_B,DEF_WRITERRIGHT_G,DEF_WRITERRIGHT_Y,DEF_WRITERRIGHT_P,DEF_WRITERRIGHT_PI,DEF_WRITERRIGHT_BL,DEF_WRITERRIGHT_GR],lastselected:undefined,default:DEF_WRITERRIGHT_R,tooltip:"Writer\nWrites a color to the end of the tape."}
|
||||||
var ROTATE_CLOCKWISE_BUTTON = {img:ID_ROTATE_CLOCKWISE,x:-1,y:-1,w:-1,h:-1,cb:rotateClockwise
|
var ROTATE_CLOCKWISE_BUTTON = {img:ID_ROTATE_CLOCKWISE,x:-1,y:-1,w:-1,h:-1,cb:rotateClockwise,tooltip:"Rotate selection clockwise."
|
||||||
}
|
}
|
||||||
var ROTATE_COUNTERCLOCKWISE_BUTTON = {img:ID_ROTATE_COUNTERCLOCKWISE,x:-1,y:-1,w:-1,h:-1,cb:rotateCounterClockwise
|
var ROTATE_COUNTERCLOCKWISE_BUTTON = {img:ID_ROTATE_COUNTERCLOCKWISE,x:-1,y:-1,w:-1,h:-1,cb:rotateCounterClockwise,tooltip:"Rotate selection counter-clockwise."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var PLAY_BUTTON = {img:ID_PLAY,x:-1,y:-1,w:-1,h:-1,cb:runGameSimulation
|
var PLAY_BUTTON = {img:ID_PLAY,x:-1,y:-1,w:-1,h:-1,cb:runGameSimulation,tooltip:"Test your great machine.\n\nConvert all the bots!"
|
||||||
}
|
}
|
||||||
var PAUSE_BUTTON = {img:ID_PAUSE,x:-1,y:-1,w:-1,h:-1,cb:pauseGameSimulation
|
var PAUSE_BUTTON = {img:ID_PAUSE,x:-1,y:-1,w:-1,h:-1,cb:pauseGameSimulation,tooltip:"Pause the great machine."
|
||||||
}
|
}
|
||||||
var RESET_BUTTON = {img:ID_RESET,x:-1,y:-1,w:-1,h:-1,cb:resetSimulation
|
var RESET_BUTTON = {img:ID_RESET,x:-1,y:-1,w:-1,h:-1,cb:resetSimulation,tooltip:"Reset the great machine."
|
||||||
}
|
}
|
||||||
var DELETE_BUTTON = {img:ID_DELETE,x:-1,y:-1,w:-1,h:-1,cb:toggleDeleteMode
|
var DELETE_BUTTON = {img:ID_DELETE,x:-1,y:-1,w:-1,h:-1,cb:toggleDeleteMode,tooltip:"Remove a piece on the field."
|
||||||
}
|
}
|
||||||
var HOME_BUTTON = {img:ID_HOME,x:-1,y:-1,w:-1,h:-1,cb:goHome
|
var HOME_BUTTON = {img:ID_HOME,x:-1,y:-1,w:-1,h:-1,cb:goHome,tooltip:"Go back to the level selection menu."
|
||||||
}
|
}
|
||||||
|
|
||||||
var MENU = {
|
var MENU = {
|
||||||
@ -830,6 +831,8 @@ function clickEvent(e) {
|
|||||||
LAST_MOUSE_X=mousepos.x
|
LAST_MOUSE_X=mousepos.x
|
||||||
LAST_MOUSE_Y=mousepos.y
|
LAST_MOUSE_Y=mousepos.y
|
||||||
|
|
||||||
|
MOUSEDOWN=true
|
||||||
|
|
||||||
if (gameState===STARTUP) {
|
if (gameState===STARTUP) {
|
||||||
currentSound.play()
|
currentSound.play()
|
||||||
setupTitleScreen()
|
setupTitleScreen()
|
||||||
@ -846,7 +849,7 @@ function clickEvent(e) {
|
|||||||
if (mouseOverButton(canvas,e,button)) {
|
if (mouseOverButton(canvas,e,button)) {
|
||||||
if (MOBILE&&button===CONVEYOR_BUILD_BUTTON) {
|
if (MOBILE&&button===CONVEYOR_BUILD_BUTTON) {
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
if (!MOUSEDOWN&&
|
if (MOUSEDOWN&&
|
||||||
LAST_MOUSE_X>=CONVEYOR_BUILD_BUTTON.x&&
|
LAST_MOUSE_X>=CONVEYOR_BUILD_BUTTON.x&&
|
||||||
LAST_MOUSE_X<=CONVEYOR_BUILD_BUTTON.x+CONVEYOR_BUILD_BUTTON.w&&
|
LAST_MOUSE_X<=CONVEYOR_BUILD_BUTTON.x+CONVEYOR_BUILD_BUTTON.w&&
|
||||||
LAST_MOUSE_Y>=CONVEYOR_BUILD_BUTTON.y&&
|
LAST_MOUSE_Y>=CONVEYOR_BUILD_BUTTON.y&&
|
||||||
@ -893,8 +896,6 @@ function clickEvent(e) {
|
|||||||
//console.log(gameGrid)
|
//console.log(gameGrid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUSEDOWN=true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function coordsInBounds(coords) {
|
function coordsInBounds(coords) {
|
||||||
@ -924,7 +925,6 @@ function placeObject(coords,def) {
|
|||||||
if (notAForbiddenObject(coords)) {
|
if (notAForbiddenObject(coords)) {
|
||||||
if (gameGrid[coords.y][coords.x].direction!==undefined&&gameGrid[coords.y][coords.x].type&&gameGrid[coords.y][coords.x].type==="BELT"&&BRIDGEDBELT) {
|
if (gameGrid[coords.y][coords.x].direction!==undefined&&gameGrid[coords.y][coords.x].type&&gameGrid[coords.y][coords.x].type==="BELT"&&BRIDGEDBELT) {
|
||||||
gameGrid[coords.y][coords.x]={...gameGrid[coords.y][coords.x],direction2:ITEM_DIRECTION}
|
gameGrid[coords.y][coords.x]={...gameGrid[coords.y][coords.x],direction2:ITEM_DIRECTION}
|
||||||
console.log(gameGrid)
|
|
||||||
} else {
|
} else {
|
||||||
var newObj={...def,direction:ITEM_DIRECTION}
|
var newObj={...def,direction:ITEM_DIRECTION}
|
||||||
gameGrid[coords.y][coords.x]=newObj
|
gameGrid[coords.y][coords.x]=newObj
|
||||||
@ -959,7 +959,7 @@ function releaseEvent(e) {
|
|||||||
SUBMENU.visible=false
|
SUBMENU.visible=false
|
||||||
}
|
}
|
||||||
DRAGGING = false
|
DRAGGING = false
|
||||||
MOUSEDOWN=false
|
MOUSEDOWN = false
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadLevel(level,botx,boty) {
|
function loadLevel(level,botx,boty) {
|
||||||
@ -1858,26 +1858,80 @@ function ButtonIsUnlocked(button) {
|
|||||||
return gameStage.locked===undefined||(!gameStage.locked.includes(button))
|
return gameStage.locked===undefined||(!gameStage.locked.includes(button))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isMouseOverButton(button) {
|
||||||
|
return LAST_MOUSE_X>=button.x&&
|
||||||
|
LAST_MOUSE_X<=button.x+button.w&&
|
||||||
|
LAST_MOUSE_Y>=button.y&&
|
||||||
|
LAST_MOUSE_Y<=button.y+button.h
|
||||||
|
}
|
||||||
|
|
||||||
|
function DisplayTooltip(button,ctx) {
|
||||||
|
//240x(20*lines) (16pt font)
|
||||||
|
var tooltipSplit=button.tooltip.split("\n")
|
||||||
|
var tooltipBounds = {
|
||||||
|
x:Math.min(Math.max(LAST_MOUSE_X-120,0),canvas.width*0.75-240),
|
||||||
|
y:LAST_MOUSE_Y-tooltipSplit.length*20-4,
|
||||||
|
w:240,
|
||||||
|
h:tooltipSplit.length*16+8
|
||||||
|
}
|
||||||
|
ctx.globalAlpha=0.9
|
||||||
|
ctx.fillStyle="#20424a"
|
||||||
|
ctx.fillRect(tooltipBounds.x,tooltipBounds.y,tooltipBounds.w,tooltipBounds.h)
|
||||||
|
ctx.strokeStyle="white"
|
||||||
|
ctx.lineWidth=1
|
||||||
|
ctx.setLineDash([])
|
||||||
|
ctx.strokeRect(tooltipBounds.x,tooltipBounds.y,tooltipBounds.w,tooltipBounds.h)
|
||||||
|
ctx.fillStyle="white"
|
||||||
|
ctx.textAlign = "left"
|
||||||
|
for (var i=0;i<tooltipSplit.length;i++) {
|
||||||
|
if (i===0) {
|
||||||
|
ctx.font="bold 12px 'Zilla Slab', serif"
|
||||||
|
} else {
|
||||||
|
ctx.font="12px 'Zilla Slab', serif"
|
||||||
|
}
|
||||||
|
ctx.fillText(tooltipSplit[i],tooltipBounds.x+8,tooltipBounds.y+i*16+16)
|
||||||
|
}
|
||||||
|
ctx.globalAlpha=1
|
||||||
|
}
|
||||||
|
|
||||||
function RenderMenu(ctx) {
|
function RenderMenu(ctx) {
|
||||||
if (MENU.visible) {
|
if (MENU.visible) {
|
||||||
ctx.fillStyle="#20424a"
|
ctx.fillStyle="#20424a"
|
||||||
ctx.fillRect(0,canvas.height*0.8,canvas.width,canvas.height*0.2)
|
ctx.fillRect(0,canvas.height*0.8,canvas.width,canvas.height*0.2)
|
||||||
var buttonX = 16
|
var buttonX = 16
|
||||||
var buttonY = canvas.height*0.8+16
|
var buttonY = canvas.height*0.8+16
|
||||||
|
var mouseOverButton = undefined
|
||||||
|
var mousedOver = false
|
||||||
|
|
||||||
for (var button of MENU.buttons) {
|
for (var button of MENU.buttons) {
|
||||||
|
button.x=buttonX
|
||||||
|
button.y=buttonY
|
||||||
|
button.w=32
|
||||||
|
button.h=32
|
||||||
if (ButtonIsUnlocked(button)) {
|
if (ButtonIsUnlocked(button)) {
|
||||||
|
if (mouseOverButton===undefined&&isMouseOverButton(button)) {
|
||||||
|
mousedOver=true
|
||||||
|
if (MOUSEOVERTIME===-1) {
|
||||||
|
MOUSEOVERTIME=new Date().getTime()
|
||||||
|
} else
|
||||||
|
if (new Date().getTime()-MOUSEOVERTIME>=500) {
|
||||||
|
mouseOverButton = button
|
||||||
|
}
|
||||||
|
}
|
||||||
if (button.lastselected) {
|
if (button.lastselected) {
|
||||||
RenderIcon(buttonX,buttonY,ctx,button.lastselected,(button.cb===undefined)?ITEM_DIRECTION:0,"#b5b5b5")
|
RenderIcon(buttonX,buttonY,ctx,button.lastselected,(button.cb===undefined)?ITEM_DIRECTION:0,"#b5b5b5")
|
||||||
} else {
|
} else {
|
||||||
AddButton(button.img,buttonX,buttonY,ctx,button,(button.cb===undefined)?ITEM_DIRECTION:0)
|
AddButton(button.img,buttonX,buttonY,ctx,button,(button.cb===undefined)?ITEM_DIRECTION:0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
button.x=buttonX
|
|
||||||
button.y=buttonY
|
|
||||||
button.w=32
|
|
||||||
button.h=32
|
|
||||||
buttonX+=47
|
buttonX+=47
|
||||||
}
|
}
|
||||||
|
if (mouseOverButton!==undefined) {
|
||||||
|
DisplayTooltip(mouseOverButton,ctx)
|
||||||
|
}
|
||||||
|
if (!mousedOver) {
|
||||||
|
MOUSEOVERTIME=-1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user