summaryrefslogtreecommitdiffhomepage
path: root/dragon/draw.rb
diff options
context:
space:
mode:
author_Tradam <[email protected]>2021-12-16 19:22:26 -0500
committerGitHub <[email protected]>2021-12-16 19:22:26 -0500
commit5954b9beb4d4a3b4f248d72d1851195f030558a8 (patch)
treefecd8aa840a25afdb502915b0fdb4d03b7ed339a /dragon/draw.rb
parent2f845281f133849256b57bb08fd3e9ae57600784 (diff)
parenteaa29e72939f5edf61735ccbb73c36ee89369f65 (diff)
downloaddragonruby-game-toolkit-contrib-master.tar.gz
dragonruby-game-toolkit-contrib-master.zip
Merge branch 'DragonRuby:master' into masterHEADmaster
Diffstat (limited to 'dragon/draw.rb')
-rw-r--r--dragon/draw.rb242
1 files changed, 57 insertions, 185 deletions
diff --git a/dragon/draw.rb b/dragon/draw.rb
index 128624d..2963315 100644
--- a/dragon/draw.rb
+++ b/dragon/draw.rb
@@ -1,4 +1,4 @@
-# Contributors outside of DragonRuby who also hold Copyright: Nick Sandberg
+# coding: utf-8
# Copyright 2019 DragonRuby LLC
# MIT License
# draw.rb has been released under MIT (*only this file*).
@@ -6,197 +6,45 @@
module GTK
class Runtime
module Draw
-
- def execute_draw_order pass
- # Don't change this draw order unless you understand
- # the implications.
- render_solids pass
- render_static_solids pass
- render_sprites pass
- render_static_sprites pass
- render_primitives pass
- render_static_primitives pass
- render_labels pass
- render_static_labels pass
- render_lines pass
- render_static_lines pass
- render_borders pass
- render_static_borders pass
- end
-
def primitives pass
if $top_level.respond_to? :primitives_override
return $top_level.tick_render @args, pass
end
- execute_draw_order pass
-
- if !$gtk.production
- # pass.debug.each { |r| draw_primitive r }
- idx = 0
- length = pass.debug.length
- while idx < length
- draw_primitive (pass.debug.at idx)
- idx += 1
- end
-
- # pass.static_debug.each { |r| draw_primitive r }
- idx = 0
- length = pass.static_debug.length
- while idx < length
- draw_primitive (pass.static_debug.at idx)
- idx += 1
- end
- end
+ fn.each_send pass.solids, self, :draw_solid
+ fn.each_send pass.static_solids, self, :draw_solid
+ fn.each_send pass.sprites, self, :draw_sprite
+ fn.each_send pass.static_sprites, self, :draw_sprite
+ fn.each_send pass.primitives, self, :draw_primitive
+ fn.each_send pass.static_primitives, self, :draw_primitive
+ fn.each_send pass.labels, self, :draw_label
+ fn.each_send pass.static_labels, self, :draw_label
+ fn.each_send pass.lines, self, :draw_line
+ fn.each_send pass.static_lines, self, :draw_line
+ fn.each_send pass.borders, self, :draw_border
+ fn.each_send pass.static_borders, self, :draw_border
- # pass.reserved.each { |r| draw_primitive r }
- idx = 0
- length = pass.reserved.length
- while idx < length
- draw_primitive (pass.reserved.at idx)
- idx += 1
+ if !self.production
+ fn.each_send pass.debug, self, :draw_primitive
+ fn.each_send pass.static_debug, self, :draw_primitive
end
- # pass.static_reserved.each { |r| draw_primitive r }
- idx = 0
- length = pass.static_reserved.length
- while idx < length
- draw_primitive (pass.static_reserved.at idx)
- idx += 1
- end
+ fn.each_send pass.reserved, self, :draw_primitive
+ fn.each_send pass.static_reserved, self, :draw_primitive
rescue Exception => e
pause!
pretty_print_exception_and_export! e
end
-
- def render_solids pass
- # pass.solids.each { |s| draw_solid s }
- # while loops are faster than each with block
- idx = 0
- length = pass.solids.length
- while idx < pass.solids.length
- draw_solid (pass.solids.at idx) # accessing an array using .value instead of [] is faster
- idx += 1
- end
- end
-
- def render_static_solids pass
- # pass.static_solids.each { |s| draw_solid s }
- idx = 0
- length = pass.static_solids.length
- while idx < length
- draw_solid (pass.static_solids.at idx)
- idx += 1
- end
- end
-
- def render_sprites pass
- # pass.sprites.each { |s| draw_sprite s }
- idx = 0
- length = pass.sprites.length
- while idx < length
- draw_sprite (pass.sprites.at idx)
- idx += 1
- end
- end
-
- def render_static_sprites pass
- # pass.static_sprites.each { |s| draw_sprite s }
- idx = 0
- length = pass.static_sprites.length
- while idx < length
- draw_sprite (pass.static_sprites.at idx)
- idx += 1
- end
- end
-
- def render_primitives pass
- # pass.primitives.each { |p| draw_primitive p }
- idx = 0
- length = pass.primitives.length
- while idx < length
- draw_primitive (pass.primitives.at idx)
- idx += 1
- end
- end
-
- def render_static_primitives pass
- # pass.static_primitives.each { |p| draw_primitive p }
- idx = 0
- length = pass.static_primitives.length
- while idx < length
- draw_primitive (pass.static_primitives.at idx)
- idx += 1
- end
- end
-
- def render_labels pass
- # pass.labels.each { |l| draw_label l }
- idx = 0
- length = pass.labels.length
- while idx < length
- draw_label (pass.labels.at idx)
- idx += 1
- end
- end
-
- def render_static_labels pass
- # pass.static_labels.each { |l| draw_label l }
- idx = 0
- length = pass.static_labels.length
- while idx < length
- draw_label (pass.static_labels.at idx)
- idx += 1
- end
- end
-
- def render_lines pass
- # pass.lines.each { |l| draw_line l }
- idx = 0
- length = pass.lines.length
- while idx < length
- draw_line (pass.lines.at idx)
- idx += 1
- end
- end
-
- def render_static_lines pass
- # pass.static_lines.each { |l| draw_line l }
- idx = 0
- length = pass.static_lines.length
- while idx < pass.static_lines.length
- draw_line (pass.static_lines.at idx)
- idx += 1
- end
- end
-
- def render_borders pass
- # pass.borders.each { |b| draw_border b }
- idx = 0
- length = pass.borders.length
- while idx < length
- draw_border (pass.borders.at idx)
- idx += 1
- end
- end
-
- def render_static_borders pass
- # pass.static_borders.each { |b| draw_border b }
- idx = 0
- length = pass.static_borders.length
- while idx < length
- draw_border (pass.static_borders.at idx)
- idx += 1
- end
- end
-
def draw_solid s
return unless s
if s.respond_to? :draw_override
s.draw_override @ffi_draw
else
- @ffi_draw.draw_solid s.x, s.y, s.w, s.h, s.r, s.g, s.b, s.a
+ s = s.as_hash if s.is_a? OpenEntity
+ @ffi_draw.draw_solid_2 s.x, s.y, s.w, s.h,
+ s.r, s.g, s.b, s.a,
+ (s.blendmode_enum || 1)
end
rescue Exception => e
raise_conversion_for_rendering_failed s, e, :solid
@@ -207,14 +55,16 @@ module GTK
if s.respond_to? :draw_override
s.draw_override @ffi_draw
else
- @ffi_draw.draw_sprite_3 s.x, s.y, s.w, s.h,
- s.path.s_or_default,
+ s = s.as_hash if s.is_a? OpenEntity
+ @ffi_draw.draw_sprite_4 s.x, s.y, s.w, s.h,
+ (s.path || '').to_s,
s.angle,
s.a, s.r, s.g, s.b,
s.tile_x, s.tile_y, s.tile_w, s.tile_h,
!!s.flip_horizontally, !!s.flip_vertically,
s.angle_anchor_x, s.angle_anchor_y,
- s.source_x, s.source_y, s.source_w, s.source_h
+ s.source_x, s.source_y, s.source_w, s.source_h,
+ (s.blendmode_enum || 1)
end
rescue Exception => e
raise_conversion_for_rendering_failed s, e, :sprite
@@ -225,7 +75,8 @@ module GTK
if s.respond_to? :draw_override
s.draw_override @ffi_draw
else
- @ffi_draw.draw_screenshot s.path.s_or_default,
+ s = s.as_hash if s.is_a? OpenEntity
+ @ffi_draw.draw_screenshot (s.path || '').to_s,
s.x, s.y, s.w, s.h,
s.angle,
s.a, s.r, s.g, s.b,
@@ -243,10 +94,14 @@ module GTK
if l.respond_to? :draw_override
l.draw_override @ffi_draw
else
- @ffi_draw.draw_label l.x, l.y, l.text.s_or_default,
- l.size_enum, l.alignment_enum,
- l.r, l.g, l.b, l.a,
- l.font.s_or_default(nil)
+ l = l.as_hash if l.is_a? OpenEntity
+ @ffi_draw.draw_label_3 l.x, l.y,
+ (l.text || '').to_s,
+ l.size_enum, l.alignment_enum,
+ l.r, l.g, l.b, l.a,
+ l.font,
+ (l.vertical_alignment_enum || 2),
+ (l.blendmode_enum || 1)
end
rescue Exception => e
raise_conversion_for_rendering_failed l, e, :label
@@ -257,7 +112,22 @@ module GTK
if l.respond_to? :draw_override
l.draw_override @ffi_draw
else
- @ffi_draw.draw_line l.x, l.y, l.x2, l.y2, l.r, l.g, l.b, l.a
+ l = l.as_hash if l.is_a? OpenEntity
+ if l.x2
+ @ffi_draw.draw_line_2 l.x, l.y, l.x2, l.y2,
+ l.r, l.g, l.b, l.a,
+ (l.blendmode_enum || 1)
+ else
+ w = l.w || 0
+ w = 1 if w == 0
+ h = l.h || 0
+ h = 1 if h == 0
+ @ffi_draw.draw_line_2 l.x, l.y,
+ l.x + w - 1,
+ l.y + h - 1,
+ l.r, l.g, l.b, l.a,
+ (l.blendmode_enum || 1)
+ end
end
rescue Exception => e
raise_conversion_for_rendering_failed l, e, :line
@@ -268,7 +138,10 @@ module GTK
if s.respond_to? :draw_override
s.draw_override @ffi_draw
else
- @ffi_draw.draw_border s.x, s.y, s.w, s.h, s.r, s.g, s.b, s.a
+ s = s.as_hash if s.is_a? OpenEntity
+ @ffi_draw.draw_border_2 s.x, s.y, s.w, s.h,
+ s.r, s.g, s.b, s.a,
+ (s.blendmode_enum || 1)
end
rescue Exception => e
raise_conversion_for_rendering_failed s, e, :border
@@ -288,7 +161,6 @@ module GTK
pause!
pretty_print_exception_and_export! e
end
-
end
end
end