dedalus 0.2.17 → 0.2.18

Sign up to get free protection for your applications and to get access to all the features.
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