summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlstrzebinczyk <[email protected]>2017-04-29 20:28:52 +0200
committerTom Black <[email protected]>2017-05-19 16:23:05 -0400
commitabfb596bc9212c5094dc7ec3645ace4e7d35856b (patch)
treebd167dd602f833f84582ed9e18734ffe979d2914
parentb4ba5e2ffc71906c84e6fb0b730379ea9a74fdc9 (diff)
downloadruby2d-abfb596bc9212c5094dc7ec3645ace4e7d35856b.tar.gz
ruby2d-abfb596bc9212c5094dc7ec3645ace4e7d35856b.zip
introduce lines
-rwxr-xr-xbin/ruby2d1
-rw-r--r--ext/ruby2d/ruby2d-opal.rb17
-rw-r--r--ext/ruby2d/ruby2d.c43
-rw-r--r--lib/ruby2d.rb1
-rw-r--r--lib/ruby2d/image.rb2
-rw-r--r--lib/ruby2d/line.rb41
-rw-r--r--lib/ruby2d/sprite.rb2
-rw-r--r--lib/ruby2d/text.rb2
-rw-r--r--test/testcard.rb39
9 files changed, 131 insertions, 17 deletions
diff --git a/bin/ruby2d b/bin/ruby2d
index c98b464..aa486ea 100755
--- a/bin/ruby2d
+++ b/bin/ruby2d
@@ -21,6 +21,7 @@ end
'application',
'dsl',
'quad',
+ 'line',
'rectangle',
'square',
'triangle',
diff --git a/ext/ruby2d/ruby2d-opal.rb b/ext/ruby2d/ruby2d-opal.rb
index 666a354..3d4be42 100644
--- a/ext/ruby2d/ruby2d-opal.rb
+++ b/ext/ruby2d/ruby2d-opal.rb
@@ -12,9 +12,10 @@ $R2D_WINDOW = nil
// @type_id values for rendering
const $R2D_TRIANGLE = 1;
const $R2D_QUAD = 2;
-const $R2D_IMAGE = 3;
-const $R2D_SPRITE = 4;
-const $R2D_TEXT = 5;
+const $R2D_LINE = 3;
+const $R2D_IMAGE = 4;
+const $R2D_SPRITE = 5;
+const $R2D_TEXT = 6;
function on_key(e) {
@@ -126,6 +127,16 @@ function render() {
);
break;
+ case $R2D_LINE:
+ S2D.DrawLine(
+ el.x1, el.y1, el.x2, el.y2, el.width,
+ el.c1.r, el.c1.g, el.c1.b, el.c1.a,
+ el.c2.r, el.c2.g, el.c2.b, el.c2.a,
+ el.c3.r, el.c3.g, el.c3.b, el.c3.a,
+ el.c4.r, el.c4.g, el.c4.b, el.c4.a
+ );
+ break;
+
case $R2D_IMAGE:
el.data.x = el.x;
el.data.y = el.y;
diff --git a/ext/ruby2d/ruby2d.c b/ext/ruby2d/ruby2d.c
index ae39fbb..ac4100d 100644
--- a/ext/ruby2d/ruby2d.c
+++ b/ext/ruby2d/ruby2d.c
@@ -92,9 +92,10 @@
// @type_id values for rendering
#define R2D_TRIANGLE 1
#define R2D_QUAD 2
-#define R2D_IMAGE 3
-#define R2D_SPRITE 4
-#define R2D_TEXT 5
+#define R2D_LINE 3
+#define R2D_IMAGE 4
+#define R2D_SPRITE 5
+#define R2D_TEXT 6
// Create the MRuby context
#if MRUBY
@@ -664,6 +665,42 @@ static void render() {
}
break;
+ case R2D_LINE: {
+ R_VAL c1 = r_iv_get(el, "@c1");
+ R_VAL c2 = r_iv_get(el, "@c2");
+ R_VAL c3 = r_iv_get(el, "@c3");
+ R_VAL c4 = r_iv_get(el, "@c4");
+
+ S2D_DrawLine(
+ NUM2DBL(r_iv_get(el, "@x1")),
+ NUM2DBL(r_iv_get(el, "@y1")),
+ NUM2DBL(r_iv_get(el, "@x2")),
+ NUM2DBL(r_iv_get(el, "@y2")),
+ NUM2DBL(r_iv_get(el, "@width")),
+
+ NUM2DBL(r_iv_get(c1, "@r")),
+ NUM2DBL(r_iv_get(c1, "@g")),
+ NUM2DBL(r_iv_get(c1, "@b")),
+ NUM2DBL(r_iv_get(c1, "@a")),
+
+ NUM2DBL(r_iv_get(c2, "@r")),
+ NUM2DBL(r_iv_get(c2, "@g")),
+ NUM2DBL(r_iv_get(c2, "@b")),
+ NUM2DBL(r_iv_get(c2, "@a")),
+
+ NUM2DBL(r_iv_get(c3, "@r")),
+ NUM2DBL(r_iv_get(c3, "@g")),
+ NUM2DBL(r_iv_get(c3, "@b")),
+ NUM2DBL(r_iv_get(c3, "@a")),
+
+ NUM2DBL(r_iv_get(c4, "@r")),
+ NUM2DBL(r_iv_get(c4, "@g")),
+ NUM2DBL(r_iv_get(c4, "@b")),
+ NUM2DBL(r_iv_get(c4, "@a"))
+ );
+ }
+ break;
+
case R2D_IMAGE: {
S2D_Image *img;
r_data_get_struct(el, "@data", &image_data_type, S2D_Image, img);
diff --git a/lib/ruby2d.rb b/lib/ruby2d.rb
index 4c13dd9..9642aa1 100644
--- a/lib/ruby2d.rb
+++ b/lib/ruby2d.rb
@@ -7,6 +7,7 @@ require 'ruby2d/window'
require 'ruby2d/application'
require 'ruby2d/dsl'
require 'ruby2d/quad'
+require 'ruby2d/line'
require 'ruby2d/rectangle'
require 'ruby2d/square'
require 'ruby2d/triangle'
diff --git a/lib/ruby2d/image.rb b/lib/ruby2d/image.rb
index 85ee076..91bb3f3 100644
--- a/lib/ruby2d/image.rb
+++ b/lib/ruby2d/image.rb
@@ -15,7 +15,7 @@ module Ruby2D
end
end
- @type_id = 3
+ @type_id = 4
@x, @y, @path = x, y, path
@z = z
@color = Color.new([1, 1, 1, 1])
diff --git a/lib/ruby2d/line.rb b/lib/ruby2d/line.rb
new file mode 100644
index 0000000..5053854
--- /dev/null
+++ b/lib/ruby2d/line.rb
@@ -0,0 +1,41 @@
+# line.rb
+
+module Ruby2D
+ class Line
+ include Renderable
+ attr_accessor :x1, :x2, :y1, :y2, :color, :width
+
+ def initialize(x1, y1, x2, y2, width=2, c='white')
+ @type_id = 3
+ @x1, @y1, @x2, @y2 = x1, y1, x2, y2
+ @width = width
+ self.color = c
+ add
+ end
+
+ def color=(c)
+ @color = Color.from(c)
+ update_color(@color)
+ end
+
+ private
+
+ def update_color(c)
+ if c.is_a? Color::Set
+ if c.length == 4
+ @c1 = c[0]
+ @c2 = c[1]
+ @c3 = c[2]
+ @c4 = c[3]
+ else
+ raise ArgumentError, "Lines require 4 colors, one for each vertex. #{c.length} were given."
+ end
+ else
+ @c1 = c
+ @c2 = c
+ @c3 = c
+ @c4 = c
+ end
+ end
+ end
+end
diff --git a/lib/ruby2d/sprite.rb b/lib/ruby2d/sprite.rb
index ad8dc17..93f4f58 100644
--- a/lib/ruby2d/sprite.rb
+++ b/lib/ruby2d/sprite.rb
@@ -12,7 +12,7 @@ module Ruby2D
# raise Error, "Cannot find image file `#{path}`"
# end
- @type_id = 4
+ @type_id = 5
@x, @y, @path = x, y, path
@clip_x, @clip_y, @clip_w, @clip_h = 0, 0, 0, 0
@default = nil
diff --git a/lib/ruby2d/text.rb b/lib/ruby2d/text.rb
index b3b4529..e326029 100644
--- a/lib/ruby2d/text.rb
+++ b/lib/ruby2d/text.rb
@@ -15,7 +15,7 @@ module Ruby2D
# @font = resolve_path(font)
# end
- @type_id = 5
+ @type_id = 6
@x, @y, @size = x, y, size
@z = z
@text = text.to_s
diff --git a/test/testcard.rb b/test/testcard.rb
index a7dc308..a6341c7 100644
--- a/test/testcard.rb
+++ b/test/testcard.rb
@@ -136,18 +136,41 @@ Quad.new(
]
)
+# Lines
+Line.new(
+ 354, 204, 397, 247,
+ 11,
+ [
+ [1, 1, 1, 1],
+ [1, 1, 1, 1],
+ [1, 1, 1, 1],
+ [1, 1, 1, 1]
+ ]
+);
+
+Line.new(
+ 395, 205, 355, 245,
+ 15,
+ [
+ [1, 0, 0, 0.5],
+ [0, 1, 0, 0.5],
+ [0, 0, 1, 0.5],
+ [1, 0, 1, 0.5]
+ ]
+);
+
# Images
Image.new(590, 180, "#{media}/image.png")
Image.new(590, 290, "#{media}/image.jpg")
Image.new(590, 400, "#{media}/image.bmp")
-img_r = Image.new(350, 200, "#{media}/colors.png")
-img_r.width, img_r.height = 50, 50
+img_r = Image.new(400, 200, "#{media}/colors.png")
+img_r.width, img_r.height = 50, 25
img_r.color = [1.0, 0.3, 0.3, 1.0]
-img_g = Image.new(400, 200, "#{media}/colors.png")
-img_g.width, img_g.height = 50, 50
+img_g = Image.new(400, 225, "#{media}/colors.png")
+img_g.width, img_g.height = 25, 25
img_g.color = [0.3, 1.0, 0.3, 1.0]
-img_b = Image.new(450, 200, "#{media}/colors.png")
-img_b.width, img_b.height = 50, 50
+img_b = Image.new(425, 225, "#{media}/colors.png")
+img_b.width, img_b.height = 25, 25
img_b.color = [0.3, 0.3, 1.0, 1.0]
# Text
@@ -162,7 +185,7 @@ txt_b.color = [0.0, 0.0, 1.0, 1.0]
fps = Text.new(10, 470, "", 20, font)
# Sprites
-s1 = Sprite.new(500, 200, "#{media}/sprite_sheet.png")
+s1 = Sprite.new(450, 200, "#{media}/sprite_sheet.png")
s1.add(forwards: [
[ 0, 0, 50, 50, 30],
[ 50, 0, 50, 50, 40],
@@ -176,7 +199,7 @@ pointer_outline = Square.new(0, 0, 18, [0, 1, 0, 0])
flash = 0
# Updating opacity
-opacity_square = Square.new(500, 255, 50, ["red", "green", "blue", "yellow"])
+opacity_square = Square.new(500, 200, 50, ["red", "green", "blue", "yellow"])
time_start = Time.now
# Text size