author_engine 0.1.0 → 0.3.0

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