shank 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +22 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +0 -0
- data/Rakefile +2 -0
- data/lib/assets/javascripts/engine.gamepads.coffee +46 -0
- data/lib/assets/javascripts/engine_stats.coffee +10 -0
- data/lib/assets/javascripts/error_handler.coffee +11 -0
- data/lib/assets/javascripts/game_keys.coffee +6 -0
- data/lib/assets/javascripts/gamepads.coffee +21 -0
- data/lib/assets/javascripts/gamepads.controller.coffee +138 -0
- data/lib/assets/javascripts/init.coffee +6 -0
- data/lib/assets/javascripts/joysticks.coffee +238 -0
- data/lib/assets/javascripts/jquery.hotkeys.coffee +161 -0
- data/lib/assets/javascripts/jquery.reverse_merge.coffee +21 -0
- data/lib/assets/javascripts/keydown.coffee +73 -0
- data/lib/assets/javascripts/mouse.coffee +66 -0
- data/lib/assets/javascripts/music.coffee +78 -0
- data/lib/assets/javascripts/pixie_canvas.coffee +739 -0
- data/lib/assets/javascripts/request_animation_frame.coffee +22 -0
- data/lib/assets/javascripts/shank.coffee +18 -0
- data/lib/assets/javascripts/sound.coffee +131 -0
- data/lib/assets/javascripts/storage.coffee +88 -0
- data/lib/shank/version.rb +3 -0
- data/lib/shank.rb +10 -0
- data/shank.gemspec +17 -0
- data/test/jquery.reverse_merge.coffee +43 -0
- data/test/keydown.coffee +19 -0
- data/test/pixie_canvas.coffee +18 -0
- data/test/request_animation_frame.coffee +7 -0
- data/test/sound.coffee +7 -0
- data/test/storage.coffee +47 -0
- data/test/xstats.coffee +7 -0
- data/vendor/assets/javascripts/xstats.js +767 -0
- metadata +113 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
###*
|
2
|
+
Merges properties from objects into target without overiding.
|
3
|
+
First come, first served.
|
4
|
+
|
5
|
+
@name reverseMerge
|
6
|
+
@methodOf jQuery#
|
7
|
+
|
8
|
+
@param {Object} target the object to merge the given properties onto
|
9
|
+
@param {Object} objects... one or more objects whose properties are merged onto target
|
10
|
+
|
11
|
+
@return {Object} target
|
12
|
+
###
|
13
|
+
jQuery.extend
|
14
|
+
reverseMerge: (target, objects...) ->
|
15
|
+
for object in objects
|
16
|
+
for name of object
|
17
|
+
unless target.hasOwnProperty(name)
|
18
|
+
target[name] = object[name]
|
19
|
+
|
20
|
+
return target
|
21
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
$ ->
|
2
|
+
###*
|
3
|
+
The global keydown property lets your query the status of keys.
|
4
|
+
|
5
|
+
<code><pre>
|
6
|
+
if keydown.left
|
7
|
+
moveLeft()
|
8
|
+
|
9
|
+
if keydown.a or keydown.space
|
10
|
+
attack()
|
11
|
+
|
12
|
+
if keydown.return
|
13
|
+
confirm()
|
14
|
+
|
15
|
+
if keydown.esc
|
16
|
+
cancel()
|
17
|
+
</pre></code>
|
18
|
+
|
19
|
+
@name keydown
|
20
|
+
@namespace
|
21
|
+
###
|
22
|
+
|
23
|
+
###*
|
24
|
+
The global justPressed property lets your query the status of keys. However,
|
25
|
+
unlike keydown it will only trigger once for each time the key is pressed.
|
26
|
+
|
27
|
+
<code><pre>
|
28
|
+
if justPressed.left
|
29
|
+
moveLeft()
|
30
|
+
|
31
|
+
if justPressed.a or justPressed.space
|
32
|
+
attack()
|
33
|
+
|
34
|
+
if justPressed.return
|
35
|
+
confirm()
|
36
|
+
|
37
|
+
if justPressed.esc
|
38
|
+
cancel()
|
39
|
+
</pre></code>
|
40
|
+
|
41
|
+
@name justPressed
|
42
|
+
@namespace
|
43
|
+
###
|
44
|
+
window.keydown = {}
|
45
|
+
window.justPressed = {}
|
46
|
+
|
47
|
+
prevKeysDown = {}
|
48
|
+
|
49
|
+
keyName = (event) ->
|
50
|
+
jQuery.hotkeys.specialKeys[event.which] ||
|
51
|
+
String.fromCharCode(event.which).toLowerCase()
|
52
|
+
|
53
|
+
$(document).bind "keydown", (event) ->
|
54
|
+
key = keyName(event)
|
55
|
+
keydown[key] = true
|
56
|
+
|
57
|
+
$(document).bind "keyup", (event) ->
|
58
|
+
key = keyName(event)
|
59
|
+
keydown[key] = false
|
60
|
+
|
61
|
+
window.updateKeys = () ->
|
62
|
+
window.justPressed = {}
|
63
|
+
keydown.any = false
|
64
|
+
|
65
|
+
for key, value of keydown
|
66
|
+
justPressed[key] = value unless prevKeysDown[key]
|
67
|
+
|
68
|
+
justPressed.any = true if (justPressed[key] || mousePressed.left || mousePressed.right)
|
69
|
+
keydown.any = true if (value || mouseDown.left || mouseDown.right)
|
70
|
+
|
71
|
+
prevKeysDown = {}
|
72
|
+
for key, value of keydown
|
73
|
+
prevKeysDown[key] = value
|
@@ -0,0 +1,66 @@
|
|
1
|
+
$ ->
|
2
|
+
###*
|
3
|
+
The global mouseDown property lets your query the status of mouse buttons.
|
4
|
+
|
5
|
+
<code><pre>
|
6
|
+
if mouseDown.left
|
7
|
+
moveLeft()
|
8
|
+
|
9
|
+
if mouseDown.right
|
10
|
+
attack()
|
11
|
+
</pre></code>
|
12
|
+
|
13
|
+
@name mouseDown
|
14
|
+
@namespace
|
15
|
+
###
|
16
|
+
|
17
|
+
###*
|
18
|
+
The global mousePressed property lets your query the status of mouse buttons.
|
19
|
+
However, unlike mouseDown it will only trigger the first time the button
|
20
|
+
pressed.
|
21
|
+
|
22
|
+
<code><pre>
|
23
|
+
if mousePressed.left
|
24
|
+
moveLeft()
|
25
|
+
|
26
|
+
if mousePressed.right
|
27
|
+
attack()
|
28
|
+
</pre></code>
|
29
|
+
|
30
|
+
@name mousePressed
|
31
|
+
@namespace
|
32
|
+
###
|
33
|
+
window.mouseDown = {}
|
34
|
+
window.mousePressed = {}
|
35
|
+
window.mousePosition = Point(0, 0)
|
36
|
+
|
37
|
+
prevButtonsDown = {}
|
38
|
+
|
39
|
+
buttonNames =
|
40
|
+
1: "left"
|
41
|
+
2: "middle"
|
42
|
+
3: "right"
|
43
|
+
|
44
|
+
buttonName = (event) ->
|
45
|
+
buttonNames[event.which]
|
46
|
+
|
47
|
+
$(document).bind "mousemove", (event) ->
|
48
|
+
#TODO Position relative to canvas element
|
49
|
+
mousePosition.x = event.pageX
|
50
|
+
mousePosition.y = event.pageY
|
51
|
+
|
52
|
+
$(document).bind "mousedown", (event) ->
|
53
|
+
mouseDown[buttonName(event)] = true
|
54
|
+
|
55
|
+
$(document).bind "mouseup", (event) ->
|
56
|
+
mouseDown[buttonName(event)] = false
|
57
|
+
|
58
|
+
window.updateMouse = ->
|
59
|
+
window.mousePressed = {}
|
60
|
+
|
61
|
+
for button, value of mouseDown
|
62
|
+
mousePressed[button] = value unless prevButtonsDown[button]
|
63
|
+
|
64
|
+
prevButtonsDown = {}
|
65
|
+
for button, value of mouseDown
|
66
|
+
prevButtonsDown[button] = value
|
@@ -0,0 +1,78 @@
|
|
1
|
+
###*
|
2
|
+
The Music object provides an easy API to play
|
3
|
+
songs from your sounds project directory. By
|
4
|
+
default, the track is looped.
|
5
|
+
|
6
|
+
<code><pre>
|
7
|
+
Music.play('intro_theme')
|
8
|
+
</pre></code>
|
9
|
+
|
10
|
+
@name Music
|
11
|
+
@namespace
|
12
|
+
###
|
13
|
+
|
14
|
+
Music = (->
|
15
|
+
# TODO: Load this from local storage of user preferences
|
16
|
+
globalMusicVolume = 1
|
17
|
+
trackVolume = 1
|
18
|
+
|
19
|
+
# TODO: Add format fallbacks
|
20
|
+
track = $ "<audio />",
|
21
|
+
loop: "loop"
|
22
|
+
.appendTo('body').get(0)
|
23
|
+
|
24
|
+
updateTrackVolume = ->
|
25
|
+
track.volume = globalMusicVolume * trackVolume
|
26
|
+
|
27
|
+
###*
|
28
|
+
Set the global volume modifier for all music.
|
29
|
+
|
30
|
+
Any value set is clamped between 0 and 1. This is multiplied
|
31
|
+
into each individual track that plays.
|
32
|
+
|
33
|
+
If no argument is given return the current global music volume.
|
34
|
+
|
35
|
+
@name globalVolume
|
36
|
+
@methodOf Music
|
37
|
+
@param {Number} [newVolume] The volume to set
|
38
|
+
###
|
39
|
+
globalVolume: (newVolume) ->
|
40
|
+
if newVolume?
|
41
|
+
globalMusicVolume = newVolume.clamp(0, 1)
|
42
|
+
|
43
|
+
updateTrackVolume()
|
44
|
+
|
45
|
+
return globalMusicVolume
|
46
|
+
|
47
|
+
###*
|
48
|
+
Plays a music track.
|
49
|
+
|
50
|
+
@name play
|
51
|
+
@methodOf Music
|
52
|
+
@param {String} name The name of the track to play.
|
53
|
+
###
|
54
|
+
play: (name) ->
|
55
|
+
updateTrackVolume()
|
56
|
+
# TODO: Format fallbacks
|
57
|
+
track.src = "#{BASE_URL}/sounds/#{name}.mp3"
|
58
|
+
track.play()
|
59
|
+
|
60
|
+
###*
|
61
|
+
Get or set the current music volume. Any value passed is
|
62
|
+
clamped between 0 and 1. Use this to adjust the volume of
|
63
|
+
individual tracks or to increase or decrease volume during
|
64
|
+
gameplay.
|
65
|
+
|
66
|
+
@name volume
|
67
|
+
@methodOf Music
|
68
|
+
@param {Number} [newVolume] The volume to set to.
|
69
|
+
###
|
70
|
+
volume: (newVolume) ->
|
71
|
+
if newVolume?
|
72
|
+
trackVolume = newVolume.clamp(0, 1)
|
73
|
+
updateTrackVolume()
|
74
|
+
|
75
|
+
return this
|
76
|
+
else
|
77
|
+
return trackVolume
|
78
|
+
)()
|