cyberarm_engine 0.12.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -0
  3. data/Gemfile +1 -1
  4. data/README.md +33 -3
  5. data/Rakefile +1 -1
  6. data/assets/textures/default.png +0 -0
  7. data/cyberarm_engine.gemspec +11 -8
  8. data/lib/cyberarm_engine.rb +24 -4
  9. data/lib/cyberarm_engine/animator.rb +56 -0
  10. data/lib/cyberarm_engine/background.rb +19 -15
  11. data/lib/cyberarm_engine/background_nine_slice.rb +125 -0
  12. data/lib/cyberarm_engine/bounding_box.rb +18 -18
  13. data/lib/cyberarm_engine/cache.rb +4 -0
  14. data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
  15. data/lib/cyberarm_engine/common.rb +16 -16
  16. data/lib/cyberarm_engine/config_file.rb +46 -0
  17. data/lib/cyberarm_engine/game_object.rb +63 -72
  18. data/lib/cyberarm_engine/game_state.rb +7 -4
  19. data/lib/cyberarm_engine/model.rb +207 -0
  20. data/lib/cyberarm_engine/model/material.rb +21 -0
  21. data/lib/cyberarm_engine/model/model_object.rb +131 -0
  22. data/lib/cyberarm_engine/model/parser.rb +74 -0
  23. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -0
  24. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -0
  25. data/lib/cyberarm_engine/model_cache.rb +31 -0
  26. data/lib/cyberarm_engine/opengl.rb +28 -0
  27. data/lib/cyberarm_engine/opengl/light.rb +50 -0
  28. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -0
  29. data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -0
  30. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -0
  31. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -0
  32. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +289 -0
  33. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -0
  34. data/lib/cyberarm_engine/opengl/shader.rb +406 -0
  35. data/lib/cyberarm_engine/opengl/texture.rb +69 -0
  36. data/lib/cyberarm_engine/ray.rb +5 -5
  37. data/lib/cyberarm_engine/stats.rb +21 -0
  38. data/lib/cyberarm_engine/text.rb +45 -31
  39. data/lib/cyberarm_engine/timer.rb +1 -1
  40. data/lib/cyberarm_engine/transform.rb +221 -9
  41. data/lib/cyberarm_engine/ui/border_canvas.rb +4 -3
  42. data/lib/cyberarm_engine/ui/dsl.rb +68 -50
  43. data/lib/cyberarm_engine/ui/element.rb +57 -18
  44. data/lib/cyberarm_engine/ui/elements/button.rb +86 -16
  45. data/lib/cyberarm_engine/ui/elements/check_box.rb +24 -32
  46. data/lib/cyberarm_engine/ui/elements/container.rb +88 -24
  47. data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -0
  48. data/lib/cyberarm_engine/ui/elements/edit_line.rb +180 -27
  49. data/lib/cyberarm_engine/ui/elements/flow.rb +1 -3
  50. data/lib/cyberarm_engine/ui/elements/image.rb +12 -9
  51. data/lib/cyberarm_engine/ui/elements/label.rb +96 -15
  52. data/lib/cyberarm_engine/ui/elements/list_box.rb +68 -0
  53. data/lib/cyberarm_engine/ui/elements/progress.rb +6 -5
  54. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -0
  55. data/lib/cyberarm_engine/ui/elements/slider.rb +104 -0
  56. data/lib/cyberarm_engine/ui/elements/stack.rb +1 -3
  57. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +40 -31
  58. data/lib/cyberarm_engine/ui/event.rb +8 -7
  59. data/lib/cyberarm_engine/ui/gui_state.rb +89 -6
  60. data/lib/cyberarm_engine/ui/style.rb +10 -9
  61. data/lib/cyberarm_engine/ui/theme.rb +39 -21
  62. data/lib/cyberarm_engine/vector.rb +132 -38
  63. data/lib/cyberarm_engine/version.rb +2 -2
  64. data/lib/cyberarm_engine/{engine.rb → window.rb} +30 -19
  65. metadata +87 -16
  66. data/lib/cyberarm_engine/shader.rb +0 -205
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a654f69d082340608b25fd743b95470de31dc21e1fa2a6316937551b805aa4ec
4
- data.tar.gz: b8d0adc99e32f01656df9e954eceada2fe2592c04c4b53500b17281343c3bc0d
3
+ metadata.gz: 4c56a2a5000efebf2274c880fed0b156ca41ed94216d7f3e7b5c15c24cc1cf2e
4
+ data.tar.gz: 7bbdf2cbf1812f8860411d53dcf99c8fcb90d286c130328cdf1d1570cb75df30
5
5
  SHA512:
6
- metadata.gz: d8092e64eecea46ddc30d14088f3aa9b66de47c03884094e60b6529eca16d88e26ebee2d9a96321de6ad7fab5c4b0b7a453c1e82668806c8c82babbf5a64def5
7
- data.tar.gz: b56daafd58276d545093a63e5c4bac0f846737ec856fed97ad0ec9d75afd75165dfb27f63f2253df660af6c81028216166b20b3354d2e8ce0d47a1b3c2983bdb
6
+ metadata.gz: 626116a0cc8d2bdde83e7823ed604e67d573379277ac15be83c2f991c34e0f345c6ba286586125584eabb2e5bcf777a206b337903690ccb0cde09cb3a3504f67
7
+ data.tar.gz: 6f61c206112bfaf0885307ccb2cd9ae8aab9abc2ae70d167319866a735b8547500544a56f5c600c72c14003c4b9060db37a96bd958eab9ca88a346df3b04c004
@@ -0,0 +1,8 @@
1
+ Style/StringLiterals:
2
+ EnforcedStyle: double_quotes
3
+
4
+ Metrics/MethodLength:
5
+ Max: 40
6
+
7
+ Style/EmptyMethod:
8
+ EnforcedStyle: expanded
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in cyberarm_engine.gemspec
6
6
  gemspec
data/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # CyberarmEngine
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cyberarm_engine`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Yet Another Game Engine On Top Of Gosu
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ## Features
6
+ * [Shoes-like](http://shoesrb.com) GUI support
7
+ * OpenGL Shader support (requires [opengl-bindings](https://github.com/vaiorabbit/ruby-opengl) gem)
8
+ * Includes classes for handling Vectors, Rays, Bounding Boxes, and Transforms
9
+ * GameState system
10
+ * Monolithic GameObjects
6
11
 
7
12
  ## Installation
8
13
 
@@ -22,7 +27,32 @@ Or install it yourself as:
22
27
 
23
28
  ## Usage
24
29
 
25
- TODO: Write usage instructions here
30
+ ```ruby
31
+ require "cyberarm_engine"
32
+
33
+ class Hello < CyberarmEngine::GuiState
34
+ def setup
35
+ stack do
36
+ label "Hello World!"
37
+
38
+ button "close" do
39
+ window.close
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ class Window < CyberarmEngine::Window
46
+ def initialize
47
+ super
48
+ self.show_cursor = true
49
+
50
+ push_state(Hello)
51
+ end
52
+ end
53
+
54
+ Window.new.show
55
+ ```
26
56
 
27
57
  ## Development
28
58
 
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList["test/**/*_test.rb"]
8
8
  end
9
9
 
10
- task :default => :test
10
+ task default: :test
@@ -1,5 +1,4 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "cyberarm_engine/version"
5
4
 
@@ -9,8 +8,8 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["Cyberarm"]
10
9
  spec.email = ["matthewlikesrobots@gmail.com"]
11
10
 
12
- spec.summary = %q{Make games quickly and easily with gosu}
13
- spec.description = %q{Yet another game making framework around gosu}
11
+ spec.summary = "Make games quickly and easily with gosu"
12
+ spec.description = "Yet another game making framework around gosu"
14
13
  spec.homepage = "https://github.com/cyberarm/cyberarm_engine"
15
14
  spec.license = "MIT"
16
15
 
@@ -21,16 +20,20 @@ Gem::Specification.new do |spec|
21
20
  "public gem pushes."
22
21
  end
23
22
 
24
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
25
24
  f.match(%r{^(test|spec|features)/})
26
25
  end
27
26
  spec.bindir = "exe"
28
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
- spec.require_paths = ["lib"]
28
+ spec.require_paths = %w[lib assets]
30
29
 
31
- spec.add_dependency "gosu", "~> 0.14.0"
30
+ spec.add_dependency "clipboard", "~> 1.3.5"
31
+ spec.add_dependency "excon", "~> 0.78.0"
32
+ spec.add_dependency "gosu", "~> 1.0.0"
33
+ spec.add_dependency "gosu_more_drawables", "~> 0.3"
34
+ # spec.add_dependency "ffi", :platforms => [:mswin, :mingw] # Required by Clipboard on Windows
32
35
 
33
36
  spec.add_development_dependency "bundler", "~> 1.16"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
37
  spec.add_development_dependency "minitest", "~> 5.0"
38
+ spec.add_development_dependency "rake", "~> 13.0"
36
39
  end
@@ -1,26 +1,36 @@
1
+ CYBERARM_ENGINE_ROOT_PATH = File.expand_path("..", __dir__)
2
+
1
3
  begin
2
4
  require File.expand_path("../../ffi-gosu/lib/gosu", File.dirname(__FILE__))
3
5
  rescue LoadError => e
4
6
  pp e
5
7
  require "gosu"
6
8
  end
9
+ require "json"
10
+ require "excon"
11
+ require "gosu_more_drawables"
12
+ require "clipboard"
7
13
 
8
14
  require_relative "cyberarm_engine/version"
15
+ require_relative "cyberarm_engine/stats"
9
16
 
10
17
  require_relative "cyberarm_engine/common"
11
18
 
12
19
  require_relative "cyberarm_engine/game_object"
13
- require_relative "cyberarm_engine/engine"
20
+ require_relative "cyberarm_engine/window"
14
21
 
15
22
  require_relative "cyberarm_engine/bounding_box"
16
23
  require_relative "cyberarm_engine/vector"
17
24
  require_relative "cyberarm_engine/transform"
18
25
  require_relative "cyberarm_engine/ray"
19
- require_relative "cyberarm_engine/shader" if defined?(OpenGL)
20
26
  require_relative "cyberarm_engine/background"
27
+ require_relative "cyberarm_engine/animator"
21
28
 
22
29
  require_relative "cyberarm_engine/text"
23
30
  require_relative "cyberarm_engine/timer"
31
+ require_relative "cyberarm_engine/config_file"
32
+
33
+ require_relative "cyberarm_engine/ui/dsl"
24
34
 
25
35
  require_relative "cyberarm_engine/ui/theme"
26
36
  require_relative "cyberarm_engine/ui/event"
@@ -30,15 +40,25 @@ require_relative "cyberarm_engine/ui/element"
30
40
  require_relative "cyberarm_engine/ui/elements/label"
31
41
  require_relative "cyberarm_engine/ui/elements/button"
32
42
  require_relative "cyberarm_engine/ui/elements/toggle_button"
43
+ require_relative "cyberarm_engine/ui/elements/list_box"
33
44
  require_relative "cyberarm_engine/ui/elements/edit_line"
45
+ require_relative "cyberarm_engine/ui/elements/edit_box"
34
46
  require_relative "cyberarm_engine/ui/elements/image"
35
47
  require_relative "cyberarm_engine/ui/elements/container"
36
48
  require_relative "cyberarm_engine/ui/elements/flow"
37
49
  require_relative "cyberarm_engine/ui/elements/stack"
38
50
  require_relative "cyberarm_engine/ui/elements/check_box"
51
+ require_relative "cyberarm_engine/ui/elements/radio"
39
52
  require_relative "cyberarm_engine/ui/elements/progress"
40
-
41
- require_relative "cyberarm_engine/ui/dsl"
53
+ require_relative "cyberarm_engine/ui/elements/slider"
42
54
 
43
55
  require_relative "cyberarm_engine/game_state"
44
56
  require_relative "cyberarm_engine/ui/gui_state"
57
+
58
+ require_relative "cyberarm_engine/model"
59
+ require_relative "cyberarm_engine/model_cache"
60
+ require_relative "cyberarm_engine/model/material"
61
+ require_relative "cyberarm_engine/model/model_object"
62
+ require_relative "cyberarm_engine/model/parser"
63
+ require_relative "cyberarm_engine/model/parsers/wavefront_parser"
64
+ require_relative "cyberarm_engine/model/parsers/collada_parser" if defined?(Nokogiri)
@@ -0,0 +1,56 @@
1
+ module CyberarmEngine
2
+ class Animator
3
+ DEFAULT_TWEEN = :linear
4
+ def initialize(start_time:, duration:, from:, to:, &block)
5
+ @start_time = start_time
6
+ @duration = duration
7
+ @from = from.dup
8
+ @to = to.dup
9
+ @block = block
10
+ end
11
+
12
+ def update
13
+ @block.call(self, @from, @to) if @block
14
+ end
15
+
16
+ def progress
17
+ (@start_time.to_f + (Gosu.milliseconds - @start_time)) / (@start_time + @duration.to_f)
18
+ end
19
+
20
+ def complete?
21
+ progress >= 1.0
22
+ end
23
+
24
+ def transition(from, to, tween = DEFAULT_TWEEN)
25
+ from + (to - from) * send("tween_#{tween}", progress)
26
+ end
27
+
28
+ def color_transition(from, to, _tween = DEFAULT_TWEEN)
29
+ r = transition(from.red, to.red)
30
+ g = transition(from.green, to.green)
31
+ b = transition(from.blue, to.blue)
32
+ a = transition(from.alpha, to.alpha)
33
+
34
+ Gosu::Color.rgba(r, g, b, a)
35
+ end
36
+
37
+ def color_hsv_transition(from, to, tween = DEFAULT_TWEEN)
38
+ hue = transition(from.hue, to.hue, tween)
39
+ saturation = transition(from.saturation, to.saturation, tween)
40
+ value = transition(from.value, to.value, tween)
41
+ alpha = transition(from.alpha, to.alpha, tween)
42
+
43
+ Gosu::Color.from_ahsv(alpha, hue, saturation, value)
44
+ end
45
+
46
+ # NOTE: Use this for future reference? https://github.com/danro/easing-js/blob/master/easing.js
47
+
48
+ def tween_linear(t)
49
+ t
50
+ end
51
+
52
+ def tween_sine(t)
53
+ Math.sin(t) * t
54
+ end
55
+ end
56
+ end
@@ -2,9 +2,13 @@ module CyberarmEngine
2
2
  class Background
3
3
  attr_accessor :x, :y, :z, :width, :height, :angle, :debug
4
4
  attr_reader :background
5
+
5
6
  def initialize(x: 0, y: 0, z: 0, width: 0, height: 0, background: Gosu::Color::BLACK, angle: 0, debug: false)
6
- @x,@y,@z = x,y,z
7
- @width,@height = width,height
7
+ @x = x
8
+ @y = y
9
+ @z = z
10
+ @width = width
11
+ @height = height
8
12
  @debug = debug
9
13
 
10
14
  @paint = Paint.new(background)
@@ -31,8 +35,8 @@ module CyberarmEngine
31
35
  end
32
36
 
33
37
  def update
34
- origin_x = (@x + (@width/2))
35
- origin_y = (@y + (@height/2))
38
+ origin_x = (@x + (@width / 2))
39
+ origin_y = (@y + (@height / 2))
36
40
 
37
41
  points = [
38
42
  @top_left = Vector.new(@x, @y),
@@ -47,8 +51,8 @@ module CyberarmEngine
47
51
 
48
52
  # 90 is up here, while gosu uses 0 for up.
49
53
  radians = (@angle + 90).gosu_to_radians
50
- vector.x = (@x + (@width/2)) + ((temp_x * Math.cos(radians)) - (temp_y * Math.sin(radians)))
51
- vector.y = (@y + (@height/2)) + ((temp_x * Math.sin(radians)) + (temp_y * Math.cos(radians)))
54
+ vector.x = (@x + (@width / 2)) + ((temp_x * Math.cos(radians)) - (temp_y * Math.sin(radians)))
55
+ vector.y = (@y + (@height / 2)) + ((temp_x * Math.sin(radians)) + (temp_y * Math.cos(radians)))
52
56
  end
53
57
 
54
58
  # [
@@ -67,11 +71,11 @@ module CyberarmEngine
67
71
  a = la.x - lb.x
68
72
  b = la.y - lb.y
69
73
  c = Gosu.distance(la.x, la.y, lb.x, lb.y)
70
- p a,b,c
71
- d = (a * point.x + b * point.y + c).abs / (Math.sqrt(a * a + b * b))
74
+ p a, b, c
75
+ d = (a * point.x + b * point.y + c).abs / Math.sqrt(a * a + b * b)
72
76
  puts "Distance: #{d}"
73
77
  exit!
74
- return d
78
+ d
75
79
  end
76
80
 
77
81
  def debug_outline
@@ -117,6 +121,7 @@ module CyberarmEngine
117
121
 
118
122
  class Paint
119
123
  attr_accessor :top_left, :top_right, :bottom_left, :bottom_right
124
+
120
125
  def initialize(background)
121
126
  set(background)
122
127
  end
@@ -124,7 +129,6 @@ module CyberarmEngine
124
129
  def set(background)
125
130
  @background = background
126
131
 
127
-
128
132
  if background.is_a?(Numeric)
129
133
  @top_left = background
130
134
  @top_right = background
@@ -167,9 +171,9 @@ end
167
171
 
168
172
  # Add <=> method to support Range based gradients
169
173
  module Gosu
170
- class Color
171
- def <=>(other)
172
- self
173
- end
174
- end
174
+ class Color
175
+ def <=>(_other)
176
+ self
177
+ end
178
+ end
175
179
  end
@@ -0,0 +1,125 @@
1
+ module CyberarmEngine
2
+ class BackgroundNineSlice
3
+ include CyberarmEngine::Common
4
+ attr_accessor :x, :y, :z, :width, :height
5
+
6
+ def initialize(image_path:, x: 0, y: 0, z: 0, width: 64, height: 64, mode: :tiled, left: 4, top: 4, right: 56, bottom: 56)
7
+ @image = get_image(image_path)
8
+
9
+ @x = x
10
+ @y = y
11
+ @z = z
12
+
13
+ @width = width
14
+ @height = height
15
+
16
+ @mode = mode
17
+
18
+ @left = left
19
+ @top = top
20
+ @right = right
21
+ @bottom = bottom
22
+
23
+ nine_slice
24
+ end
25
+
26
+ def nine_slice
27
+ @segment_top_left = Gosu.render(@left, @top) { @image.draw(0, 0, 0) }
28
+ @segment_top_right = Gosu.render(@image.width - @right, @top) { @image.draw(-@right, 0, 0) }
29
+
30
+ @segment_left = Gosu.render(@left, @bottom - @top) { @image.draw(0, -@top, 0) }
31
+ @segment_right = Gosu.render(@image.width - @right, @bottom - @top) { @image.draw(-@right, -@top, 0) }
32
+
33
+ @segment_bottom_left = Gosu.render(@left, @image.height - @bottom) { @image.draw(0, -@bottom, 0) }
34
+ @segment_bottom_right = Gosu.render(@image.width - @right, @image.height - @bottom) { @image.draw(-@right, -@bottom, 0) }
35
+
36
+ @segment_top = Gosu.render(@right - @left, @top) { @image.draw(-@left, 0, 0) }
37
+ @segment_bottom = Gosu.render(@right - @left, @image.height - @bottom) { @image.draw(-@left, -@bottom, 0) }
38
+
39
+ @segment_middle = Gosu.render(@right - @left, @bottom - @top) { @image.draw(-@left, -@top, 0) }
40
+ end
41
+
42
+ def cx
43
+ @x + @left
44
+ end
45
+
46
+ def cy
47
+ @y + @top
48
+ end
49
+
50
+ def cwidth
51
+ @cx - @width
52
+ end
53
+
54
+ def cheight
55
+ @cy - @height
56
+ end
57
+
58
+ def width_scale
59
+ width_scale = (@width - (@left + (@image.width - @right))).to_f / (@right - @left)
60
+ end
61
+
62
+ def height_scale
63
+ height_scale = (@height - (@top + (@image.height - @bottom))).to_f / (@bottom - @top)
64
+ end
65
+
66
+ def draw
67
+ @mode == :tiled ? draw_tiled : draw_stretched
68
+ end
69
+
70
+ def draw_stretched
71
+ @segment_top_left.draw(@x, @y, @z)
72
+ @segment_top.draw(@x + @segment_top_left.width, @y, @z, width_scale) # SCALE X
73
+ @segment_top_right.draw((@x + @width) - @segment_top_right.width, @y, @z)
74
+
75
+ @segment_right.draw((@x + @width) - @segment_right.width, @y + @top, @z, 1, height_scale) # SCALE Y
76
+ @segment_bottom_right.draw((@x + @width) - @segment_bottom_right.width, @y + @height - @segment_bottom_right.height, @z)
77
+ @segment_bottom.draw(@x + @segment_bottom_left.width, (@y + @height) - @segment_bottom.height, @z, width_scale) # SCALE X
78
+ @segment_bottom_left.draw(@x, (@y + @height) - @segment_bottom_left.height, @z)
79
+ @segment_left.draw(@x, @y + @top, @z, 1, height_scale) # SCALE Y
80
+ @segment_middle.draw(@x + @segment_top_left.width, @y + @segment_top.height, @z, width_scale, height_scale) # SCALE X and SCALE Y
81
+ end
82
+
83
+ def draw_tiled
84
+ @segment_top_left.draw(@x, @y, @z)
85
+
86
+ Gosu.clip_to(@x + @segment_top_left.width, @y, @segment_top.width * width_scale, @segment_top.height) do
87
+ width_scale.ceil.times do |i|
88
+ @segment_top.draw(@x + @segment_top_left.width + (@segment_top.width * i), @y, @z) # SCALE X
89
+ end
90
+ end
91
+
92
+ @segment_top_right.draw((@x + @width) - @segment_top_right.width, @y, @z)
93
+
94
+ Gosu.clip_to(@x + @width - @segment_top_right.width, @y + @top, @segment_right.width, @segment_right.height * height_scale) do
95
+ height_scale.ceil.times do |i|
96
+ @segment_right.draw((@x + @width) - @segment_right.width, @y + @top + (@segment_right.height * i), @z) # SCALE Y
97
+ end
98
+ end
99
+
100
+ @segment_bottom_right.draw((@x + @width) - @segment_bottom_right.width, @y + @height - @segment_bottom_right.height, @z)
101
+
102
+ Gosu.clip_to(@x + @segment_top_left.width, @y + @height - @segment_bottom.height, @segment_top.width * width_scale, @segment_bottom.height) do
103
+ width_scale.ceil.times do |i|
104
+ @segment_bottom.draw(@x + @segment_bottom_left.width + (@segment_bottom.width * i), (@y + @height) - @segment_bottom.height, @z) # SCALE X
105
+ end
106
+ end
107
+
108
+ @segment_bottom_left.draw(@x, (@y + @height) - @segment_bottom_left.height, @z)
109
+
110
+ Gosu.clip_to(@x, @y + @top, @segment_left.width, @segment_left.height * height_scale) do
111
+ height_scale.ceil.times do |i|
112
+ @segment_left.draw(@x, @y + @top + (@segment_left.height * i), @z) # SCALE Y
113
+ end
114
+ end
115
+
116
+ Gosu.clip_to(@x + @segment_top_left.width, @y + @segment_top.height, @width - (@segment_left.width + @segment_right.width), @height - (@segment_top.height + @segment_bottom.height)) do
117
+ height_scale.ceil.times do |y|
118
+ width_scale.ceil.times do |x|
119
+ @segment_middle.draw(@x + @segment_top_left.width + (@segment_middle.width * x), @y + @segment_top.height + (@segment_middle.height * y), @z) # SCALE X and SCALE Y
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end