author_engine 0.1.0 → 0.3.0

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -2
  3. data/API.md +20 -0
  4. data/Gemfile.lock +13 -2
  5. data/README.md +8 -4
  6. data/author_engine.gemspec +2 -1
  7. data/bin/author_engine +3 -1
  8. data/lib/author_engine/button.rb +1 -1
  9. data/lib/author_engine/cli.rb +21 -0
  10. data/lib/author_engine/collision_detection/collision_detection.rb +188 -0
  11. data/lib/author_engine/containers/loader.rb +8 -1
  12. data/lib/author_engine/game/common/parts/collision_detection.rb +33 -0
  13. data/lib/author_engine/game/game.rb +28 -2
  14. data/lib/author_engine/game/{parts → gosu/parts}/colors.rb +0 -0
  15. data/lib/author_engine/game/{parts → gosu/parts}/common.rb +0 -0
  16. data/lib/author_engine/game/{parts → gosu/parts}/graphics.rb +19 -1
  17. data/lib/author_engine/game/{parts → gosu/parts}/input.rb +0 -0
  18. data/lib/author_engine/game/opal/exporter.rb +157 -0
  19. data/lib/author_engine/game/opal/game_runner.rb +158 -0
  20. data/lib/author_engine/game/opal/parts/colors.rb +64 -0
  21. data/lib/author_engine/game/opal/parts/common.rb +13 -0
  22. data/lib/author_engine/game/opal/parts/graphics.rb +69 -0
  23. data/lib/author_engine/game/opal/parts/input.rb +30 -0
  24. data/lib/author_engine/image.rb +1 -0
  25. data/lib/author_engine/level_picker.rb +92 -0
  26. data/lib/author_engine/opal.rb +15 -0
  27. data/lib/author_engine/save_file.rb +49 -15
  28. data/lib/author_engine/sprite.rb +1 -2
  29. data/lib/author_engine/sprite_picker.rb +10 -3
  30. data/lib/author_engine/text.rb +2 -2
  31. data/lib/author_engine/version.rb +1 -1
  32. data/lib/author_engine/views/level_editor.rb +161 -0
  33. data/lib/author_engine/views/play_viewer.rb +1 -0
  34. data/lib/author_engine.rb +9 -4
  35. data/screenshots/code_editor.png +0 -0
  36. data/screenshots/play.png +0 -0
  37. data/screenshots/sprite_editor.png +0 -0
  38. metadata +36 -9
  39. data/test_3.authorengine +0 -519
  40. data/testing.authorengine +0 -578
@@ -1,7 +1,168 @@
1
1
  class AuthorEngine
2
2
  class LevelEditor < View
3
+
4
+ attr_reader :levels
5
+ def setup
6
+ @sprites_picker = SpritePicker.new(y: 0)
7
+ @sprites_picker.y = window.height - (@sprites_picker.height+(@sprites_picker.offset*2))
8
+
9
+ @level_picker = LevelPicker.new(y: self.y + 4)
10
+
11
+ @show_sprite_picker = true
12
+ @show_level_picker = true
13
+ @show_coordinates = true
14
+
15
+ if window.container.savefile.levels.size > 0
16
+ @levels = window.container.savefile.levels
17
+ else
18
+ @levels = [ [] ]
19
+ end
20
+
21
+ @viewport_x, @viewport_y = 0, 0
22
+
23
+ @scale = (self.height.to_f / AuthorEngine::Window::VIEW_HEIGHT)
24
+ @editor_x, @editor_y = self.width / 2 - ((AuthorEngine::Window::VIEW_HEIGHT * @scale) / 2), self.y
25
+
26
+ @sprite_size = window.sprite_size
27
+ @coordinates = AuthorEngine::Text.new(z: 18)
28
+ end
29
+
3
30
  def focus
4
31
  window.caption = "Level Editor"
5
32
  end
33
+
34
+ def draw
35
+ super
36
+ @sprites_picker.draw if @show_sprite_picker
37
+ @level_picker.draw if @show_level_picker
38
+
39
+
40
+ Gosu.draw_rect(@editor_x - 4, @editor_y, (128 * @scale) + 8, (128 * @scale), white)
41
+ Gosu.clip_to(@editor_x, @editor_y, 128 * @scale,128 * @scale) do
42
+ Gosu.draw_rect(@editor_x, @editor_y, 128 * @scale,128 * @scale, Gosu::Color::BLACK)
43
+
44
+ Gosu.translate(@viewport_x, @viewport_y) do
45
+ Gosu.scale(@scale, @scale, @editor_x, @editor_y) do
46
+ if @levels[@level_picker.active_level]
47
+ @levels[@level_picker.active_level].each do |s|
48
+ SpriteEditor.instance.sprites[s.sprite].draw(
49
+ ((s.x) * @sprite_size) + @editor_x,
50
+ ((s.y) * @sprite_size) + @editor_y,
51
+ s.z
52
+ )
53
+ end
54
+ end
55
+
56
+ SpriteEditor.instance.sprites[@sprites_picker.active_sprite].draw(
57
+ (normalize((window.mouse_x - @viewport_x) - @editor_x) * @sprite_size) + @editor_x,
58
+ (normalize((window.mouse_y - @viewport_y) - @editor_y) * @sprite_size) + @editor_y,
59
+ 0, 1,1,
60
+ Gosu::Color.rgba(255,255,255, 150)
61
+ )
62
+ end
63
+ end
64
+ end
65
+
66
+ @coordinates.draw if @show_coordinates
67
+ end
68
+
69
+ def update
70
+ super
71
+
72
+ if mouse_over?(@sprites_picker) && @show_sprite_picker
73
+ @show_sprite_picker = true
74
+ else
75
+ @show_sprite_picker = false
76
+ if window.mouse_x.between?(@sprites_picker.x, @sprites_picker.x + @sprites_picker.width) &&
77
+ window.mouse_y.between?(window.height - (@sprites_picker.offset*2+4), window.height)
78
+ @show_sprite_picker = true
79
+ end
80
+ end
81
+
82
+ if mouse_over?(@level_picker) && @show_level_picker
83
+ @show_level_picker = true
84
+ else
85
+ @show_level_picker = false
86
+ if window.mouse_x.between?(@level_picker.x, @level_picker.x + @level_picker.width) &&
87
+ window.mouse_y.between?(self.y, self.y + (@level_picker.offset*2+4))
88
+ @show_level_picker = true
89
+ end
90
+ end
91
+
92
+ if mouse_inside_view?
93
+ if (!@show_sprite_picker && !@show_level_picker)
94
+ @show_coordinates = true
95
+ @coordinates.message = "x: #{normalize((window.mouse_x - @viewport_x) - @editor_x)}, y: #{normalize((window.mouse_y - @viewport_y) - @editor_y)}"
96
+ @coordinates.x = window.mouse_x
97
+ @coordinates.y = window.mouse_y - window.square_scale*16
98
+ move_viewport
99
+ else
100
+ @show_coordinates = false
101
+ end
102
+ end
103
+
104
+ # puts "X: #{normalize(window.mouse_x - @editor_x)} y: #{normalize(window.mouse_y - @editor_y)}"
105
+ end
106
+
107
+ def place_or_remove_tile(button)
108
+ return unless mouse_inside_view?
109
+
110
+ case button
111
+ when Gosu::MsLeft
112
+ place(normalize((window.mouse_x - @viewport_x) - @editor_x), normalize((window.mouse_y - @viewport_y) - @editor_y), @level_picker.active_layer, :add)
113
+ when Gosu::MsRight
114
+ place(normalize((window.mouse_x - @viewport_x) - @editor_x), normalize((window.mouse_y - @viewport_y) - @editor_y), @level_picker.active_layer, :remove)
115
+ end
116
+ end
117
+
118
+ def move_viewport
119
+ if window.button_down?(Gosu::KbUp)
120
+ @viewport_y += 1 * @scale
121
+ elsif window.button_down?(Gosu::KbDown)
122
+ @viewport_y -= 1 * @scale
123
+ elsif window.button_down?(Gosu::KbLeft)
124
+ @viewport_x += 1 * @scale
125
+ elsif window.button_down?(Gosu::KbRight)
126
+ @viewport_x -= 1 * @scale
127
+ elsif window.button_down?(Gosu::Kb0)
128
+ @viewport_x, @viewport_y = 0, 0
129
+ end
130
+ end
131
+
132
+ def normalize(int)
133
+ i = (int.to_f / (@sprite_size * @scale)).floor
134
+
135
+ return i
136
+ end
137
+
138
+ def place(x, y, z, mode)
139
+ sprite = @levels[@level_picker.active_level].detect do |s|
140
+ s.x == x && s.y == y && s.z == z
141
+ end
142
+
143
+ case mode
144
+ when :add
145
+ new_sprite = Sprite.new(@sprites_picker.active_sprite, x, y, z)
146
+ if sprite
147
+ @levels[@level_picker.active_level][@levels[@level_picker.active_level].index(sprite)] = new_sprite
148
+ else
149
+ @levels[@level_picker.active_level] << new_sprite
150
+ end
151
+ when :remove
152
+ @levels[@level_picker.active_level].delete(sprite) if sprite
153
+ else
154
+ raise
155
+ end
156
+ end
157
+
158
+ def button_up(id)
159
+ super
160
+ @sprites_picker.button_up(id) if @show_sprite_picker
161
+ @level_picker.button_up(id) if @show_level_picker
162
+
163
+ if (!@show_sprite_picker && !@show_level_picker)
164
+ place_or_remove_tile(id)
165
+ end
166
+ end
6
167
  end
7
168
  end
@@ -110,6 +110,7 @@ class AuthorEngine
110
110
  # super
111
111
  if @running
112
112
  catch_error do
113
+ @game.collision_detection.clear
113
114
  update_game
114
115
  end
115
116
  else
data/lib/author_engine.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require "gosu"
2
2
  require "coderay"
3
3
 
4
- require_relative "author_engine/game/parts/common"
5
- require_relative "author_engine/game/parts/graphics"
6
- require_relative "author_engine/game/parts/colors"
7
- require_relative "author_engine/game/parts/input"
4
+ require_relative "author_engine/game/common/parts/collision_detection"
5
+
6
+ require_relative "author_engine/game/gosu/parts/common"
7
+ require_relative "author_engine/game/gosu/parts/graphics"
8
+ require_relative "author_engine/game/gosu/parts/colors"
9
+ require_relative "author_engine/game/gosu/parts/input"
8
10
 
9
11
  require_relative "author_engine/window"
10
12
  require_relative "author_engine/support"
@@ -14,10 +16,13 @@ require_relative "author_engine/button"
14
16
  require_relative "author_engine/text"
15
17
  require_relative "author_engine/sprite"
16
18
  require_relative "author_engine/sprite_picker"
19
+ require_relative "author_engine/level_picker"
17
20
  require_relative "author_engine/palette"
18
21
  require_relative "author_engine/image"
19
22
  require_relative "author_engine/save_file"
20
23
 
24
+
25
+ require_relative "author_engine/collision_detection/collision_detection"
21
26
  require_relative "author_engine/game/game"
22
27
 
23
28
  require_relative "author_engine/code_editor/cursor"
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: author_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyberarm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-30 00:00:00.000000000 Z
11
+ date: 2018-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.1.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: opal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.11.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.11.4
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -115,17 +129,28 @@ files:
115
129
  - bin/author_engine
116
130
  - lib/author_engine.rb
117
131
  - lib/author_engine/button.rb
132
+ - lib/author_engine/cli.rb
118
133
  - lib/author_engine/code_editor/cursor.rb
119
134
  - lib/author_engine/code_editor/highlighting.rb
135
+ - lib/author_engine/collision_detection/collision_detection.rb
120
136
  - lib/author_engine/container.rb
121
137
  - lib/author_engine/containers/editor.rb
122
138
  - lib/author_engine/containers/loader.rb
139
+ - lib/author_engine/game/common/parts/collision_detection.rb
123
140
  - lib/author_engine/game/game.rb
124
- - lib/author_engine/game/parts/colors.rb
125
- - lib/author_engine/game/parts/common.rb
126
- - lib/author_engine/game/parts/graphics.rb
127
- - lib/author_engine/game/parts/input.rb
141
+ - lib/author_engine/game/gosu/parts/colors.rb
142
+ - lib/author_engine/game/gosu/parts/common.rb
143
+ - lib/author_engine/game/gosu/parts/graphics.rb
144
+ - lib/author_engine/game/gosu/parts/input.rb
145
+ - lib/author_engine/game/opal/exporter.rb
146
+ - lib/author_engine/game/opal/game_runner.rb
147
+ - lib/author_engine/game/opal/parts/colors.rb
148
+ - lib/author_engine/game/opal/parts/common.rb
149
+ - lib/author_engine/game/opal/parts/graphics.rb
150
+ - lib/author_engine/game/opal/parts/input.rb
128
151
  - lib/author_engine/image.rb
152
+ - lib/author_engine/level_picker.rb
153
+ - lib/author_engine/opal.rb
129
154
  - lib/author_engine/palette.rb
130
155
  - lib/author_engine/save_file.rb
131
156
  - lib/author_engine/sprite.rb
@@ -139,8 +164,9 @@ files:
139
164
  - lib/author_engine/views/play_viewer.rb
140
165
  - lib/author_engine/views/sprite_editor.rb
141
166
  - lib/author_engine/window.rb
142
- - test_3.authorengine
143
- - testing.authorengine
167
+ - screenshots/code_editor.png
168
+ - screenshots/play.png
169
+ - screenshots/sprite_editor.png
144
170
  homepage: https://github.com/cyberarm/author_engineV2
145
171
  licenses:
146
172
  - MIT
@@ -150,6 +176,7 @@ post_install_message:
150
176
  rdoc_options: []
151
177
  require_paths:
152
178
  - lib
179
+ - assets
153
180
  required_ruby_version: !ruby/object:Gem::Requirement
154
181
  requirements:
155
182
  - - ">="
@@ -162,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
189
  version: '0'
163
190
  requirements: []
164
191
  rubyforge_project:
165
- rubygems_version: 2.7.7
192
+ rubygems_version: 2.7.8
166
193
  signing_key:
167
194
  specification_version: 4
168
195
  summary: A virtual console that you code in Ruby.