Path: blob/main/projects/HexGL/bkcore.coffee/controllers/TouchController.coffee
4627 views
###1TouchController (stick + buttons) for touch devices2Based on the touch demo by Seb Lee-Delisle <http://seb.ly/>34@class bkcore.controllers.TouchController5@author Thibaut 'BKcore' Despoulain <http://bkcore.com>6###7class TouchController89@isCompatible: ->10return ('ontouchstart' of document.documentElement);1112###13Creates a new TouchController1415@param dom DOMElement The element that will listen to touch events16@param stickMargin int The left margin in px for stick detection17@param buttonCallback function Callback for non-stick touches18###19constructor: (@dom, @stickMargin=200, @buttonCallback=null) ->20@active = true21@touches = null22@stickID = -123@stickPos = new Vec2(0, 0)24@stickStartPos = new Vec2(0, 0)25@stickVector = new Vec2(0, 0)2627@dom.addEventListener('touchstart', ((e)=> @touchStart(e)), false)28@dom.addEventListener('touchmove', ((e)=> @touchMove(e)), false)29@dom.addEventListener('touchend', ((e)=> @touchEnd(e)), false)3031###32@private33###34touchStart: (event) ->35return if not @active36for touch in event.changedTouches37if @stickID < 0 and touch.clientX < @stickMargin38@stickID = touch.identifier39@stickStartPos.set(touch.clientX, touch.clientY)40@stickPos.copy(@stickStartPos)41@stickVector.set(0, 0)42continue43else44@buttonCallback?(on, touch, event)45@touches = event.touches46false4748###49@private50###51touchMove: (event) ->52event.preventDefault()53return if not @active54for touch in event.changedTouches55if @stickID is touch.identifier and touch.clientX < @stickMargin56@stickPos.set(touch.clientX, touch.clientY)57@stickVector.copy(@stickPos).substract(@stickStartPos)58break59@touches = event.touches60false6162###63@private64###65touchEnd: (event) ->66return if not @active67@touches = event.touches68for touch in event.changedTouches69if @stickID is touch.identifier70@stickID = -171@stickVector.set(0, 0)72break73else74@buttonCallback?(off, touch, event)75false7677###78Internal class used for vector279@class Vec280@private81###82class Vec28384constructor: (@x = 0, @y = 0) ->8586substract: (vec) ->87@x -= vec.x88@y -= vec.y89@9091copy: (vec) ->92@x = vec.x93@y = vec.y94@9596set: (x, y) ->97@x = x98@y = y99@100101###102Exports103@package bkcore104###105exports = exports ? @106exports.bkcore ||= {}107exports.bkcore.controllers ||= {}108exports.bkcore.controllers.TouchController = TouchController109110