dedalus 0.2.17 → 0.2.18

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a564e0fa9aed68458bbb167c6053a36c50b6e3a
4
- data.tar.gz: cd0d299e22bf39581965ab93fb6b19a055969483
3
+ metadata.gz: 7aad84d5fe9bd686820573a33ecd092f9ba1c7ed
4
+ data.tar.gz: c352ebd5e3bcbcd9c03a43c3e258f63d9dbcafcd
5
5
  SHA512:
6
- metadata.gz: a3b94e4f1c6477bd2c4e4cefc6111339bc5d1c356fa505720a9ce2a912d6f26dea3b7bb60fcf805dd968e52977d9bffc01e513b6d6b8f117285fa5b09dda303d
7
- data.tar.gz: f6a38d03481e8055f54e0378302d47c2dfbcd71ddd59bed4653ab70e5d6764cfb936d4bf615aa3346e7ecdaa0ffe22589c8f4160990d9083c722402d068ccf2c
6
+ metadata.gz: ecd0ed76f0fe13bfa51d882764f024887ef098d326b61d3e671e73b9d2fa5d67bf84ca950d7d61ecc24dfe58c445c2dc6ba1a8d6ae716fde49636b122b47f5ce
7
+ data.tar.gz: fb1bd4de715afe17664f605619db2548ce63877f97cb66a364e951baedcc8fb1fd1559b0c50dbdaa19e34b3b35cde6fbc235f588be2d88cfc831f765e61b0f73
@@ -5,22 +5,27 @@ module Dedalus
5
5
 
6
6
  def traverse(structure, origin: [0,0], dimensions:, render: false, &blk)
7
7
  traversal = ViewTraversal.new(&blk)
8
- traversal.walk!(structure, origin: origin, dimensions: dimensions, render: render)
8
+ structure = traversal.walk!(structure, origin: origin, dimensions: dimensions, render: render)
9
9
  structure
10
10
  end
11
11
 
12
12
  def send_molecule(structure, window_dims, mouse_position:, message:)
13
13
  mouse_coord = coord(*mouse_position)
14
14
 
15
- traverse(structure, origin: [0,0], dimensions: window_dims) do
16
- on_molecule do |molecule, origin:, dimensions:|
15
+ updated_structure = traverse(structure, origin: [0,0], dimensions: window_dims) do
16
+ on_molecule do |molecule, origin:, dimensions:, z_index:|
17
17
  element_bounding_box = Geometer::Rectangle.new(coord(*origin), dim(*dimensions))
18
18
  mouse_overlap = element_bounding_box.contains?(mouse_coord) rescue false # could get bad coords...
19
19
  if mouse_overlap
20
+ molecule.position = origin
20
21
  molecule.send(message)
21
22
  end
23
+
24
+ molecule
22
25
  end
23
26
  end
27
+
28
+ updated_structure
24
29
  end
25
30
 
26
31
  def hover_molecule(structure, window_dims, mouse_position:)
@@ -33,7 +38,7 @@ module Dedalus
33
38
 
34
39
  def render!(structure, dims)
35
40
  traverse(structure, origin: [0,0], dimensions: dims, render: true) do
36
- on_atom do |atom, origin:, dimensions:, freeform:|
41
+ on_atom do |atom, origin:, dimensions:, freeform:, z_index:|
37
42
  if atom.background_color
38
43
  atom.draw_bounding_box(
39
44
  color: atom.background_color,
@@ -50,10 +55,12 @@ module Dedalus
50
55
  atom.position = origin
51
56
  end
52
57
 
58
+ atom.z_order = z_index
59
+
53
60
  atom.render
54
61
  end
55
62
 
56
- on_element do |element, origin:, dimensions:|
63
+ on_element do |element, origin:, dimensions:, z_index:|
57
64
  if element.background_color
58
65
  element.draw_bounding_box(
59
66
  color: element.background_color,
@@ -11,14 +11,16 @@ module Dedalus
11
11
 
12
12
  def click
13
13
  p [ :app_view_click ]
14
- composer.click_molecule(app_screen, [window.width, window.height], mouse_position: mouse_position)
14
+ composer.click_molecule(
15
+ app_screen,
16
+ [window.width, window.height],
17
+ mouse_position: mouse_position
18
+ )
15
19
  end
16
20
 
17
21
  def compose(screen)
18
- screen = composer.hover_molecule(screen, dimensions, mouse_position: mouse_position)
19
- composer.render!(screen, dimensions)
20
- # cursor.position = mouse_position
21
- # cursor.render
22
+ composer.hover_molecule(screen, dimensions, mouse_position: mouse_position)
23
+ composer.render!(screen.shown, dimensions)
22
24
  end
23
25
 
24
26
  def dimensions
@@ -31,9 +31,9 @@ module Dedalus
31
31
  [ ox, oy ]
32
32
  end
33
33
 
34
- def z_order
35
- @z_order ||= ZOrder::Foreground
36
- end
34
+ # def z_order
35
+ # @z_order ||= ZOrder::Foreground
36
+ # end
37
37
 
38
38
  def width
39
39
  2*padding + (asset.width * scale)
@@ -1,7 +1,7 @@
1
1
  module Dedalus
2
2
  module Elements
3
3
  class ImageGrid < Dedalus::Molecule
4
- attr_accessor :grid, :tiles_path, :tile_width, :tile_height
4
+ attr_accessor :grid, :tiles_path, :tile_width, :tile_height, :tile_class
5
5
  attr_accessor :scale
6
6
 
7
7
  def show
@@ -49,7 +49,7 @@ module Dedalus
49
49
  end
50
50
 
51
51
  def sprite_for(frame)
52
- Sprite.new(
52
+ tile_class.constantize.new(
53
53
  frame: frame,
54
54
  asset_width: tile_width,
55
55
  asset_height: tile_height,
@@ -71,6 +71,7 @@ module Dedalus
71
71
  tiles_path: "media/images/tiles.png",
72
72
  tile_width: 64,
73
73
  tile_height: 64,
74
+ tile_class: "Dedalus::Elements::MapTile", #Elements::Sprite",
74
75
  scale: 0.2,
75
76
  grid: [
76
77
  [ nil, 0, 2, 0, 1 ],
@@ -0,0 +1,31 @@
1
+ module Dedalus
2
+ module Elements
3
+ class MapTile < Dedalus::Molecule
4
+ attr_accessor :frame, :asset_width, :asset_height, :path, :scale
5
+
6
+ attr_accessor :highlight
7
+
8
+ def show
9
+ tile_sprite
10
+ end
11
+
12
+ def tile_sprite
13
+ Sprite.new(
14
+ frame: frame,
15
+ asset_width: asset_width,
16
+ asset_height: asset_height,
17
+ path: path,
18
+ scale: scale
19
+ )
20
+ end
21
+
22
+ def self.description
23
+ 'example of a custom tile class for image grid/sprite field'
24
+ end
25
+
26
+ def self.example_data
27
+ Sprite.example_data
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,7 +2,7 @@ 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
+ attr_accessor :tile_width, :tile_height, :tiles_path, :tile_class
6
6
 
7
7
  def show
8
8
  layers
@@ -45,6 +45,7 @@ module Dedalus
45
45
  grid: grid,
46
46
  tile_width: tile_width,
47
47
  tile_height: tile_height,
48
+ tile_class: tile_class,
48
49
  scale: scale,
49
50
  offset: camera_offset,
50
51
  name: 'sprite-field-tiles'
@@ -77,6 +78,7 @@ module Dedalus
77
78
  tiles_path: "media/images/tiles.png",
78
79
  tile_width: 64,
79
80
  tile_height: 64,
81
+ tile_class: "Dedalus::Elements::MapTile",
80
82
  sprite_map: {
81
83
  [1.2,2.4] => [ Sprite.new(Sprite.example_data) ]
82
84
  }
@@ -5,7 +5,7 @@ module Dedalus
5
5
 
6
6
  def render(*)
7
7
  x,y = *position
8
- font.draw(text, x + padding, y + padding, ZOrder::Text, self.scale, self.scale)
8
+ font.draw(text, x + padding, y + padding, z_order, self.scale, self.scale)
9
9
 
10
10
  # draw_bounding_box(origin: [x,y], dimensions: dimensions)
11
11
  end
@@ -7,15 +7,6 @@ module Dedalus
7
7
  @active_view ||= nil
8
8
  end
9
9
 
10
- class FontRepository
11
- def self.get_font(font_name='Helvetica',size: 20)
12
- @fonts ||= {}
13
- @fonts[font_name] ||= {}
14
- @fonts[font_name][size] ||= Gosu::Font.new(size, name: font_name)
15
- @fonts[font_name][size]
16
- end
17
- end
18
-
19
10
  class Element
20
11
  attr_accessor :position, :offset
21
12
 
@@ -28,10 +19,17 @@ module Dedalus
28
19
  attr_accessor :padding, :margin
29
20
  attr_accessor :color, :background_color
30
21
 
22
+ attr_accessor :z_order #index
23
+
31
24
  def initialize(attrs={})
32
25
  attrs.each { |(k,v)| instance_variable_set(:"@#{k}",v) } unless attrs.nil?
33
26
  end
34
27
 
28
+ attr_accessor :shown
29
+ def shown
30
+ @shown ||= show
31
+ end
32
+
35
33
  def record?
36
34
  false
37
35
  end
@@ -46,7 +44,7 @@ module Dedalus
46
44
  window.draw_quad(x, y, c,
47
45
  x, y+h, c,
48
46
  x+w, y, c,
49
- x+w, y+h, c,ZOrder::Background)
47
+ x+w, y+h, c, ZOrder::Background)
50
48
  end
51
49
 
52
50
  def view
@@ -103,6 +101,8 @@ module Dedalus
103
101
  # maybe should also pull out rows and columns?
104
102
  # could cleanup traversal impl, and will be clearer ultimately
105
103
  class Layer < Element
104
+ attr_accessor :elements
105
+
106
106
  def initialize(elements, freeform: false)
107
107
  @elements = elements
108
108
  @freeform = freeform
@@ -118,7 +118,7 @@ module Dedalus
118
118
  end
119
119
 
120
120
  class LayerStack < Element
121
- attr_reader :layers
121
+ attr_accessor :layers
122
122
 
123
123
  def initialize(layers: [])
124
124
  @layers = []
@@ -0,0 +1,10 @@
1
+ module Dedalus
2
+ class FontRepository
3
+ def self.get_font(font_name='Helvetica',size: 20)
4
+ @fonts ||= {}
5
+ @fonts[font_name] ||= {}
6
+ @fonts[font_name][size] ||= Gosu::Font.new(size, name: font_name)
7
+ @fonts[font_name][size]
8
+ end
9
+ end
10
+ end
@@ -18,5 +18,12 @@ module Dedalus
18
18
  @recordings[id] ||= window.record(width.to_i,height.to_i,&blk)
19
19
  @recordings[id]
20
20
  end
21
+
22
+ # TODO could handle overflows/alignment in text (should use for code...?)
23
+ # def self.lookup_text(text, line_height)
24
+ # @text_images ||= {}
25
+ # @text_images[text] ||= Gosu::Image.from_text(text, line_height)
26
+ # @text_images[text]
27
+ # end
21
28
  end
22
29
  end
@@ -4,11 +4,15 @@ module Dedalus
4
4
  attr_accessor :icon, :name, :description, :scale, :highlight, :section_color
5
5
 
6
6
  def show
7
- Container.new([[icon_element, [ title_element, description_element ]]], padding: 16)
7
+ Container.new(
8
+ [[icon_element, [ title_element, description_element ]]],
9
+ padding: 16,
10
+ scale: scale
11
+ )
8
12
  end
9
13
 
10
14
  def hover
11
- @scale = 0.2
15
+ self.scale = 1.05
12
16
  end
13
17
 
14
18
  def background_color
@@ -21,7 +25,7 @@ module Dedalus
21
25
  end
22
26
 
23
27
  def scale
24
- @scale ||= 0.0
28
+ @scale ||= 1.0
25
29
  end
26
30
 
27
31
  def height
@@ -33,7 +37,7 @@ module Dedalus
33
37
  end
34
38
 
35
39
  def title_element
36
- Elements::Heading.new(text: name)
40
+ Elements::Heading.new(text: name, scale: scale)
37
41
  end
38
42
 
39
43
  def description_element
@@ -10,7 +10,7 @@ module Dedalus
10
10
  element_name: name,
11
11
  color: color,
12
12
  kind: kind,
13
- scale: 0.5
13
+ scale: 0.35
14
14
  )
15
15
  end
16
16
  end
@@ -1,10 +1,17 @@
1
1
  module Dedalus
2
2
  module PatternLibrary
3
3
  class ApplicationSidebar < Dedalus::Organism
4
- attr_accessor :library_section_tab_molecules
4
+ attr_accessor :library_section_tabs, :current_entry #_molecules
5
5
 
6
6
  def show
7
- self.library_section_tab_molecules
7
+ library_section_tab_rows
8
+ end
9
+
10
+ def library_section_tab_rows
11
+ @tab_rows ||= self.library_section_tabs.map do |tab_data| #_molecules
12
+ tab_data[:highlight] = tab_data[:name] == current_entry
13
+ LibrarySectionTab.new(tab_data)
14
+ end
8
15
  end
9
16
 
10
17
  def padding
@@ -17,10 +24,10 @@ module Dedalus
17
24
 
18
25
  def self.example_data
19
26
  {
20
- library_section_tab_molecules: [
21
- LibrarySectionTab.new(LibrarySectionTab.example_data),
22
- LibrarySectionTab.new(LibrarySectionTab.example_data),
23
- LibrarySectionTab.new(LibrarySectionTab.example_data)
27
+ library_section_tabs: [
28
+ LibrarySectionTab.example_data,
29
+ LibrarySectionTab.example_data,
30
+ LibrarySectionTab.example_data
24
31
  ]
25
32
  }
26
33
  end
@@ -78,21 +78,22 @@ module Dedalus
78
78
  end
79
79
 
80
80
  def sidebar
81
- ApplicationSidebar.new(
82
- library_section_tab_molecules: section_tabs,
81
+ @sidebar ||= ApplicationSidebar.new(
82
+ library_section_tabs: library_section_tabs, #_molecules: section_tabs,
83
83
  width_percent: 0.2,
84
+ current_entry: current_entry_name,
84
85
  background_color: Palette.decode_color('darkgray')
85
86
  )
86
87
  end
87
88
 
88
- def section_tabs
89
- tab_list = library_section_tabs.map do |attrs|
90
- highlight = attrs[:name] == current_entry_name
91
- LibrarySectionTab.new(attrs.merge(highlight: highlight))
92
- end
93
- # p [ tab_list: tab_list ]
94
- tab_list
95
- end
89
+ # def section_tabs
90
+ # tab_list = library_section_tabs.map do |attrs|
91
+ # highlight = attrs[:name] == current_entry_name
92
+ # LibrarySectionTab.new(attrs.merge(highlight: highlight))
93
+ # end
94
+ # # p [ tab_list: tab_list ]
95
+ # tab_list
96
+ # end
96
97
  end
97
98
  end
98
99
  end
@@ -1,4 +1,4 @@
1
1
  module Dedalus
2
2
  # dedalus version
3
- VERSION = "0.2.17"
3
+ VERSION = "0.2.18"
4
4
  end
@@ -19,7 +19,7 @@ module Dedalus
19
19
  @element_callback = blk
20
20
  end
21
21
 
22
- def walk!(structure, origin:, dimensions:, freeform: false, render: false)
22
+ def walk!(structure, origin:, dimensions:, freeform: false, render: false, z_index: ZOrder::Background)
23
23
  width, height = *dimensions
24
24
 
25
25
  height = structure.height if !structure.is_a?(Array) && structure.height
@@ -28,7 +28,7 @@ module Dedalus
28
28
  x0, y0 = *origin
29
29
 
30
30
  if structure.is_a?(Dedalus::Atom)
31
- @atom_callback.call(structure, origin: origin, dimensions: dimensions, freeform: freeform) if @atom_callback
31
+ @atom_callback.call(structure, origin: origin, dimensions: dimensions, freeform: freeform, z_index: z_index) if @atom_callback
32
32
 
33
33
  # implicitly array is rows, nested arrays are columns, doubly-nested arrays are rows, etc
34
34
  elsif structure.is_a?(Array)
@@ -46,11 +46,11 @@ module Dedalus
46
46
  margin_dims = [ width - margin*2, height - margin*2 ]
47
47
 
48
48
  if structure.is_a?(Dedalus::Molecule) && @molecule_callback
49
- @molecule_callback.call(structure, origin: margin_origin, dimensions: margin_dims)
49
+ @molecule_callback.call(structure, origin: margin_origin, dimensions: margin_dims, z_index: z_index)
50
50
  end
51
51
 
52
52
  if @element_callback
53
- @element_callback.call(structure, origin: margin_origin, dimensions: margin_dims)
53
+ @element_callback.call(structure, origin: margin_origin, dimensions: margin_dims, z_index: z_index)
54
54
  end
55
55
 
56
56
  pad = structure.padding || 0.0
@@ -58,33 +58,31 @@ module Dedalus
58
58
  pad_dims = [width - pad*2 - margin*2, height - pad*2 - margin*2 ]
59
59
 
60
60
  if structure.is_a?(LayerStack)
61
- layers = structure.layers
62
- layers.each do |layer|
61
+ structure.layers.each do |layer|
63
62
  if layer.freeform?
64
- if layer.show.is_a?(Array)
65
- layer.show.each do |layer_element|
66
- walk!(layer_element, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render)
63
+ if layer.shown.is_a?(Array)
64
+ layer.elements.each_with_index do |layer_element, z_offset|
65
+ walk!(layer_element, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render, z_index: z_index+z_offset)
67
66
  end
68
67
  else
69
- walk!(layer, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render)
68
+ walk!(layer.elements, origin: pad_origin, dimensions: pad_dims, freeform: true, render: render, z_index: z_index)
70
69
  end
71
70
  else
72
- walk!(layer, origin: pad_origin, dimensions: pad_dims, freeform: false, render: render)
71
+ walk!(layer.elements, origin: pad_origin, dimensions: pad_dims, freeform: false, render: render, z_index: z_index)
73
72
  end
74
73
  end
75
74
  else
76
75
  if structure.record? && render
77
76
  recorded_image = ImageRepository.lookup_recording(structure.name, structure.width, structure.height, structure.window) do
78
- walk!(structure.show, origin: [0,0], dimensions: pad_dims, freeform: freeform, render: render)
77
+ walk!(structure.shown, origin: [0,0], dimensions: pad_dims, freeform: freeform, render: render)
79
78
  end
80
79
 
81
80
  ox,oy = *pad_origin
82
- recorded_image.draw(ox,oy,10)
81
+ recorded_image.draw(ox,oy,z_index)
83
82
  else
84
- walk!(structure.show, origin: pad_origin, dimensions: pad_dims, freeform: freeform, render: render)
83
+ walk!(structure.shown, origin: pad_origin, dimensions: pad_dims, freeform: freeform, render: render, z_index: z_index)
85
84
  end
86
85
  end
87
-
88
86
  end
89
87
  end
90
88
 
data/lib/dedalus.rb CHANGED
@@ -9,6 +9,7 @@ require 'dedalus/application_view'
9
9
 
10
10
  require 'dedalus/palette'
11
11
  require 'dedalus/image_repository'
12
+ require 'dedalus/font_repository'
12
13
 
13
14
  require 'dedalus/elements'
14
15
  require 'dedalus/elements/void'
@@ -20,5 +21,6 @@ require 'dedalus/elements/icon'
20
21
  require 'dedalus/elements/sprite'
21
22
  require 'dedalus/elements/image_grid'
22
23
  require 'dedalus/elements/sprite_field'
24
+ require 'dedalus/elements/map_tile'
23
25
 
24
26
  require 'dedalus/pattern_library'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dedalus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.17
4
+ version: 0.2.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Weissman
@@ -170,11 +170,13 @@ files:
170
170
  - lib/dedalus/elements/icon.rb
171
171
  - lib/dedalus/elements/image.rb
172
172
  - lib/dedalus/elements/image_grid.rb
173
+ - lib/dedalus/elements/map_tile.rb
173
174
  - lib/dedalus/elements/paragraph.rb
174
175
  - lib/dedalus/elements/sprite.rb
175
176
  - lib/dedalus/elements/sprite_field.rb
176
177
  - lib/dedalus/elements/text.rb
177
178
  - lib/dedalus/elements/void.rb
179
+ - lib/dedalus/font_repository.rb
178
180
  - lib/dedalus/image_repository.rb
179
181
  - lib/dedalus/palette.rb
180
182
  - lib/dedalus/pattern_library.rb