You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
3.4 KiB
JavaScript
188 lines
3.4 KiB
JavaScript
// Which interaction occurred for logic checks
|
|
const INTERACTION = {
|
|
'left_click' : 0
|
|
, 0 : 'left_click'
|
|
,'right_click' : 1
|
|
, 1 : 'right_click'
|
|
};
|
|
|
|
// Mouse data
|
|
const MOUSE = {
|
|
down : false
|
|
,x : 0
|
|
,y : 0
|
|
,button : [0,0,0] // Left, Middle, Right
|
|
};
|
|
|
|
// Keypress data
|
|
const KEYPRESS = {
|
|
w : 0
|
|
,a : 0
|
|
,s : 0
|
|
,d : 0
|
|
,shift : 0
|
|
}
|
|
|
|
|
|
// MOUSE
|
|
// https://stackoverflow.com/a/29957988
|
|
canvas.addEventListener('mousedown', function(event) {
|
|
MOUSE.button[event.button] = 1; // Button down bool
|
|
MOUSE.down = true;
|
|
});
|
|
canvas.addEventListener('mouseup', function(event) {
|
|
MOUSE.button[event.button] = 0; // Button not down bool
|
|
MOUSE.down = false;
|
|
});
|
|
canvas.addEventListener('mouseout', function(event) {
|
|
MOUSE.down = false;
|
|
});
|
|
canvas.addEventListener('mousemove', function(event) {
|
|
MOUSE.x = event.pageX - canvasLeft;
|
|
MOUSE.y = event.pageY - canvasTop;
|
|
});
|
|
|
|
|
|
// Left click
|
|
canvas.addEventListener('click', function(event) {
|
|
|
|
entityInteractionCheck(
|
|
event.pageX - canvasLeft,
|
|
event.pageY - canvasTop,
|
|
INTERACTION.left_click
|
|
);
|
|
|
|
});
|
|
|
|
// Right click
|
|
canvas.addEventListener('contextmenu', function(event) {
|
|
|
|
event.preventDefault();
|
|
|
|
entityInteractionCheck(
|
|
event.pageX - canvasLeft,
|
|
event.pageY - canvasTop,
|
|
INTERACTION.right_click
|
|
);
|
|
|
|
});
|
|
|
|
|
|
// Check if something has been clicked (via position)
|
|
// Allows to pass an entity OR an area to check
|
|
function clickableCheck(cursorX,cursorY,entity = null, area = null){
|
|
|
|
if(entity == null && area == null){ return false; }
|
|
if(entity != null){
|
|
// Set area to size/pos of entity
|
|
area = {
|
|
'x': position[entity].x,
|
|
'y': position[entity].y,
|
|
'width': size[entity].width,
|
|
'height': size[entity].height
|
|
}
|
|
}
|
|
|
|
// Collision detection between clicked offset and clickableItems
|
|
// https://stackoverflow.com/a/9880302
|
|
if(
|
|
cursorY > area['y'] && cursorY < area['y'] + area['height']
|
|
&& cursorX > area['x'] && cursorX < area['x'] + area['width']
|
|
)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
// KEYBOARD
|
|
window.addEventListener("keydown", onKeyDown, false);
|
|
window.addEventListener("keyup", onKeyUp, false);
|
|
|
|
function onKeyDown(event) {
|
|
|
|
if(event.shiftKey){ KEYPRESS.shift = true; }
|
|
|
|
var keyCode = event.keyCode;
|
|
switch (keyCode) {
|
|
case 87:
|
|
KEYPRESS.w = true;
|
|
break;
|
|
case 65:
|
|
KEYPRESS.a = true;
|
|
break;
|
|
case 83:
|
|
KEYPRESS.s = true;
|
|
break;
|
|
case 68:
|
|
KEYPRESS.d = true;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
function onKeyUp(event) {
|
|
|
|
if(event.shiftKey){ KEYPRESS.shift = false; }
|
|
|
|
var keyCode = event.keyCode;
|
|
switch (keyCode) {
|
|
case 87:
|
|
KEYPRESS.w = false;
|
|
break;
|
|
case 65:
|
|
KEYPRESS.a = false;
|
|
break;
|
|
case 83:
|
|
KEYPRESS.s = false;
|
|
break;
|
|
case 68:
|
|
KEYPRESS.d = false;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// HELPERS (Should be for all)
|
|
function entityInteractionCheck(x,y,interaction){
|
|
|
|
// Loop the entities that are interactable
|
|
// I.e. Have size, and positions
|
|
|
|
console.log('Interaction: '+INTERACTION[interaction]);
|
|
console.log('Positions; X: '+x+' Y: '+y);
|
|
|
|
|
|
for (const [entity] of Object.entries(size)) {
|
|
|
|
// If there's no position (or size), skip
|
|
if(position[entity] === undefined){ continue; }
|
|
|
|
// If the X/Y of cursor isn't within the shape's bounds can't interact
|
|
if(!clickableCheck(x,y,entity)){
|
|
continue;
|
|
}
|
|
|
|
console.log('Entity: '+entity);
|
|
console.log('Entities Total live: '+entityLive);
|
|
console.log('Entities Total overall: '+entityCount);
|
|
|
|
switch (interaction) {
|
|
case INTERACTION.left_click:
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|