Вход Регистрация
Файл: Space race/bkcore.coffee/controllers/TouchController.js
Строк: 174
<?php
// Generated by CoffeeScript 1.7.1

/*
  TouchController (stick + buttons) for touch devices
  Based on the touch demo by Seb Lee-Delisle <http://seb.ly/>
  
  @class bkcore.controllers.TouchController
  @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
 */

(function() {
  var 
TouchController, Vec2, exports, _base;

  
TouchController = (function() {
    
TouchController.isCompatible = function() {
      return 
'ontouchstart' in document.documentElement;
    };


    
/*
      Creates a new TouchController
    
      @param dom DOMElement The element that will listen to touch events
      @param stickMargin int The left margin in px for stick detection
      @param buttonCallback function Callback for non-stick touches
     */

    
function TouchController(dom, stickMargin, buttonCallback) {
      
this.dom = dom;
      
this.stickMargin = stickMargin != null ? stickMargin : 200;
      
this.buttonCallback = buttonCallback != null ? buttonCallback : null;
      
this.active = true;
      
this.touches = null;
      
this.stickID = -1;
      
this.stickPos = new Vec2(0, 0);
      
this.stickStartPos = new Vec2(0, 0);
      
this.stickVector = new Vec2(0, 0);
      
this.dom.addEventListener('touchstart', ((function(_this) {
        return function(
e) {
          return 
_this.touchStart(e);
        };
      })(
this)), false);
      
this.dom.addEventListener('touchmove', ((function(_this) {
        return function(
e) {
          return 
_this.touchMove(e);
        };
      })(
this)), false);
      
this.dom.addEventListener('touchend', ((function(_this) {
        return function(
e) {
          return 
_this.touchEnd(e);
        };
      })(
this)), false);
    }


    
/*
      @private
     */

    
TouchController.prototype.touchStart = function(event) {
      var 
touch, _i, _len, _ref;
      if (!
this.active) {
        return;
      }
      
_ref = event.changedTouches;
      for (
_i = 0, _len = _ref.length; _i < _len; _i++) {
        
touch = _ref[_i];
        if (
this.stickID < 0 && touch.clientX < this.stickMargin) {
          
this.stickID = touch.identifier;
          
this.stickStartPos.set(touch.clientX, touch.clientY);
          
this.stickPos.copy(this.stickStartPos);
          
this.stickVector.set(0, 0);
          continue;
        } else {
          if (
typeof this.buttonCallback === "function") {
            
this.buttonCallback(true, touch, event);
          }
        }
      }
      
this.touches = event.touches;
      return 
false;
    };


    
/*
      @private
     */

    
TouchController.prototype.touchMove = function(event) {
      var 
touch, _i, _len, _ref;
      
event.preventDefault();
      if (!
this.active) {
        return;
      }
      
_ref = event.changedTouches;
      for (
_i = 0, _len = _ref.length; _i < _len; _i++) {
        
touch = _ref[_i];
        if (
this.stickID === touch.identifier && touch.clientX < this.stickMargin) {
          
this.stickPos.set(touch.clientX, touch.clientY);
          
this.stickVector.copy(this.stickPos).substract(this.stickStartPos);
          break;
        }
      }
      
this.touches = event.touches;
      return 
false;
    };


    
/*
      @private
     */

    
TouchController.prototype.touchEnd = function(event) {
      var 
touch, _i, _len, _ref;
      if (!
this.active) {
        return;
      }
      
this.touches = event.touches;
      
_ref = event.changedTouches;
      for (
_i = 0, _len = _ref.length; _i < _len; _i++) {
        
touch = _ref[_i];
        if (
this.stickID === touch.identifier) {
          
this.stickID = -1;
          
this.stickVector.set(0, 0);
          break;
        } else {
          if (
typeof this.buttonCallback === "function") {
            
this.buttonCallback(false, touch, event);
          }
        }
      }
      return 
false;
    };

    return 
TouchController;

  })();


  
/*
    Internal class used for vector2
    @class Vec2
    @private
   */

  
Vec2 = (function() {
    function 
Vec2(x, y) {
      
this.x = x != null ? x : 0;
      
this.y = y != null ? y : 0;
    }

    
Vec2.prototype.substract = function(vec) {
      
this.x -= vec.x;
      
this.y -= vec.y;
      return 
this;
    };

    
Vec2.prototype.copy = function(vec) {
      
this.x = vec.x;
      
this.y = vec.y;
      return 
this;
    };

    
Vec2.prototype.set = function(x, y) {
      
this.x = x;
      
this.y = y;
      return 
this;
    };

    return 
Vec2;

  })();


  
/*
    Exports
    @package bkcore
   */

  
exports = exports != null ? exports : this;

  
exports.bkcore || (exports.bkcore = {});

  (
_base = exports.bkcore).controllers || (_base.controllers = {});

  
exports.bkcore.controllers.TouchController = TouchController;

}).
call(this);
?>
Онлайн: 0
Реклама