dedalus 0.2.13 → 0.2.15
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 +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
|