Skip to content

Commit 91481a4

Browse files
committed
reworked mouse and touch input so touch input works the same as mouse input.
1 parent 9893de8 commit 91481a4

File tree

2 files changed

+95
-80
lines changed

2 files changed

+95
-80
lines changed

sunsnake_compiler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ function compile(script) {
2424
script = script.replaceAll('+\n', '+')
2525
script = script.replaceAll(' == ', ' === ')
2626
script = script.replaceAll('.index(', '.indexOf(')
27-
// script = script.replaceAll(' self.', ' this.')
28-
// script = script.replaceAll('(self.', '(this.')
27+
script = script.replaceAll(' self.', ' this.')
28+
script = script.replaceAll('(self.', '(this.')
2929
// script = script.replaceAll('(self.', '(this.')
3030

3131
var all_lines = script.split('\n')

taptapir.js

Lines changed: 93 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ body {
4040
background-color:'#111';
4141
font-family: CerebriSans-Regular,-apple-system,system-ui,Roboto,sans-serif;
4242
overscroll-behavior-y: contain;
43+
touch-action: none;
4344
}
4445
#loading_text {
4546
position: absolute;
@@ -1238,22 +1239,6 @@ mouse = {x:0, y:0, position:[0,0], left:false, middle:false, pressure:0.0, hover
12381239
}
12391240
}
12401241

1241-
function _mousedown(event) {
1242-
_input(event)
1243-
if (event.button > 0) {
1244-
return
1245-
}
1246-
1247-
// if (event.pointerType == 'mouse' || event.pointerType == 'touch') {
1248-
// mouse.pressure = 1
1249-
// }
1250-
// else {
1251-
// mouse.pressure = event.originalEvent.pressure
1252-
// }
1253-
_update_mouse_position(event)
1254-
_handle_mouse_click(event)
1255-
}
1256-
document.addEventListener('pointerdown', _mousedown)
12571242

12581243
// const click_animation = new Entity({'parent':camera.ui, 'scale':.2, 'z':-100, 'texture':'impact_effect.gif', 'enabled':false, 'alpha':.5})
12591244
// if (!click_animation.texture) {
@@ -1262,7 +1247,7 @@ document.addEventListener('pointerdown', _mousedown)
12621247

12631248
time_of_press = 0
12641249
function _handle_mouse_click(e) {
1265-
mouse.left = true
1250+
// mouse.left = true
12661251
element_hit = document.elementFromPoint(e.pageX - window.pageXOffset, e.pageY - window.pageYOffset);
12671252
entity = entities[element_hit.entity_index]
12681253
// print(element_hit, entity.on_click)
@@ -1292,65 +1277,66 @@ function _handle_mouse_click(e) {
12921277
}
12931278
}
12941279

1295-
function _mouseup(event) {
1296-
mouse.click_end_position = mouse.position
1297-
if (time - time_of_press < .15) {
1298-
diff_x = mouse.position[0] - mouse.swipe_start_position[0]
1299-
diff_y = mouse.position[1] - mouse.swipe_start_position[1]
1300-
1301-
if (diff_x < -.05 && abs(diff_y) < .15) {
1302-
_input('swipe left')
1303-
}
1304-
if (diff_x > .05 && abs(diff_y) < .15) {
1305-
_input('swipe right')
1306-
}
1307-
if (diff_y > .05 && abs(diff_x) < .15) {
1308-
_input('swipe up')
1309-
}
1310-
if (diff_y < -.05 && abs(diff_x) < .15) {
1311-
_input('swipe down')
1312-
}
1313-
}
1314-
1315-
_input(event)
1316-
mouse.left = false;
1317-
for (var e of entities) {
1318-
if (e.dragging) {
1319-
e.dragging = false
1320-
if (e.drop) {
1321-
e.drop()
1322-
}
1323-
}
1324-
}
1325-
}
1326-
document.addEventListener('pointerup', _mouseup)
1327-
1280+
document.addEventListener('mousedown', (event) => {
1281+
if (event.button == 0) {key = 'left mouse down'; mouse.left=true; held_keys['mouse left']=true}
1282+
else if (event.button == 1) {key = 'middle mouse down'; mouse.middle=true; held_keys['mouse middle']=true}
1283+
else if (event.button == 2) {key = 'right mouse down'; mouse.right=true; held_keys['mouse right']=true}
1284+
_update_mouse_position(event.clientX, event.clientY, event.pressure)
1285+
_handle_mouse_click(event)
1286+
_input(key)
13281287

1329-
function _update_mouse_position(event) {
1288+
})
1289+
document.addEventListener('touchstart', (event) => {
1290+
event = event.touches[0]
1291+
key = 'left mouse down'; mouse.left=true; held_keys['mouse left']=true
1292+
_update_mouse_position(event.clientX, event.clientY, event.pressure)
1293+
_handle_mouse_click(event)
1294+
_input(key)
1295+
})
1296+
1297+
1298+
document.addEventListener('mouseup', (event) => {
1299+
if ( event.button == 0) {key = 'left mouse up'; mouse.left=false; held_keys['mouse left']=false}
1300+
else if (event.button == 1) {key = 'middle mouse up'; mouse.middle=false; held_keys['mouse middle']=false}
1301+
else if (event.button == 2) {key = 'right mouse up'; mouse.right=false; held_keys['mouse right']=false}
1302+
_input(key)
1303+
})
1304+
document.addEventListener('touchend', () => {
1305+
key = 'left mouse up'; mouse.left=false; held_keys['mouse left']=false
1306+
_input('left mouse up')
1307+
})
1308+
// document.addEventListener('touchcancel', (event) => {
1309+
// print(event)
1310+
// // event = event.touches[0]
1311+
// key = 'left mouse up'; mouse.left=false; held_keys['mouse left']=false
1312+
// _input('left mouse up')
1313+
// })
1314+
/* disable right click */
1315+
document.addEventListener('contextmenu', event => event.preventDefault());
1316+
1317+
function _update_mouse_position(x, y, pressure) {
13301318
window_position = _game_window.getBoundingClientRect()
1331-
event_x = event.clientX
1332-
event_y = event.clientY
1333-
mouse.x = (((event_x - window_position.left) / _game_window.clientWidth) - .5) * asp_x
1334-
mouse.y = -(((event_y - window_position.top) / _game_window.clientHeight ) - .5) / asp_y
1319+
mouse.x = (((x - window_position.left) / _game_window.clientWidth) - .5) * asp_x
1320+
mouse.y = -(((y - window_position.top) / _game_window.clientHeight ) - .5) / asp_y
13351321
mouse.position = [mouse.x, mouse.y]
1336-
mouse.pressure = event.pressure * 2
1322+
mouse.pressure = pressure * 2
13371323
}
13381324

1339-
function _onmousemove(event) {
1325+
function _onmousemove(pageX, pageY, clientX, clientY, pressure, target) {
13401326
// print('move')
1341-
_update_mouse_position(event)
1327+
_update_mouse_position(clientX, clientY, pressure)
13421328

1343-
if (!mouse.hovered_entity) {
1329+
if (!mouse.hovered_entity || !target) {
13441330
mouse.point = null
13451331
}
13461332
else {
1347-
var rect = event.target.getBoundingClientRect();
1348-
var x = event.clientX - rect.left; //x position within the element.
1349-
var y = event.clientY - rect.top; //y position within the element.
1333+
var rect = target.getBoundingClientRect();
1334+
var x = clientX - rect.left; //x position within the element.
1335+
var y = clientY - rect.top; //y position within the element.
13501336
mouse.point = [(x/rect.width)-.5, .5-(y/rect.height)]
13511337
// print(mouse.point)
13521338
}
1353-
element_hit = document.elementFromPoint(event.pageX - window.pageXOffset, event.pageY - window.pageYOffset);
1339+
element_hit = document.elementFromPoint(pageX - window.scrollX, pageY - window.scrollY);
13541340
_entity = entities[element_hit.entity_index]
13551341
if (_entity) {
13561342
mouse.hovered_entity = _entity
@@ -1384,7 +1370,15 @@ function _onmousemove(event) {
13841370
}
13851371
}
13861372
}
1387-
document.addEventListener('pointermove', _onmousemove)
1373+
document.addEventListener('mousemove', (event) => {
1374+
_onmousemove(event.pageX, event.pageY, event.clientX, event.clientY, event.pressure, event.target)
1375+
1376+
})
1377+
document.addEventListener('touchmove', (event) => {
1378+
event = event.touches[0]
1379+
_onmousemove(event.pageX, event.pageY, event.clientX, event.clientY, event.pressure, event.target)
1380+
})
1381+
13881382

13891383
mouse.update = () => { // simulate pointermove. can for example be used to get an updated mouse.hovered_entity or mouse.point without having to wait a frame.
13901384
var myEvent = new PointerEvent('pointermove')
@@ -1581,13 +1575,12 @@ function save_system_clear() {localStorage.clear()}
15811575

15821576
time = 0
15831577
delta_time = 1/60
1584-
let start, _prev_time;
1578+
let start, _prev_time
15851579
update = null
15861580
function _step(_timestamp) {
15871581
if (start === undefined) {
15881582
start = _timestamp;
15891583
}
1590-
const elapsed = _timestamp - start;
15911584
if (update) {
15921585
update()
15931586
}
@@ -1622,17 +1615,6 @@ function _input(event) {
16221615
if (event.deltaY > 0) {key = 'scroll down'}
16231616
else {key = 'scroll up'}
16241617
}
1625-
else if (event.type == 'pointerdown') {
1626-
if (event.button == 0) {key = 'left mouse down'; mouse.left=true; held_keys['mouse left']=true}
1627-
else if (event.button == 1) {key = 'middle mouse down'; mouse.middle=true; held_keys['mouse middle']=true}
1628-
else if (event.button == 2) {key = 'right mouse down'; mouse.right=true; held_keys['mouse right']=true}
1629-
}
1630-
else if (event.type == 'pointerup') {
1631-
if (event.button == 0) {key = 'left mouse up'; mouse.left=false; held_keys['mouse left']=false}
1632-
else if (event.button == 1) {key = 'middle mouse up'; mouse.middle=false; held_keys['mouse middle']=false}
1633-
else if (event.button == 2) {key = 'right mouse up'; mouse.right=false; held_keys['mouse right']=false}
1634-
}
1635-
16361618
else {
16371619
key = event.key.toLowerCase()
16381620
}
@@ -1655,7 +1637,18 @@ function _input(event) {
16551637
else if (event.type == "keydown") { // prevent key repeat
16561638
return
16571639
}
1658-
1640+
1641+
if (key == 'left mouse up') {
1642+
// drop draggables
1643+
for (var e of entities) {
1644+
if (e.dragging) {
1645+
e.dragging = false
1646+
if (e.drop) {
1647+
e.drop()
1648+
}
1649+
}
1650+
}
1651+
}
16591652

16601653
for (var e of entities) {
16611654
if (e.input && e.enabled) {
@@ -1665,6 +1658,28 @@ function _input(event) {
16651658
if (input) {
16661659
input(key)
16671660
}
1661+
1662+
// swipe input
1663+
if (key == 'left mouse up') {
1664+
mouse.click_end_position = mouse.position
1665+
if (time - time_of_press < .15) {
1666+
diff_x = mouse.position[0] - mouse.swipe_start_position[0]
1667+
diff_y = mouse.position[1] - mouse.swipe_start_position[1]
1668+
1669+
if (diff_x < -.05 && abs(diff_y) < .15) {
1670+
_input('swipe left')
1671+
}
1672+
if (diff_x > .05 && abs(diff_y) < .15) {
1673+
_input('swipe right')
1674+
}
1675+
if (diff_y > .05 && abs(diff_x) < .15) {
1676+
_input('swipe up')
1677+
}
1678+
if (diff_y < -.05 && abs(diff_x) < .15) {
1679+
_input('swipe down')
1680+
}
1681+
}
1682+
}
16681683
}
16691684
document.addEventListener('keydown', _input)
16701685
document.addEventListener('keyup', _input)

0 commit comments

Comments
 (0)