dedalus 0.2.13 → 0.2.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dedalus/elements/image.rb +6 -4
- data/lib/dedalus/elements/image_grid.rb +33 -35
- data/lib/dedalus/elements/sprite.rb +12 -4
- data/lib/dedalus/elements/sprite_field.rb +16 -9
- data/lib/dedalus/elements.rb +0 -1
- data/lib/dedalus/image_repository.rb +3 -3
- data/lib/dedalus/version.rb +1 -1
- data/lib/dedalus/view_traversal.rb +10 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb3ab91813d799396d435838e747c35b4a9e9d78
|
4
|
+
data.tar.gz: 2b89f9dd88e5a751bd16a3becf59dec71d10dfdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 008fea49b63d69e38faea15140312426dccc95e47b89ff650050f36232031c81baff799a181a9aacec77b52afa791c6d73d8584bb954af41ed02b1fdd546a9a4
|
7
|
+
data.tar.gz: 149540db900560b7ee20b80553a529c20f821dd9567fbfa39264676411f37180efa744ad1553475b2ab5e291223d11a441bae4a0bedec1bb9e172c7e85ebcf05
|
@@ -4,16 +4,18 @@ module Dedalus
|
|
4
4
|
attr_accessor :path, :padding, :z_order, :invert_x, :invert_y, :overlay_color
|
5
5
|
|
6
6
|
def render
|
7
|
-
|
7
|
+
x0,y0 = *position
|
8
|
+
ox,oy = *offset
|
9
|
+
|
8
10
|
x_scale = invert_x ? -scale : scale
|
9
11
|
y_scale = invert_y ? -scale : scale
|
10
12
|
|
11
|
-
|
13
|
+
x,y = x0 + padding + ox, y0 + padding + oy
|
12
14
|
|
13
15
|
if overlay_color
|
14
|
-
asset.draw(x
|
16
|
+
asset.draw(x,y, z_order, x_scale, y_scale, overlay_gosu_color)
|
15
17
|
else
|
16
|
-
asset.draw(x
|
18
|
+
asset.draw(x,y, z_order, x_scale, y_scale)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
@@ -1,38 +1,13 @@
|
|
1
1
|
module Dedalus
|
2
2
|
module Elements
|
3
|
-
# TODO image grid should learn to use window#record http://www.rubydoc.info/github/jlnr/gosu/Gosu%2FWindow%3Arecord
|
4
3
|
class ImageGrid < Dedalus::Molecule
|
5
4
|
attr_accessor :grid, :tiles_path, :tile_width, :tile_height
|
6
|
-
attr_accessor :
|
7
|
-
|
8
|
-
def name
|
9
|
-
'an-image-grid' # we record these, so... we need a unique identifier that will persist across invocations -- in general we'll only be using one, but if they're layered you may need to differentiate...
|
10
|
-
end
|
11
|
-
|
12
|
-
def record?
|
13
|
-
!grid.empty?
|
14
|
-
end
|
15
|
-
|
16
|
-
def width
|
17
|
-
if grid && grid.first
|
18
|
-
grid.first.length * tile_width
|
19
|
-
else
|
20
|
-
0
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def height
|
25
|
-
if grid
|
26
|
-
grid.length * tile_height
|
27
|
-
else
|
28
|
-
0
|
29
|
-
end
|
30
|
-
end
|
5
|
+
attr_accessor :scale
|
31
6
|
|
32
7
|
def show
|
33
8
|
if grid
|
34
|
-
grid.map do |
|
35
|
-
|
9
|
+
grid.map do |row_elements|
|
10
|
+
row_elements.map do |grid_value|
|
36
11
|
if grid_value
|
37
12
|
sprite_for(grid_value)
|
38
13
|
else
|
@@ -45,20 +20,42 @@ module Dedalus
|
|
45
20
|
end
|
46
21
|
end
|
47
22
|
|
23
|
+
def name
|
24
|
+
@name ||= 'an-image-grid' # a uniq id for recording
|
25
|
+
end
|
26
|
+
|
27
|
+
def record?
|
28
|
+
!grid.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def width
|
32
|
+
if grid && grid.first
|
33
|
+
grid.first.length * tile_height * scale
|
34
|
+
else
|
35
|
+
0
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
48
39
|
def height
|
49
40
|
if grid
|
50
|
-
grid.length * tile_height
|
41
|
+
grid.length * tile_height * scale
|
51
42
|
else
|
52
43
|
0
|
53
44
|
end
|
54
45
|
end
|
55
46
|
|
56
47
|
def sprite_for(frame)
|
57
|
-
Sprite.new(
|
48
|
+
Sprite.new(
|
49
|
+
frame: frame,
|
50
|
+
asset_width: tile_width,
|
51
|
+
asset_height: tile_height,
|
52
|
+
path: tiles_path,
|
53
|
+
scale: scale
|
54
|
+
)
|
58
55
|
end
|
59
56
|
|
60
57
|
def no_image
|
61
|
-
Void.new(height: tile_height, width: tile_width)
|
58
|
+
Void.new(height: tile_height * scale, width: tile_width * scale)
|
62
59
|
end
|
63
60
|
|
64
61
|
def self.description
|
@@ -70,11 +67,12 @@ module Dedalus
|
|
70
67
|
tiles_path: "media/images/tiles.png",
|
71
68
|
tile_width: 64,
|
72
69
|
tile_height: 64,
|
70
|
+
scale: 0.2,
|
73
71
|
grid: [
|
74
|
-
[ nil, 0, 2, 0 ],
|
75
|
-
[ 0, nil, 1, 0 ],
|
76
|
-
[ 0, 0, nil, 0 ],
|
77
|
-
[ 0, 1, 2, nil ],
|
72
|
+
[ nil, 0, 2, 0, 1 ],
|
73
|
+
[ 0, nil, 1, 0, 1 ],
|
74
|
+
[ 0, 0, nil, 0, 1 ],
|
75
|
+
[ 0, 1, 2, nil, 1 ],
|
78
76
|
]
|
79
77
|
}
|
80
78
|
end
|
@@ -1,18 +1,26 @@
|
|
1
1
|
module Dedalus
|
2
2
|
module Elements
|
3
3
|
class Sprite < Image
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :asset_width, :asset_height, :frame
|
5
5
|
|
6
6
|
def asset
|
7
|
-
@asset ||= Dedalus::ImageRepository.lookup_tiles(path,
|
7
|
+
@asset ||= Dedalus::ImageRepository.lookup_tiles(path, asset_width, asset_height)[frame]
|
8
|
+
end
|
9
|
+
|
10
|
+
def width
|
11
|
+
2*padding + (asset_width * scale)
|
12
|
+
end
|
13
|
+
|
14
|
+
def height
|
15
|
+
2*padding + (asset_height * scale)
|
8
16
|
end
|
9
17
|
|
10
18
|
def self.example_data
|
11
19
|
{
|
12
20
|
path: "media/images/tiles.png",
|
13
21
|
frame: 3,
|
14
|
-
|
15
|
-
|
22
|
+
asset_width: 64,
|
23
|
+
asset_height: 64,
|
16
24
|
invert_x: true,
|
17
25
|
scale: 2.5
|
18
26
|
}
|
@@ -2,8 +2,9 @@ module Dedalus
|
|
2
2
|
module Elements
|
3
3
|
class SpriteField < Dedalus::Organism
|
4
4
|
attr_accessor :grid, :sprite_map, :scale, :camera_location
|
5
|
+
attr_accessor :tile_width, :tile_height, :tiles_path
|
5
6
|
# TODO tiles path and width/height as attrs
|
6
|
-
|
7
|
+
|
7
8
|
def show
|
8
9
|
layers
|
9
10
|
end
|
@@ -21,7 +22,6 @@ module Dedalus
|
|
21
22
|
layer_stack = Dedalus::LayerStack.new
|
22
23
|
layer_stack.push(Dedalus::Layer.new(background_image))
|
23
24
|
layer_stack.push(Dedalus::Layer.new(image_grid))
|
24
|
-
|
25
25
|
layer_stack.push(canvas_layer)
|
26
26
|
layer_stack
|
27
27
|
end
|
@@ -42,18 +42,20 @@ module Dedalus
|
|
42
42
|
|
43
43
|
def image_grid
|
44
44
|
ImageGrid.new(
|
45
|
-
tiles_path: 'media/images/tiles.png',
|
45
|
+
tiles_path: tiles_path, #'media/images/tiles.png',
|
46
46
|
grid: grid,
|
47
|
-
tile_width:
|
48
|
-
tile_height:
|
49
|
-
|
47
|
+
tile_width: tile_width,
|
48
|
+
tile_height: tile_height,
|
49
|
+
scale: scale,
|
50
|
+
offset: camera_offset,
|
51
|
+
name: 'sprite-field-tiles'
|
50
52
|
)
|
51
53
|
end
|
52
54
|
|
53
55
|
def to_screen_coordinates(location:)
|
54
56
|
x,y = *location
|
55
57
|
cx,cy = *camera_offset
|
56
|
-
[(x *
|
58
|
+
[(x * tile_width + cx), (y * tile_height + cy)]
|
57
59
|
end
|
58
60
|
|
59
61
|
def background_image
|
@@ -70,9 +72,14 @@ module Dedalus
|
|
70
72
|
[0,0,0,0,0],
|
71
73
|
[1,1,3,1,1],
|
72
74
|
[1,1,1,1,1]],
|
73
|
-
scale: 0
|
75
|
+
scale: 2.0,
|
74
76
|
camera_location: [1.2,2.4],
|
75
|
-
|
77
|
+
tiles_path: "media/images/tiles.png",
|
78
|
+
tile_width: 64,
|
79
|
+
tile_height: 64,
|
80
|
+
sprite_map: {
|
81
|
+
[1.2,2.4] => [ Sprite.new(Sprite.example_data) ]
|
82
|
+
}
|
76
83
|
}
|
77
84
|
end
|
78
85
|
end
|
data/lib/dedalus/elements.rb
CHANGED
@@ -8,14 +8,14 @@ module Dedalus
|
|
8
8
|
|
9
9
|
def self.lookup_tiles(path, width, height)
|
10
10
|
@tiles ||= {}
|
11
|
-
@tiles[path] ||= Gosu::Image::load_tiles(path, width, height)
|
11
|
+
@tiles[path] ||= Gosu::Image::load_tiles(path, width.to_i, height.to_i)
|
12
12
|
@tiles[path]
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.lookup_recording(id,width,height,window,&blk)
|
16
|
-
p [ :lookup_recording, id: id ]
|
16
|
+
# p [ :lookup_recording, id: id ]
|
17
17
|
@recordings ||= {}
|
18
|
-
@recordings[id] ||= window.record(width,height,&blk)
|
18
|
+
@recordings[id] ||= window.record(width.to_i,height.to_i,&blk)
|
19
19
|
@recordings[id]
|
20
20
|
end
|
21
21
|
end
|
data/lib/dedalus/version.rb
CHANGED
@@ -20,14 +20,20 @@ module Dedalus
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def walk!(structure, origin:, dimensions:, freeform: false, render: false)
|
23
|
-
# p [ :walk, render: render ]
|
24
23
|
width, height = *dimensions
|
24
|
+
|
25
25
|
height = structure.height if !structure.is_a?(Array) && structure.height
|
26
|
-
width
|
26
|
+
width = structure.width if !structure.is_a?(Array) && structure.width
|
27
|
+
|
27
28
|
x0, y0 = *origin
|
28
29
|
|
29
30
|
if structure.is_a?(Dedalus::Atom)
|
30
31
|
@atom_callback.call(structure, origin: origin, dimensions: dimensions, freeform: freeform) if @atom_callback
|
32
|
+
|
33
|
+
# implicitly array is rows, nested arrays are columns, doubly-nested arrays are rows, etc
|
34
|
+
elsif structure.is_a?(Array)
|
35
|
+
walk_rows!(structure, origin: origin, dimensions: dimensions, render: render)
|
36
|
+
|
31
37
|
elsif structure.is_a?(Dedalus::Element)
|
32
38
|
offset = structure.offset || [0,0]
|
33
39
|
ox,oy = *offset
|
@@ -54,10 +60,8 @@ module Dedalus
|
|
54
60
|
if structure.is_a?(LayerStack)
|
55
61
|
layers = structure.layers
|
56
62
|
layers.each do |layer|
|
57
|
-
# TODO cleanup a bit?
|
58
63
|
if layer.freeform?
|
59
64
|
if layer.show.is_a?(Array)
|
60
|
-
# need to run through each element individually?
|
61
65
|
layer.show.each do |layer_element|
|
62
66
|
walk!(layer_element, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render)
|
63
67
|
end
|
@@ -69,24 +73,18 @@ module Dedalus
|
|
69
73
|
end
|
70
74
|
end
|
71
75
|
else
|
72
|
-
# p [ :checking_for_recording, record: structure.record?, render: render ]
|
73
76
|
if structure.record? && render
|
74
|
-
# p [ :structure_indicates_recording! ]
|
75
77
|
recorded_image = ImageRepository.lookup_recording(structure.name, structure.width, structure.height, structure.window) do
|
76
|
-
p [ :recording! ]
|
77
78
|
walk!(structure.show, origin: [0,0], dimensions: pad_dims, freeform: freeform, render: render)
|
78
79
|
end
|
79
80
|
|
80
81
|
ox,oy = *pad_origin
|
81
|
-
|
82
|
-
recorded_image.draw(ox,oy,10) #ox,oy,10)
|
82
|
+
recorded_image.draw(ox,oy,10)
|
83
83
|
else
|
84
84
|
walk!(structure.show, origin: pad_origin, dimensions: pad_dims, freeform: freeform, render: render)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
-
elsif structure.is_a?(Array) # we have a set of rows
|
89
|
-
walk_rows!(structure, origin: origin, dimensions: dimensions, render: render)
|
90
88
|
end
|
91
89
|
end
|
92
90
|
|
@@ -167,7 +165,7 @@ module Dedalus
|
|
167
165
|
end
|
168
166
|
end
|
169
167
|
|
170
|
-
if distance_cursor > distance - current_element_distance
|
168
|
+
if distance_cursor > distance - current_element_distance
|
171
169
|
return elements.slice(index,elements.size)
|
172
170
|
end
|
173
171
|
|
@@ -175,7 +173,6 @@ module Dedalus
|
|
175
173
|
distance_cursor += current_element_distance
|
176
174
|
end
|
177
175
|
|
178
|
-
# no overflowing elements...
|
179
176
|
[]
|
180
177
|
end
|
181
178
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dedalus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Weissman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: joyce
|