r2d-takaokouji 0.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/r2d ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'r2d'
4
+
5
+ case ARGV[0]
6
+ when 'console'
7
+
8
+ require 'io/wait'
9
+ require 'open3'
10
+ require 'readline'
11
+
12
+ path = __dir__.sub(' ', '\ ') << "/../lib/console.rb"
13
+
14
+ stdin, stdout, stderr, wait_thr = Open3.popen3("ruby #{path}")
15
+
16
+ loop do
17
+ str = Readline.readline(">> ", true)
18
+
19
+ if str == "exit"
20
+ Process.kill 'INT', wait_thr.pid
21
+ wait_thr.value
22
+ exit
23
+ else
24
+ stdin.puts str
25
+ end
26
+
27
+ puts stdout.gets
28
+ while stdout.ready? do
29
+ puts stdout.gets
30
+ end
31
+
32
+ end
33
+ else
34
+ puts "`r2d console` is the only available command"
35
+ end
@@ -0,0 +1,55 @@
1
+ require 'io/wait'
2
+ require 'r2d'
3
+
4
+ class String
5
+ def error
6
+ # red => \e[0;31
7
+ # red/bold => \e[1;31m
8
+ "\e[0;31m#{self}\e[0m"
9
+ end
10
+ def task
11
+ "\e[1;34m#{self}\e[0m"
12
+ end
13
+ def success
14
+ "\e[0;32m#{self}\e[0m"
15
+ end
16
+ end
17
+
18
+ window width: 640, height: 480
19
+
20
+ _activity = Square.new(630, 470, 10, 'white')
21
+
22
+ _c = 0
23
+ _switch = true
24
+
25
+ update do
26
+
27
+ if _switch
28
+ _c += 2
29
+ if _c > 255
30
+ _switch = false
31
+ end
32
+ else
33
+ _c -= 2
34
+ if _c < 0
35
+ _switch = true
36
+ end
37
+ end
38
+
39
+ _activity.color = [255, 255, 255, _c]
40
+
41
+ if STDIN.ready?
42
+ str = STDIN.gets
43
+ begin
44
+ r = eval(str, TOPLEVEL_BINDING)
45
+ STDOUT.puts r.to_s
46
+ STDOUT.flush
47
+ rescue Exception => e
48
+ STDOUT.puts e.to_s.error
49
+ STDOUT.flush
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ window :show
@@ -0,0 +1,19 @@
1
+ # r2d.rb
2
+
3
+ require 'r2d/version'
4
+ require 'r2d/adapters'
5
+ require 'r2d/adapters/gosu'
6
+ require 'r2d/window'
7
+ require 'r2d/color'
8
+ require 'r2d/quad'
9
+ require 'r2d/rectangle'
10
+ require 'r2d/square'
11
+ require 'r2d/line'
12
+ require 'r2d/triangle'
13
+ require 'r2d/circle'
14
+ require 'r2d/text'
15
+ require 'r2d/image'
16
+ require 'r2d/song'
17
+ require 'r2d/sound'
18
+ require 'r2d/exceptions'
19
+ require 'r2d/helpers'
@@ -0,0 +1,45 @@
1
+ # adapters.rb
2
+
3
+ module R2D
4
+ module Adapters
5
+
6
+ @active = nil
7
+
8
+ def self.create(window, kind)
9
+ if !@active
10
+ case kind
11
+ when :gosu
12
+ @active = Gosu
13
+ @active.create_window(window)
14
+ end
15
+ true
16
+ else
17
+ false
18
+ end
19
+ end
20
+
21
+ def self.show
22
+ @active.show_window
23
+ end
24
+
25
+ def self.key_lookup(key); Gosu.key_id(key) end
26
+
27
+ def self.get_color(r, g, b, a); Gosu.get_color(r, g, b, a) end
28
+
29
+ def self.mouse_x; Gosu.mouse_x end
30
+ def self.mouse_y; Gosu.mouse_y end
31
+
32
+ # Fix these:
33
+
34
+ def self.song(path); @active.song(path) end
35
+
36
+ def self.current_song; @active.current_song end
37
+
38
+ def self.sound(path); @active.sound(path) end
39
+
40
+ def self.image(path); @active.image(path) end
41
+
42
+ def self.text(h=20, font='default'); @active.text(h, font) end
43
+
44
+ end
45
+ end
@@ -0,0 +1,158 @@
1
+ # gosu.rb
2
+
3
+ require 'gosu'
4
+
5
+ module R2D
6
+ module Adapters
7
+ module Gosu
8
+
9
+ @gosu_window = nil
10
+
11
+ def self.create_window(window)
12
+ @gosu_window = GosuWindow.new(window)
13
+ end
14
+
15
+ def self.show_window
16
+ @gosu_window.show
17
+ end
18
+
19
+ def self.mouse_x; @gosu_window.mouse_x end
20
+ def self.mouse_y; @gosu_window.mouse_y end
21
+
22
+ def self.get_color(r, g, b, a); ::Gosu::Color.argb(a, r, g, b) end
23
+
24
+ def self.song(path); ::Gosu::Song.new(@gosu_window, path) end
25
+
26
+ def self.current_song; ::Gosu::Song.current_song end
27
+
28
+ def self.sound(path); ::Gosu::Sample.new(@gosu_window, path) end
29
+
30
+ def self.image(path); ::Gosu::Image.new(@gosu_window, path, true) end
31
+
32
+ def self.text(h, font)
33
+ if font == 'default' then font = ::Gosu::default_font_name end
34
+ ::Gosu::Font.new(@gosu_window, font, h)
35
+ end
36
+
37
+ def self.key_id(key)
38
+ case key
39
+ when 'up'
40
+ id = ::Gosu::KbUp
41
+ when 'down'
42
+ id = ::Gosu::KbDown
43
+ when 'left'
44
+ id = ::Gosu::KbLeft
45
+ when 'right'
46
+ id = ::Gosu::KbRight
47
+
48
+ when 'left_alt'
49
+ id = ::Gosu::KbLeftAlt
50
+ when 'right_alt'
51
+ id = ::Gosu::KbRightAlt
52
+ when 'left_control'
53
+ id = ::Gosu::KbLeftControl
54
+ when 'right_control'
55
+ id = ::Gosu::KbRightControl
56
+ when 'left_shift'
57
+ id = ::Gosu::KbLeftShift
58
+ when 'right_shift'
59
+ id = ::Gosu::KbRightShift
60
+
61
+ when 'backspace'
62
+ id = ::Gosu::KbBackspace
63
+ when 'delete'
64
+ id = ::Gosu::KbDelete
65
+ when 'space'
66
+ id = ::Gosu::KbSpace
67
+ when 'tab'
68
+ id = ::Gosu::KbTab
69
+ when 'return'
70
+ id = ::Gosu::KbReturn
71
+
72
+ when 'mouse_left'
73
+ id = ::Gosu::MsLeft
74
+ when 'mouse_right'
75
+ id = ::Gosu::MsRight
76
+
77
+ when ('a'..'z') || ('A'..'Z') || ('0'..'9')
78
+ id = @gosu_window.char_to_button_id(key)
79
+ else
80
+ raise Error, "The key '#{key}' is not valid!"
81
+ end
82
+ end
83
+
84
+ class GosuWindow < ::Gosu::Window
85
+
86
+ attr_accessor :window
87
+
88
+ def initialize(window)
89
+ # super 800, 600, false
90
+ super window.w, window.h, window.fs
91
+
92
+ self.caption = window.title
93
+ @cursor = window.cursor
94
+ @window = window
95
+ end
96
+
97
+ # Gosu Methods
98
+
99
+ def needs_cursor?; @cursor end
100
+
101
+ def button_down(id)
102
+ if id == ::Gosu::KbEscape
103
+ close
104
+ elsif @window.on_keys.has_key? id
105
+ @window.on_keys[id].call
106
+ end
107
+ end
108
+
109
+ def update
110
+ @window.update_proc.call
111
+
112
+ @window.keys_down.each_key do |id|
113
+ if button_down? id
114
+ @window.keys_down[id].call
115
+ end
116
+ end
117
+ end
118
+
119
+ def draw
120
+ @window.objects.each do |o|
121
+ case o
122
+ when Line
123
+ draw_quad(
124
+ o.qx1, o.qy1, o.c1.adapter,
125
+ o.qx2, o.qy2, o.c2.adapter,
126
+ o.qx3, o.qy3, o.c3.adapter,
127
+ o.qx4, o.qy4, o.c4.adapter
128
+ )
129
+ when Triangle
130
+ draw_triangle(
131
+ o.x1, o.y1, o.c1.adapter,
132
+ o.x2, o.y2, o.c2.adapter,
133
+ o.x3, o.y3, o.c3.adapter
134
+ )
135
+ when Quad
136
+ draw_quad(
137
+ o.x1, o.y1, o.c1.adapter,
138
+ o.x2, o.y2, o.c2.adapter,
139
+ o.x3, o.y3, o.c3.adapter,
140
+ o.x4, o.y4, o.c4.adapter
141
+ )
142
+ when Image
143
+ # .draw(x, y, z, factor_x=1, factor_y=1, color=0xffffffff, mode=:default)
144
+ o.adapter.draw(o.x, o.y, 0, o.f_x, o.f_y)
145
+ when Text
146
+ # .draw(text, x, y, z, factor_x=1, factor_y=1, color=0xffffffff, mode=:default)
147
+ o.adapter.draw(o.content, o.x, o.y, 0, 1, 1, o.c.adapter)
148
+ else
149
+ raise Error, "Cannot draw type '#{o.class}'"
150
+ end
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,35 @@
1
+ # circle.rb
2
+ # https://gist.github.com/661266
3
+
4
+ class Circle
5
+ attr_reader :columns, :rows
6
+
7
+ def initialize radius
8
+ @columns = @rows = radius * 2
9
+ lower_half = (0...radius).map do |y|
10
+ x = Math.sqrt(radius**2 - y**2).round
11
+ right_half = "#{"\xff" * x}#{"\x00" * (radius - x)}"
12
+ "#{right_half.reverse}#{right_half}"
13
+ end.join
14
+ @blob = lower_half.reverse + lower_half
15
+ @blob.gsub!(/./) { |alpha| "\xff\xff\xff#{alpha}"}
16
+ end
17
+
18
+ def to_blob
19
+ @blob
20
+ end
21
+ end
22
+
23
+ # class TestWin < Gosu::Window
24
+ # def initialize
25
+ # super 400, 400, false
26
+ #
27
+ # @img = Gosu::Image.new(self, Circle.new(200), false)
28
+ # end
29
+ #
30
+ # def draw
31
+ # @img.draw 0, 0, 0
32
+ # end
33
+ # end
34
+ #
35
+ # TestWin.new.show
@@ -0,0 +1,48 @@
1
+ # color.rb
2
+
3
+ module R2D
4
+ class Color
5
+
6
+ attr_reader :r, :g, :b, :a, :adapter
7
+
8
+ def initialize(c)
9
+ case c
10
+ when "red"
11
+ @r, @g, @b, @a = 255, 0, 0, 255
12
+ when "green"
13
+ @r, @g, @b, @a = 0, 255, 0, 255
14
+ when "blue"
15
+ @r, @g, @b, @a = 0, 0, 255, 255
16
+ when "black"
17
+ @r, @g, @b, @a = 0, 0, 0, 255
18
+ when "white"
19
+ @r, @g, @b, @a = 255, 255, 255, 255
20
+ when "yellow"
21
+ @r, @g, @b, @a = 255, 255, 0, 255
22
+ when "orange"
23
+ @r, @g, @b, @a = 255, 150, 0, 255
24
+ when "purple"
25
+ @r, @g, @b, @a = 150, 30, 150, 255
26
+ when "random"
27
+ @r, @g, @b, @a = rand(0..255), rand(0..255), rand(0..255), 255
28
+ when Array
29
+ @r, @g = to_val(c[0]), to_val(c[1])
30
+ @b, @a = to_val(c[2]), to_val(c[3])
31
+ else
32
+ raise Error, "Color does not exist!"
33
+ end
34
+
35
+ @adapter = R2D::Adapters.get_color(r, g, b, a)
36
+ end
37
+
38
+ private
39
+
40
+ def to_val(n)
41
+ if n.class == Fixnum
42
+ return n
43
+ elsif n.class == Float
44
+ return (n * 255).to_i
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,12 @@
1
+ # exceptions.rb
2
+
3
+ module R2D
4
+ class Error < StandardError
5
+ def initialize(msg)
6
+ super(msg)
7
+ # puts msg
8
+ # puts "Occurred in:"
9
+ # puts " " + caller.last, "\n"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,48 @@
1
+ # helpers.rb
2
+
3
+ module R2D
4
+ module Helpers
5
+
6
+ def mouse_x
7
+ Adapters.mouse_x
8
+ end
9
+
10
+ def mouse_y
11
+ Adapters.mouse_y
12
+ end
13
+
14
+ def on_key(key, &block)
15
+ @current.on_key(key, block)
16
+ end
17
+
18
+ def key_down?(key)
19
+ @current.key_down?(key)
20
+ end
21
+
22
+ def key_down(key, &block)
23
+ @current.add_key_down(key, block)
24
+ end
25
+
26
+ def update(&block)
27
+ @current.update(block)
28
+ end
29
+
30
+ def window(opts={})
31
+ case opts
32
+ when :show
33
+ @current.show
34
+ when :clear
35
+ @current.clear
36
+ else
37
+ @current = Window.new(
38
+ w: opts[:width] || 640,
39
+ h: opts[:height] || 480,
40
+ bg: opts[:background],
41
+ fs: opts[:fullscreen] || false
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ include R2D::Helpers
@@ -0,0 +1,39 @@
1
+ # image.rb
2
+
3
+ class Image
4
+
5
+ attr_accessor :x, :y
6
+ attr_reader :width, :height, :f_x, :f_y
7
+
8
+ def initialize(x, y, path, visible=true)
9
+ @x, @y, @path = x, y, path
10
+ @f_x, @f_y = 1, 1
11
+ @image = R2D::Adapters.image(path)
12
+ @o_w, @o_h = @image.width, @image.height
13
+ @width, @height = @o_w, @o_h
14
+ if visible then add end
15
+ end
16
+
17
+ def width=(w)
18
+ @f_x = w / @o_w.to_f
19
+ @width = w
20
+ end
21
+
22
+ def height=(h)
23
+ @f_y = h / @o_h.to_f
24
+ @height = h
25
+ end
26
+
27
+ def add
28
+ R2D::Window.add(self)
29
+ end
30
+
31
+ def remove
32
+ R2D::Window.remove(self)
33
+ end
34
+
35
+ def adapter
36
+ @image
37
+ end
38
+
39
+ end
@@ -0,0 +1,77 @@
1
+ # line.rb
2
+
3
+ class Line
4
+
5
+ attr_reader :x1, :y1, :x2, :y2, :w, :color,
6
+ :qx1, :qy1, :qx2, :qy2, :qx3, :qy3, :qx4, :qy4,
7
+ :c1, :c2, :c3, :c4
8
+
9
+ def initialize(x1, y1, x2, y2, w, c="white", visible=true)
10
+ @x1, @y1, @x2, @y2, @w, @color = x1, y1, x2, y2, w, c
11
+ update_coords(x1, y1, x2, y2, w)
12
+ update_color(c)
13
+ if visible then add end
14
+ end
15
+
16
+ def x1=(x1)
17
+ @x1 = x1
18
+ update_coords(x1, @y1, @x2, @y2, @w)
19
+ end
20
+
21
+ def y1=(y1)
22
+ @y1 = y1
23
+ update_coords(@x1, y1, @x2, @y2, @w)
24
+ end
25
+
26
+ def x2=(x2)
27
+ @x2 = x2
28
+ update_coords(@x1, @y1, x2, @y2, @w)
29
+ end
30
+
31
+ def y2=(y2)
32
+ @y2 = y2
33
+ update_coords(@x1, @y1, @x2, y2, @w)
34
+ end
35
+
36
+ def w=(w)
37
+ @w = w
38
+ update_coords(@x1, @y1, @x2, @y2, w)
39
+ end
40
+
41
+ def color=(c)
42
+ @color = c
43
+ update_color(c)
44
+ end
45
+
46
+ def add
47
+ R2D::Window.add(self)
48
+ end
49
+
50
+ def remove
51
+ R2D::Window.remove(self)
52
+ end
53
+
54
+ def show; add end
55
+ def hide; remove end
56
+
57
+ private
58
+
59
+ def update_coords(x1, y1, x2, y2, w)
60
+ @qx1 = x1
61
+ @qy1 = y1 - w/2
62
+ @qx2 = x2
63
+ @qy2 = y2 - w/2
64
+ @qx3 = x1
65
+ @qy3 = y1 + w/2
66
+ @qx4 = x2
67
+ @qy4 = y2 + w/2
68
+ end
69
+
70
+ def update_color(c)
71
+ @c1 = R2D::Color.new(c)
72
+ @c2 = R2D::Color.new(c)
73
+ @c3 = R2D::Color.new(c)
74
+ @c4 = R2D::Color.new(c)
75
+ end
76
+
77
+ end
@@ -0,0 +1,42 @@
1
+ # quad.rb
2
+
3
+ class Quad
4
+ # x1,y1 == top left
5
+ # x2,y2 == top right
6
+ # x3,y3 == bottom left
7
+ # x4,y4 == bottom right
8
+ attr_reader :color,
9
+ :x1, :y1, :c1,
10
+ :x2, :y2, :c2,
11
+ :x3, :y3, :c3,
12
+ :x4, :y4, :c4
13
+
14
+ def initialize(x1, y1, x2, y2, x3, y3, x4, y4, c="white", visible=true)
15
+ @x1, @y1, @x2, @y2, @x3, @y3, @x4, @y4 = x1, y1, x2, y2, x3, y3, x4, y4
16
+ @color = c
17
+ update_color(c)
18
+ if visible then add end
19
+ end
20
+
21
+ def color=(c)
22
+ @color = c
23
+ update_color(c)
24
+ end
25
+
26
+ def add
27
+ R2D::Window.add(self)
28
+ end
29
+
30
+ def remove
31
+ R2D::Window.remove(self)
32
+ end
33
+
34
+ private
35
+
36
+ def update_color(c)
37
+ @c1 = R2D::Color.new(c)
38
+ @c2 = R2D::Color.new(c)
39
+ @c3 = R2D::Color.new(c)
40
+ @c4 = R2D::Color.new(c)
41
+ end
42
+ end
@@ -0,0 +1,95 @@
1
+ # rectangle.rb
2
+
3
+ class Rectangle < Quad
4
+
5
+ attr_reader :x, :y, :width, :height
6
+
7
+ def initialize(x, y, w, h, c="white", visible=true)
8
+ @x, @y, @width, @height, @color = x, y, w, h, c
9
+ update_coords(x, y, w, h)
10
+ update_color(c)
11
+ if visible then add end
12
+ end
13
+
14
+ def x=(x)
15
+ @x = @x1 = x
16
+ @x2 = x + @width
17
+ @x3 = x
18
+ @x4 = x + @width
19
+ end
20
+
21
+ def y=(y)
22
+ @y = @y1 = y
23
+ @y2 = y
24
+ @y3 = y + @height
25
+ @y4 = y + @height
26
+ end
27
+
28
+ def width=(w)
29
+ @width = w
30
+ update_coords(@x, @y, w, @height)
31
+ end
32
+
33
+ def height=(h)
34
+ @height = h
35
+ update_coords(@x, @y, @width, h)
36
+ end
37
+
38
+ def gradient=(g)
39
+ if g[:top]
40
+ # r, g, b, a = R2D::Color.rgba(g[:top])
41
+ # @c1 = @c2 = R2D::Window.get_color(r, g, b, a)
42
+ end
43
+
44
+ p g.class
45
+
46
+ # if g[:bottom]
47
+ # r, g, b, a = R2D::Color.rgba(g[:bottom])
48
+ # @c3 = @c4 = R2D::Window.get_color(r, g, b, a)
49
+ # end
50
+
51
+ # if g[:left]
52
+ # r, g, b, a = R2D::Color.rgba(g[:left])
53
+ # @c1 = @c3 = R2D::Window.get_color(r, g, b, a)
54
+ # end
55
+
56
+ # if g[:right]
57
+ # r, g, b, a = R2D::Color.rgba(g[:right])
58
+ # @c2 = @c4 = R2D::Window.get_color(r, g, b, a)
59
+ # end
60
+
61
+ # if g[:top_left]
62
+ # r, g, b, a = R2D::Color.rgba(g[:top_left])
63
+ # @c1 = R2D::Window.get_color(r, g, b, a)
64
+ # end
65
+
66
+ # if g[:top_right]
67
+ # r, g, b, a = R2D::Color.rgba(g[:top_right])
68
+ # @c2 = R2D::Window.get_color(r, g, b, a)
69
+ # end
70
+
71
+ # if g[:bottom_left]
72
+ # r, g, b, a = R2D::Color.rgba(g[:bottom_left])
73
+ # @c3 = R2D::Window.get_color(r, g, b, a)
74
+ # end
75
+
76
+ # if g[:bottom_right]
77
+ # r, g, b, a = R2D::Color.rgba(g[:bottom_right])
78
+ # @c4 = R2D::Window.get_color(r, g, b, a)
79
+ # end
80
+ end
81
+
82
+ private
83
+
84
+ def update_coords(x, y, w, h)
85
+ @x1 = x
86
+ @y1 = y
87
+ @x2 = x + w
88
+ @y2 = y
89
+ @x3 = x
90
+ @y3 = y + h
91
+ @x4 = x + w
92
+ @y4 = y + h
93
+ end
94
+
95
+ end
@@ -0,0 +1,37 @@
1
+ # song.rb
2
+
3
+ class Song
4
+
5
+ def initialize(path)
6
+ @song = R2D::Adapters.song(path)
7
+ end
8
+
9
+ def play
10
+ @song.play
11
+ end
12
+
13
+ def loop
14
+ @song.play(true)
15
+ end
16
+
17
+ def pause
18
+ @song.pause
19
+ end
20
+
21
+ def playing?
22
+ @song.playing?
23
+ end
24
+
25
+ def paused?
26
+ @song.paused?
27
+ end
28
+
29
+ def stop
30
+ @song.stop
31
+ end
32
+
33
+ def volume
34
+ @song.volume
35
+ end
36
+
37
+ end
@@ -0,0 +1,37 @@
1
+ # sound.rb
2
+
3
+ class Sound
4
+
5
+ def initialize(path)
6
+ @sound = R2D::Adapters.sound(path)
7
+ end
8
+
9
+ def play
10
+ @sound.play
11
+ end
12
+
13
+ def play_loop
14
+ @sound.play(true)
15
+ end
16
+
17
+ def pause
18
+ @sound.pause
19
+ end
20
+
21
+ def playing?
22
+ @sound.playing?
23
+ end
24
+
25
+ def paused?
26
+ @sound.paused?
27
+ end
28
+
29
+ def stop
30
+ @sound.stop
31
+ end
32
+
33
+ def volume
34
+ @sound.volume
35
+ end
36
+
37
+ end
@@ -0,0 +1,20 @@
1
+ # square.rb
2
+
3
+ class Square < Rectangle
4
+
5
+ attr_reader :size
6
+
7
+ def initialize(x=0, y=0, s=100, c="white", visible=true)
8
+ @x, @y, @color = x, y, c
9
+ @width = @height = @size = s
10
+ update_coords(x, y, s, s)
11
+ update_color(c)
12
+ if visible then add end
13
+ end
14
+
15
+ def size=(s)
16
+ self.width = self.height = @size = s
17
+ end
18
+
19
+ private :width=, :height=
20
+ end
@@ -0,0 +1,42 @@
1
+ # text.rb
2
+
3
+ class Text
4
+
5
+ attr_accessor :x, :y
6
+ attr_reader :h, :content, :color, :c
7
+
8
+ def initialize(x=0, y=0, h=50, content="Hello World!", c="white", visible=true)
9
+ @x, @y, @h, @content, @color = x, y, h, content, c
10
+ update_color(c)
11
+ @text = R2D::Adapters.text(h)
12
+ if visible then add end
13
+ end
14
+
15
+ def color=(c)
16
+ @color = c
17
+ update_color(c)
18
+ end
19
+
20
+ def content=(c)
21
+ @content = c
22
+ end
23
+
24
+ def add
25
+ R2D::Window.add(self)
26
+ end
27
+
28
+ def remove
29
+ R2D::Window.remove(self)
30
+ end
31
+
32
+ def adapter
33
+ @text
34
+ end
35
+
36
+ private
37
+
38
+ def update_color(c)
39
+ @c = R2D::Color.new(c)
40
+ end
41
+
42
+ end
@@ -0,0 +1,41 @@
1
+ # triangle.rb
2
+
3
+ class Triangle
4
+
5
+ attr_accessor :x1, :y1, :c1,
6
+ :x2, :y2, :c2,
7
+ :x3, :y3, :c3
8
+ attr_reader :color
9
+
10
+ def initialize(x1, y1, x2, y2, x3, y3, c="white", visible=true)
11
+ @x1, @y1 = x1, y1
12
+ @x2, @y2 = x2, y2
13
+ @x3, @y3 = x3, y3
14
+ @color = c
15
+ update_color(c)
16
+ if visible then add end
17
+ end
18
+
19
+ def color=(c)
20
+ update_color(c)
21
+ @color = c
22
+ end
23
+
24
+ def add
25
+ R2D::Window.add(self)
26
+ end
27
+
28
+ def remove
29
+ R2D::Window.remove(self)
30
+ end
31
+
32
+ private
33
+
34
+ def update_color(c)
35
+ @c1 = R2D::Color.new(c)
36
+ @c2 = R2D::Color.new(c)
37
+ @c3 = R2D::Color.new(c)
38
+ end
39
+
40
+ end
41
+
@@ -0,0 +1,5 @@
1
+ # version.rb
2
+
3
+ module R2D
4
+ VERSION = '0.0.0.0'
5
+ end
@@ -0,0 +1,92 @@
1
+ # window.rb
2
+
3
+ module R2D
4
+ class Window
5
+
6
+ attr_accessor :w, :h, :title, :bg, :cursor, :fs
7
+ attr_reader :objects, :on_keys, :keys_down, :update_proc
8
+
9
+ def initialize(options = {})
10
+ options = options.merge({w: 640, h: 480, title: "R2D", bg: nil, cursor: true, fs: false})
11
+ @w, @h, @title, @bg, @cursor, @fs, =
12
+ options[:w], options[:h], options[:title], options[:bg], options[:cursor], options[:fs]
13
+
14
+ @objects = []
15
+ @on_keys = {}
16
+ @keys_down = {}
17
+ @update_proc = Proc.new {}
18
+
19
+ Adapters.create(self, :gosu)
20
+
21
+ @@current = self
22
+ end
23
+
24
+ def self.add(o)
25
+ @@current.add(o)
26
+ end
27
+
28
+ def self.remove(o)
29
+ @@current.remove(o)
30
+ end
31
+
32
+ def add(o)
33
+ if !@objects.include?(o)
34
+ @objects.push(o)
35
+ true
36
+ else
37
+ false
38
+ end
39
+ end
40
+
41
+ def remove(o)
42
+ if i = @objects.index(o)
43
+ @objects.slice!(i)
44
+ true
45
+ else
46
+ false
47
+ end
48
+ end
49
+
50
+ def clear
51
+ @objects.clear
52
+ end
53
+
54
+ def add_on_key(key, proc)
55
+ @on_keys[Adapters.key_lookup(key)] = proc
56
+ true
57
+ end
58
+
59
+ def key_down?(key)
60
+ button_down?(Adapters.key_lookup(key))
61
+ true
62
+ end
63
+
64
+ def add_key_down(key, proc)
65
+ @keys_down[Adapters.key_lookup(key)] = proc
66
+ true
67
+ end
68
+
69
+ def update(block)
70
+ @update_proc = block
71
+ true
72
+ end
73
+
74
+ def on_key(key, block)
75
+ add_on_key(key, block)
76
+ true
77
+ end
78
+
79
+ def mouse_x
80
+ Adapters.mouse_x
81
+ end
82
+
83
+ def mouse_y
84
+ Adapters.mouse_y
85
+ end
86
+
87
+ def show
88
+ Adapters.show
89
+ end
90
+
91
+ end
92
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: r2d-takaokouji
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kouji Takao
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gosu
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.47.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.7.47.1
30
+ description: ! 'R2D original: https://github.com/blacktm/r2d. This is temporary gem.'
31
+ email: kouji.takao@gmail.com
32
+ executables:
33
+ - r2d
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - lib/console.rb
38
+ - lib/r2d/adapters/gosu.rb
39
+ - lib/r2d/adapters.rb
40
+ - lib/r2d/circle.rb
41
+ - lib/r2d/color.rb
42
+ - lib/r2d/exceptions.rb
43
+ - lib/r2d/helpers.rb
44
+ - lib/r2d/image.rb
45
+ - lib/r2d/line.rb
46
+ - lib/r2d/quad.rb
47
+ - lib/r2d/rectangle.rb
48
+ - lib/r2d/song.rb
49
+ - lib/r2d/sound.rb
50
+ - lib/r2d/square.rb
51
+ - lib/r2d/text.rb
52
+ - lib/r2d/triangle.rb
53
+ - lib/r2d/version.rb
54
+ - lib/r2d/window.rb
55
+ - lib/r2d.rb
56
+ - bin/r2d
57
+ homepage: https://github.com/takaokouji/r2d
58
+ licenses:
59
+ - MIT
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.9.3
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 1.8.24
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: R2D by Kouji Takao
82
+ test_files: []