pixie_dust 0.1.0 → 0.1.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.
- checksums.yaml +7 -0
- data/lib/pixie_dust/version.rb +1 -1
- data/source/camera.coffee +5 -4
- data/source/camera.transition.coffee +71 -0
- data/source/camera_target.coffee +20 -0
- data/source/engine.collision.coffee +1 -1
- data/source/engine.selector.coffee +13 -14
- metadata +18 -28
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fd7e836bf9e27f02d84578a4eee7960321b7880a
|
4
|
+
data.tar.gz: 7f29353d320cd158f9f3ee1587fda88c0c41731a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f28b2a9df7597546534d706a978cfe6e4bcb66fbfd512d5a06685dcece6ff81386a8589d1181a607908c8f63e5048148dbaebf44133013f7dfcf9a48c2cb101a
|
7
|
+
data.tar.gz: ec4da058366b69863134e3100c8bdbe058570c5812e4d9891f993da67340044123fd13fbf2363845f2b6e7b42cec1643e9c29628a1c567837bfbd2ef9b5517e1
|
data/lib/pixie_dust/version.rb
CHANGED
data/source/camera.coffee
CHANGED
@@ -18,7 +18,7 @@ Camera = (I={}) ->
|
|
18
18
|
x: App.width/2 # World Coordinates
|
19
19
|
y: App.height/2 # World Coordinates
|
20
20
|
velocity: Point.ZERO
|
21
|
-
maxSpeed:
|
21
|
+
maxSpeed: 750
|
22
22
|
t90: 2 # Time in seconds for camera to move 90% of the way to the target
|
23
23
|
|
24
24
|
currentType = "centered"
|
@@ -116,7 +116,7 @@ Camera = (I={}) ->
|
|
116
116
|
|
117
117
|
objects.invoke "trigger", "overlay", canvas
|
118
118
|
|
119
|
-
self.include "Bounded"
|
119
|
+
self.include "Ageable", "Bounded"
|
120
120
|
|
121
121
|
# The order of theses includes is important for
|
122
122
|
# the way in wich they modify the camera view transform
|
@@ -126,6 +126,8 @@ Camera = (I={}) ->
|
|
126
126
|
|
127
127
|
return self
|
128
128
|
|
129
|
+
Object.extend Camera, oldCamera
|
130
|
+
|
129
131
|
Camera.defaultModules = [
|
130
132
|
"ZSort"
|
131
133
|
"Zoom"
|
@@ -133,6 +135,5 @@ Camera.defaultModules = [
|
|
133
135
|
"Shake"
|
134
136
|
"Flash"
|
135
137
|
"Fade"
|
138
|
+
"Transition"
|
136
139
|
]
|
137
|
-
|
138
|
-
Object.extend Camera, oldCamera
|
@@ -0,0 +1,71 @@
|
|
1
|
+
Camera.Transition = (I, self) ->
|
2
|
+
Object.reverseMerge I,
|
3
|
+
transitionActive: null
|
4
|
+
transitionStart: null
|
5
|
+
transitionEnd: null
|
6
|
+
|
7
|
+
defaultOptions =
|
8
|
+
color: "white"
|
9
|
+
|
10
|
+
transitionProgress = ->
|
11
|
+
((I.age - I.transitionStart) / (I.transitionEnd - I.transitionStart)).clamp(0, 1)
|
12
|
+
|
13
|
+
transitions =
|
14
|
+
angle: ({canvas, t, screenSize, color}) ->
|
15
|
+
# Leading point at the center
|
16
|
+
p0 = Point(t * (screenSize.x * 2), screenSize.y / 2)
|
17
|
+
|
18
|
+
p1 = p0.subtract(Point(screenSize.x, screenSize.y / 2))
|
19
|
+
p2 = p1.subtract(Point(screenSize.x, 0))
|
20
|
+
p3 = p2.add(Point(0, screenSize.y))
|
21
|
+
p4 = p3.add(Point(screenSize.x, 0))
|
22
|
+
|
23
|
+
canvas.drawPoly
|
24
|
+
points: [p0, p1, p2, p3, p4]
|
25
|
+
color: color
|
26
|
+
|
27
|
+
square: ({canvas, t, screenSize, color}) ->
|
28
|
+
width = 50
|
29
|
+
height = 50
|
30
|
+
|
31
|
+
(screenSize.y / height).ceil().times (y) ->
|
32
|
+
(screenSize.x / width).ceil().times (x) ->
|
33
|
+
cellProgress = (2 * t - (x + y).mod(2)).clamp(0, 1)
|
34
|
+
|
35
|
+
canvas.drawRect
|
36
|
+
x: x * width
|
37
|
+
y: y * height
|
38
|
+
width: width
|
39
|
+
height: height * cellProgress
|
40
|
+
color: color
|
41
|
+
|
42
|
+
line: ({canvas, t, screenSize, color}) ->
|
43
|
+
height = 50
|
44
|
+
|
45
|
+
(screenSize.y / height).ceil().times (y) ->
|
46
|
+
canvas.drawRect
|
47
|
+
x: 0
|
48
|
+
y: y * height
|
49
|
+
width: screenSize.x
|
50
|
+
height: height * t
|
51
|
+
color: color
|
52
|
+
|
53
|
+
# TODO Use transition options for color
|
54
|
+
# TODO default transition options
|
55
|
+
|
56
|
+
self.on "overlay", (canvas) ->
|
57
|
+
if transitionName = I.transitionActive
|
58
|
+
transitions[transitionName] Object.extend(
|
59
|
+
canvas: canvas
|
60
|
+
screenSize: Point(I.screen.width, I.screen.height)
|
61
|
+
t: transitionProgress()
|
62
|
+
, I.transitionOptions)
|
63
|
+
|
64
|
+
transition: ({name, duration, options}={}) ->
|
65
|
+
name ?= "angle"
|
66
|
+
duration ?= 1
|
67
|
+
|
68
|
+
I.transitionActive = name
|
69
|
+
I.transitionStart = I.age
|
70
|
+
I.transitionEnd = I.age + duration
|
71
|
+
I.transitionOptions = Object.extend({}, defaultOptions, options)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
CameraTarget = (I={}) ->
|
2
|
+
Object.reverseMerge I,
|
3
|
+
target: "Player.controller=0"
|
4
|
+
lead: 1.25
|
5
|
+
|
6
|
+
self = GameObject(I).extend
|
7
|
+
draw: -> # NOP
|
8
|
+
|
9
|
+
self.on "update", (canvas) ->
|
10
|
+
if target = engine.first(I.target)
|
11
|
+
targetPosition = target.position()
|
12
|
+
targetVelocity = target.velocity()
|
13
|
+
|
14
|
+
# Camera should lead target's position by a multiple of the targets velocity
|
15
|
+
position = targetPosition.add(targetVelocity.scale(I.lead))
|
16
|
+
|
17
|
+
I.x = position.x
|
18
|
+
I.y = position.y
|
19
|
+
|
20
|
+
return self
|
@@ -19,7 +19,7 @@ Engine.Collision = (I, self) ->
|
|
19
19
|
###
|
20
20
|
collides: (bounds, sourceObject, selector=".solid") ->
|
21
21
|
self.find(selector).inject false, (collided, object) ->
|
22
|
-
collided or (object != sourceObject) and object.collides(bounds)
|
22
|
+
collided or (object != sourceObject) and object.collides(bounds) and object
|
23
23
|
|
24
24
|
###*
|
25
25
|
Detects collisions between a bounds and the game objects.
|
@@ -20,21 +20,21 @@ Engine.Selector = (I, self) ->
|
|
20
20
|
player = engine.add
|
21
21
|
x: 0
|
22
22
|
y: 0
|
23
|
-
|
23
|
+
|
24
24
|
enemy1 = engine.add
|
25
25
|
enemy: true
|
26
26
|
x: 10
|
27
27
|
y: 0
|
28
|
-
|
28
|
+
|
29
29
|
enemy2 = engine.add
|
30
30
|
enemy: true
|
31
31
|
x: 0
|
32
32
|
y: 15
|
33
|
-
|
33
|
+
|
34
34
|
player2 = engine.add
|
35
35
|
x: 0
|
36
36
|
y: 10
|
37
|
-
|
37
|
+
|
38
38
|
equals engine.closest(".enemy", player.position()), enemy1
|
39
39
|
equals engine.closest(".enemy", player2.position()), enemy2
|
40
40
|
|
@@ -55,33 +55,33 @@ Engine.Selector = (I, self) ->
|
|
55
55
|
|
56
56
|
player = engine.add
|
57
57
|
class: "Player"
|
58
|
-
|
58
|
+
|
59
59
|
enemy = engine.add
|
60
60
|
class: "Enemy"
|
61
61
|
speed: 5
|
62
62
|
x: 0
|
63
|
-
|
63
|
+
|
64
64
|
distantEnemy = engine.add
|
65
65
|
class "Enemy"
|
66
66
|
x: 500
|
67
|
-
|
67
|
+
|
68
68
|
boss = engine.add
|
69
69
|
class: "Enemy"
|
70
70
|
id: "Boss"
|
71
71
|
x: 0
|
72
|
-
|
72
|
+
|
73
73
|
# to select an object by id use "#anId"
|
74
74
|
engine.find "#Boss"
|
75
75
|
# => [boss]
|
76
|
-
|
76
|
+
|
77
77
|
# to select an object by class use "MyClass"
|
78
78
|
engine.find "Enemy"
|
79
79
|
# => [enemy, distantEnemy, boss]
|
80
|
-
|
80
|
+
|
81
81
|
# to select an object by properties use ".someProperty" or ".someProperty=someValue"
|
82
82
|
engine.find ".speed=5"
|
83
83
|
# => [enemy]
|
84
|
-
|
84
|
+
|
85
85
|
# You may mix and match selectors.
|
86
86
|
engine.find "Enemy.x=0"
|
87
87
|
# => [enemy, boss] # doesn't return distantEnemy
|
@@ -90,7 +90,7 @@ Engine.Selector = (I, self) ->
|
|
90
90
|
@methodOf Engine#
|
91
91
|
@param {String} selector
|
92
92
|
@returns {Array} An array of the objects found
|
93
|
-
###
|
93
|
+
###
|
94
94
|
each: (selector, fn) ->
|
95
95
|
self.find(selector).each (obj, index) ->
|
96
96
|
fn(obj, index)
|
@@ -153,7 +153,7 @@ Object.extend Engine.Selector,
|
|
153
153
|
typeMatch = (component[TYPE] == object.I.class) || !component[TYPE]
|
154
154
|
|
155
155
|
if attr = component[ATTR]
|
156
|
-
if (value = component[ATTR_VALUE])?
|
156
|
+
if (value = component[ATTR_VALUE])?
|
157
157
|
attrMatch = (object.I[attr] == value)
|
158
158
|
else
|
159
159
|
attrMatch = object.I[attr]
|
@@ -163,4 +163,3 @@ Object.extend Engine.Selector,
|
|
163
163
|
return true if idMatch && typeMatch && attrMatch
|
164
164
|
|
165
165
|
return false
|
166
|
-
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pixie_dust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Daniel Moore
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,68 +27,60 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: coffee-script
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: sprockets
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: cornerstone-source
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
|
-
description:
|
83
|
+
description: "\n Amazing libraries for developing games.\n Defines the main
|
95
84
|
PixieEngine GameObject and includes mixins to easily augment their behavior.\n "
|
96
85
|
email:
|
97
86
|
- yahivin@gmail.com
|
@@ -119,8 +108,10 @@ files:
|
|
119
108
|
- source/camera.flash.coffee
|
120
109
|
- source/camera.rotate.coffee
|
121
110
|
- source/camera.shake.coffee
|
111
|
+
- source/camera.transition.coffee
|
122
112
|
- source/camera.zoom.coffee
|
123
113
|
- source/camera.zsort.coffee
|
114
|
+
- source/camera_target.coffee
|
124
115
|
- source/clampable.coffee
|
125
116
|
- source/collidable.coffee
|
126
117
|
- source/collision.coffee
|
@@ -209,27 +200,26 @@ files:
|
|
209
200
|
homepage: ''
|
210
201
|
licenses:
|
211
202
|
- MIT
|
203
|
+
metadata: {}
|
212
204
|
post_install_message:
|
213
205
|
rdoc_options: []
|
214
206
|
require_paths:
|
215
207
|
- lib
|
216
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
209
|
requirements:
|
219
|
-
- -
|
210
|
+
- - '>='
|
220
211
|
- !ruby/object:Gem::Version
|
221
212
|
version: '0'
|
222
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
|
-
none: false
|
224
214
|
requirements:
|
225
|
-
- -
|
215
|
+
- - '>='
|
226
216
|
- !ruby/object:Gem::Version
|
227
217
|
version: '0'
|
228
218
|
requirements: []
|
229
219
|
rubyforge_project:
|
230
|
-
rubygems_version:
|
220
|
+
rubygems_version: 2.0.3
|
231
221
|
signing_key:
|
232
|
-
specification_version:
|
222
|
+
specification_version: 4
|
233
223
|
summary: Amazing libraries for developing games
|
234
224
|
test_files:
|
235
225
|
- test/active_bounds.coffee
|