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 +35 -0
- data/lib/console.rb +55 -0
- data/lib/r2d.rb +19 -0
- data/lib/r2d/adapters.rb +45 -0
- data/lib/r2d/adapters/gosu.rb +158 -0
- data/lib/r2d/circle.rb +35 -0
- data/lib/r2d/color.rb +48 -0
- data/lib/r2d/exceptions.rb +12 -0
- data/lib/r2d/helpers.rb +48 -0
- data/lib/r2d/image.rb +39 -0
- data/lib/r2d/line.rb +77 -0
- data/lib/r2d/quad.rb +42 -0
- data/lib/r2d/rectangle.rb +95 -0
- data/lib/r2d/song.rb +37 -0
- data/lib/r2d/sound.rb +37 -0
- data/lib/r2d/square.rb +20 -0
- data/lib/r2d/text.rb +42 -0
- data/lib/r2d/triangle.rb +41 -0
- data/lib/r2d/version.rb +5 -0
- data/lib/r2d/window.rb +92 -0
- metadata +82 -0
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
|
data/lib/console.rb
ADDED
@@ -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
|
data/lib/r2d.rb
ADDED
@@ -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'
|
data/lib/r2d/adapters.rb
ADDED
@@ -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
|
data/lib/r2d/circle.rb
ADDED
@@ -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
|
data/lib/r2d/color.rb
ADDED
@@ -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
|
data/lib/r2d/helpers.rb
ADDED
@@ -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
|
data/lib/r2d/image.rb
ADDED
@@ -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
|
data/lib/r2d/line.rb
ADDED
@@ -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
|
data/lib/r2d/quad.rb
ADDED
@@ -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
|
data/lib/r2d/song.rb
ADDED
@@ -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
|
data/lib/r2d/sound.rb
ADDED
@@ -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
|
data/lib/r2d/square.rb
ADDED
@@ -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
|
data/lib/r2d/text.rb
ADDED
@@ -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
|
data/lib/r2d/triangle.rb
ADDED
@@ -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
|
+
|
data/lib/r2d/version.rb
ADDED
data/lib/r2d/window.rb
ADDED
@@ -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: []
|