I'm trying to implement my game in canvas to angular directive, but I can't figure out how to implement my class "prototype"
my code is in coffeeScript but javascript is not a problem :)
my directive:
angular.module("tetris", []).directive("tetris", ($timeout) ->
restrict: "E"
transclude: true
scope: {}
link: ($scope, $element, $log) ->
game = new Game($element.children()[0],$element.children()[1],$element.children()[2])
game.initGame()
document.onkeydown=(e)->
game.keyDown(e);
document.onkeyup=(e)->
game.keyUp(e);
return
template:"<div class=\"row relative\" id=\"canvas\">"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:1\">"+
"Your browser is not supporting canvas"+
"</canvas>"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:2\"></canvas>"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:3\"></canvas>"+
"</div>"
replace: true
)
and this is my eventHandler class which i want to implement to directive to just promote variables and events to scope. This class is called from Game class.
basically I want promote variables from Game prototype to parent scope of directive
class EventHandler
constructor:->
@scoreElm = document.getElementById('score')
@levelElm = document.getElementById('level')
@bombElm = document.getElementById('bomb')
@nextElm = document.getElementById('next')
updateScore:(score)->
@scoreElm.innerHTML=score
setBombCountDown:(time)->
@bombElm.style.display.block
@bombElm.innerHTML=time
hideBombCountDown:->
@bombElm.style.display.none
//EDIT:
I figured out how to do it, but I don't feel that this is a right way. Do you have any suggestion how to do it better?
angular.module("tetris", []).directive("tetris", ($timeout) ->
restrict: "E"
transclude: true
scope: false
link: ($scope, $element, $log) ->
class EventHandler
updateScore:(score)->
$scope.score = score
$scope.$apply()
setBombCountDown:(time)->
$scope.bombTime=time
$scope.$apply()
hideBombCountDown:->
$scope.bombTime=null
$scope.$apply()
game = new Game($element.children()[0],$element.children()[1],$element.children()[2],EventHandler)
game.initGame()
document.onkeydown=(e)->
game.keyDown(e);
document.onkeyup=(e)->
game.keyUp(e);
return
template:"<div class=\"row relative\" id=\"canvas\">"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:1\">"+
"Your browser is not supporting canvas"+
"</canvas>"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:2\"></canvas>"+
"<canvas class=\"absolute\" width=\"120\" height=\"250\" style=\"z-index:3\"></canvas>"+
"</div>"
replace: true
)