cyross-ruby-miyako-mswin32 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +929 -0
- data/img/cursor.png +0 -0
- data/img/cursors.png +0 -0
- data/img/dice.png +0 -0
- data/img/wait_cursor.png +0 -0
- data/img/win_base.png +0 -0
- data/img/window.png +0 -0
- data/install_miyako.rb +61 -0
- data/lib/Miyako/API/audio.rb +198 -0
- data/lib/Miyako/API/basic_data.rb +573 -0
- data/lib/Miyako/API/bitmap.rb +507 -0
- data/lib/Miyako/API/choices.rb +475 -0
- data/lib/Miyako/API/collision.rb +460 -0
- data/lib/Miyako/API/diagram.rb +561 -0
- data/lib/Miyako/API/drawing.rb +151 -0
- data/lib/Miyako/API/fixedmap.rb +428 -0
- data/lib/Miyako/API/font.rb +403 -0
- data/lib/Miyako/API/input.rb +447 -0
- data/lib/Miyako/API/layout.rb +433 -0
- data/lib/Miyako/API/map.rb +529 -0
- data/lib/Miyako/API/map_event.rb +198 -0
- data/lib/Miyako/API/modules.rb +109 -0
- data/lib/Miyako/API/movie.rb +154 -0
- data/lib/Miyako/API/parts.rb +189 -0
- data/lib/Miyako/API/plane.rb +166 -0
- data/lib/Miyako/API/screen.rb +325 -0
- data/lib/Miyako/API/shape.rb +443 -0
- data/lib/Miyako/API/sprite.rb +752 -0
- data/lib/Miyako/API/sprite_animation.rb +481 -0
- data/lib/Miyako/API/spriteunit.rb +147 -0
- data/lib/Miyako/API/story.rb +300 -0
- data/lib/Miyako/API/textbox.rb +725 -0
- data/lib/Miyako/API/utility.rb +388 -0
- data/lib/Miyako/API/viewport.rb +140 -0
- data/lib/Miyako/API/yuki.rb +996 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +157 -0
- data/lib/Miyako/miyako.rb +171 -0
- data/lib/Miyako/miyako_no_katana.so +0 -0
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/sample/Animation1/m1ku.rb +68 -0
- data/sample/Animation1/m1ku_arm_0.png +0 -0
- data/sample/Animation1/m1ku_arm_1.png +0 -0
- data/sample/Animation1/m1ku_arm_2.png +0 -0
- data/sample/Animation1/m1ku_arm_3.png +0 -0
- data/sample/Animation1/m1ku_back.jpg +0 -0
- data/sample/Animation1/m1ku_body.png +0 -0
- data/sample/Animation1/m1ku_eye_0.png +0 -0
- data/sample/Animation1/m1ku_eye_1.png +0 -0
- data/sample/Animation1/m1ku_eye_2.png +0 -0
- data/sample/Animation1/m1ku_eye_3.png +0 -0
- data/sample/Animation1/m1ku_hair_front.png +0 -0
- data/sample/Animation1/m1ku_hair_rear.png +0 -0
- data/sample/Animation1/readme.txt +72 -0
- data/sample/Animation2/lex.rb +96 -0
- data/sample/Animation2/lex_back.png +0 -0
- data/sample/Animation2/lex_body.png +0 -0
- data/sample/Animation2/lex_roadroller.png +0 -0
- data/sample/Animation2/lex_wheel_0.png +0 -0
- data/sample/Animation2/lex_wheel_1.png +0 -0
- data/sample/Animation2/lex_wheel_2.png +0 -0
- data/sample/Animation2/readme.txt +72 -0
- data/sample/Animation2/song_title.png +0 -0
- data/sample/Diagram_sample/back.png +0 -0
- data/sample/Diagram_sample/chr01.png +0 -0
- data/sample/Diagram_sample/chr02.png +0 -0
- data/sample/Diagram_sample/cursor.png +0 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +387 -0
- data/sample/Diagram_sample/readme.txt +90 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +297 -0
- data/sample/Room3/ending.rb +180 -0
- data/sample/Room3/green.rb +220 -0
- data/sample/Room3/image/akamatsu.png +0 -0
- data/sample/Room3/image/aoyama.png +0 -0
- data/sample/Room3/image/congra.png +0 -0
- data/sample/Room3/image/congratulation.png +0 -0
- data/sample/Room3/image/congratulation_bg.png +0 -0
- data/sample/Room3/image/cursor.png +0 -0
- data/sample/Room3/image/midori.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
- data/sample/Room3/image/room_blue.png +0 -0
- data/sample/Room3/image/room_green.png +0 -0
- data/sample/Room3/image/room_red.png +0 -0
- data/sample/Room3/image/start.png +0 -0
- data/sample/Room3/image/three_doors.png +0 -0
- data/sample/Room3/image/wait_cursor.png +0 -0
- data/sample/Room3/main.rb +120 -0
- data/sample/Room3/main_component.rb +59 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +227 -0
- data/sample/Room3/room3.rb +27 -0
- data/sample/Room3/title.rb +184 -0
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +62 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +104 -0
- data/sample/fixed_map_test/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
- data/sample/fixed_map_test/map.csv +19 -0
- data/sample/fixed_map_test/map_01.png +0 -0
- data/sample/fixed_map_test/mapchip.csv +23 -0
- data/sample/fixed_map_test/monster.png +0 -0
- data/sample/fixed_map_test/readme.txt +72 -0
- data/sample/map_test/chara.rb +58 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +69 -0
- data/sample/map_test/main_scene.rb +153 -0
- data/sample/map_test/map.png +0 -0
- data/sample/map_test/map2.png +0 -0
- data/sample/map_test/map_layer.csv +127 -0
- data/sample/map_test/map_manager.rb +75 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +71 -0
- data/sample/map_test/readme.txt +89 -0
- data/sample/map_test/route.rb +157 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +74 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +190 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- metadata +196 -0
data/img/cursor.png
ADDED
|
Binary file
|
data/img/cursors.png
ADDED
|
Binary file
|
data/img/dice.png
ADDED
|
Binary file
|
data/img/wait_cursor.png
ADDED
|
Binary file
|
data/img/win_base.png
ADDED
|
Binary file
|
data/img/window.png
ADDED
|
Binary file
|
data/install_miyako.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Miyako2.0 install script
|
|
2
|
+
# 2009 Cyross Makoto
|
|
3
|
+
|
|
4
|
+
if RUBY_VERSION < '1.9.1'
|
|
5
|
+
puts 'Sorry. Miyako needs Ruby 1.9.1 or above...'
|
|
6
|
+
exit
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
require 'sdl'
|
|
11
|
+
rescue
|
|
12
|
+
puts 'Sorry. Miyako needs Ruby/SDL...'
|
|
13
|
+
exit
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if SDL::VERSION < '2.1'
|
|
17
|
+
puts 'Sorry. Miyako needs Ruby/SDL 2.1.0 or above...'
|
|
18
|
+
exit
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
if osn !~ /mswin|mingw/
|
|
22
|
+
puts 'Sorry. This package needs mswin32 or MinGW platform...'
|
|
23
|
+
exit
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require 'rbconfig'
|
|
27
|
+
require 'fileutils'
|
|
28
|
+
require 'optparse'
|
|
29
|
+
|
|
30
|
+
option = { :noop => false, :verbose => true }
|
|
31
|
+
not_force = true
|
|
32
|
+
|
|
33
|
+
ARGV.options do |opt|
|
|
34
|
+
opt.on('--no-harm'){ option[:noop] = true }
|
|
35
|
+
opt.on('--force'){ not_force = false }
|
|
36
|
+
opt.on('--quiet'){ option[:verbose] = false }
|
|
37
|
+
|
|
38
|
+
opt.parse!
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
ext_dir = "./"
|
|
42
|
+
|
|
43
|
+
sitelibdir = Config::CONFIG["sitelibdir"] + "/Miyako"
|
|
44
|
+
apidir = sitelibdir + "/API"
|
|
45
|
+
extdir = sitelibdir + "/EXT"
|
|
46
|
+
|
|
47
|
+
if FileTest.exist?(sitelibdir) && not_force
|
|
48
|
+
puts "#{sitelibdir} is arleady exists."
|
|
49
|
+
puts "Are you sure?(Y/else)"
|
|
50
|
+
exit unless $stdin.gets.split(//)[0].upcase == 'Y'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
FileUtils.remove_dir(sitelibdir, true)
|
|
54
|
+
FileUtils.mkpath(sitelibdir, option)
|
|
55
|
+
FileUtils.mkpath(apidir, option)
|
|
56
|
+
FileUtils.mkpath(extdir, option)
|
|
57
|
+
|
|
58
|
+
Dir.glob("lib/Miyako/*.rb"){|fname| FileUtils.install(fname, sitelibdir, option)}
|
|
59
|
+
Dir.glob("lib/Miyako/*.so"){|fname| FileUtils.install(fname, sitelibdir, option)}
|
|
60
|
+
Dir.glob("lib/Miyako/API/*.rb"){|fname| FileUtils.install(fname, apidir, option)}
|
|
61
|
+
Dir.glob("lib/Miyako/EXT/*.rb"){|fname| FileUtils.install(fname, extdir, option)}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
--
|
|
4
|
+
Miyako v2.0
|
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
|
6
|
+
|
|
7
|
+
This library is free software; you can redistribute it and/or
|
|
8
|
+
modify it under the terms of the GNU Lesser General Public
|
|
9
|
+
License as published by the Free Software Foundation; either
|
|
10
|
+
version 2.1 of the License, or (at your option) any later version.
|
|
11
|
+
|
|
12
|
+
This library is distributed in the hope that it will be useful,
|
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
15
|
+
Lesser General Public License for more details.
|
|
16
|
+
|
|
17
|
+
You should have received a copy of the GNU Lesser General Public
|
|
18
|
+
License along with this library; if not, write to the Free Software
|
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
20
|
+
++
|
|
21
|
+
=end
|
|
22
|
+
|
|
23
|
+
module Miyako
|
|
24
|
+
#==オーディオ管理モジュール
|
|
25
|
+
#オーディオにはBGM,SE(効果音)の2種類あり、扱えるメソッドが少々違う(別クラスになっている)。
|
|
26
|
+
module Audio
|
|
27
|
+
#==BGM管理クラス
|
|
28
|
+
class BGM
|
|
29
|
+
#===インスタンスを生成する
|
|
30
|
+
#_fname_:: 演奏するBGMファイル名。対応ファイルはwav,mp3,ogg,mid等。
|
|
31
|
+
#_loops_:: ループの可否を指定する。trueのとき繰り返し再生を行う
|
|
32
|
+
#返却値:: 生成したインスタンス
|
|
33
|
+
def initialize(fname, loops = true)
|
|
34
|
+
return if $not_use_audio
|
|
35
|
+
@bgm = SDL::Mixer::Music.load(fname)
|
|
36
|
+
@loops = loops
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
#===音の大きさを設定する
|
|
40
|
+
#_v_:: 音の大きさ。0〜255までの整数。255で最大。
|
|
41
|
+
#返却値:: 自分自身を返す
|
|
42
|
+
def set_volume(v)
|
|
43
|
+
return self if $not_use_audio
|
|
44
|
+
SDL::Mixer.setVolumeMusic(v)
|
|
45
|
+
return self
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
alias_method(:setVolume, :set_volume)
|
|
49
|
+
|
|
50
|
+
#===BGMを演奏する。ブロックが渡されている場合、ブロックの評価中のみ演奏する。
|
|
51
|
+
#_vol_:: 音の大きさ(省略可能)。0〜255までの整数。
|
|
52
|
+
#返却値:: 自分自身を返す
|
|
53
|
+
def play(vol = nil)
|
|
54
|
+
return self if $not_use_audio
|
|
55
|
+
set_volume(vol) if vol
|
|
56
|
+
l = @loops ? -1 : 0
|
|
57
|
+
SDL::Mixer.playMusic(@bgm, l).to_s()
|
|
58
|
+
if block_given?
|
|
59
|
+
yield self
|
|
60
|
+
SDL::Mixer.haltMusic
|
|
61
|
+
end
|
|
62
|
+
return self
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#===フェードインしながら演奏する
|
|
66
|
+
#_msec_:: フェードインの時間。ミリ秒単位。デフォルトは5000ミリ秒(5秒)
|
|
67
|
+
#返却値:: 自分自身を返す
|
|
68
|
+
def fade_in(msec=5000)
|
|
69
|
+
return self if $not_use_audio
|
|
70
|
+
l = @loops ? -1 : 0
|
|
71
|
+
SDL::Mixer.fadeInMusic(@bgm, l, msec)
|
|
72
|
+
return self
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
alias_method(:fadeIn, :fade_in)
|
|
76
|
+
|
|
77
|
+
#===演奏中を示すフラグ
|
|
78
|
+
#返却値:: 演奏中はtrue、停止(一時停止)中はfalseを返す
|
|
79
|
+
def playing?
|
|
80
|
+
return false if $not_use_audio
|
|
81
|
+
return SDL::Mixer.playMusic?
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#===演奏を一時停止する
|
|
85
|
+
#resumeメソッドで一時停止を解除する
|
|
86
|
+
#返却値:: 自分自身を返す
|
|
87
|
+
def pause
|
|
88
|
+
return self if $not_use_audio
|
|
89
|
+
SDL::Mixer.pauseMusic if SDL::Mixer.playMusic?
|
|
90
|
+
return self
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#===一時停止を解除する
|
|
94
|
+
#返却値:: 自分自身を返す
|
|
95
|
+
def resume
|
|
96
|
+
return self if $not_use_audio
|
|
97
|
+
SDL::Mixer.resumeMusic if SDL::Mixer.pauseMusic?
|
|
98
|
+
return self
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#===演奏を停止する
|
|
102
|
+
#pauseメソッドとは違い、完全に停止するため、resumeメソッドは使えない
|
|
103
|
+
#返却値:: 自分自身を返す
|
|
104
|
+
def stop
|
|
105
|
+
return self if $not_use_audio
|
|
106
|
+
SDL::Mixer.haltMusic if SDL::Mixer.playMusic?
|
|
107
|
+
return self
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#===演奏をフェードアウトする
|
|
111
|
+
#_msec_:: フェードアウトする時間。ミリ秒単位。デフォルトは5000ミリ秒
|
|
112
|
+
#_wmode_:: フェードアウトする間、処理を停止するかどうかを示すフラグ。デフォルトはfalse(すぐに次の処理を開始)
|
|
113
|
+
#返却値:: 自分自身を返す
|
|
114
|
+
def fade_out(msec = 5000, wmode = false)
|
|
115
|
+
return self if $not_use_audio
|
|
116
|
+
if SDL::Mixer.playMusic?
|
|
117
|
+
SDL::Mixer.fadeOutMusic(msec)
|
|
118
|
+
SDL::delay(msec) if wmode
|
|
119
|
+
end
|
|
120
|
+
return self
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
#===演奏情報を解放する
|
|
124
|
+
#単なるダミー
|
|
125
|
+
def dispose
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
alias_method(:fadeOut, :fade_out)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
#==効果音管理クラス
|
|
132
|
+
class SE
|
|
133
|
+
|
|
134
|
+
#===同時発音数を変更する
|
|
135
|
+
#デフォルトの同時発音数は8。発音数を減らすと鳴っている音が止まるため注意
|
|
136
|
+
#_channels_:: 変更するチャネル数。0以下を指定するとエラー
|
|
137
|
+
def SE.channels=(channels)
|
|
138
|
+
return if $not_use_audio
|
|
139
|
+
raise MiyakoError, "Illegal Channels! : #{channels}" if channels <= 0
|
|
140
|
+
SDL::Mixer.allocate_channels(channels)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#===インスタンスを生成する
|
|
144
|
+
#_fname_:: 効果音ファイル名。wavファイルのみ対応
|
|
145
|
+
#返却値:: 生成したインスタンス
|
|
146
|
+
def initialize(fname)
|
|
147
|
+
return if $not_use_audio
|
|
148
|
+
@wave = SDL::Mixer::Wave.load(fname)
|
|
149
|
+
@channel = -1
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
#===効果音を鳴らす
|
|
153
|
+
#_vol_:: 音の大きさ(省略可能)。0〜255の整数を設定する
|
|
154
|
+
#返却値:: 自分自身を返す
|
|
155
|
+
def play(vol = nil)
|
|
156
|
+
return self if $not_use_audio
|
|
157
|
+
set_volume(vol) if vol
|
|
158
|
+
@channel = SDL::Mixer.playChannel(-1, @wave, 0)
|
|
159
|
+
if block_given?
|
|
160
|
+
yield self
|
|
161
|
+
SDL::Mixer.halt(@channel)
|
|
162
|
+
end
|
|
163
|
+
return self
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#===効果音が鳴っているかを示すフラグ
|
|
167
|
+
#返却値:: 効果音が鳴っているときはtrue、鳴っていないときはfalseを返す
|
|
168
|
+
def playing?
|
|
169
|
+
return false if $not_use_audio
|
|
170
|
+
return @channel != -1 ? SDL::Mixer.play?(@channel) : false
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
#===効果音を停止する
|
|
174
|
+
#返却値:: 自分自身を返す
|
|
175
|
+
def stop
|
|
176
|
+
return self if $not_use_audio
|
|
177
|
+
SDL::Mixer.halt(@channel) if @channel != -1
|
|
178
|
+
return self
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#===効果音の大きさを設定する
|
|
182
|
+
#_v_:: 音の大きさ。0から255までの整数で示す。
|
|
183
|
+
#返却値:: 自分自身を返す
|
|
184
|
+
def set_volume(v)
|
|
185
|
+
return self if $not_use_audio
|
|
186
|
+
@wave.setVolume(v)
|
|
187
|
+
return self
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
#===演奏情報を解放する
|
|
191
|
+
#単なるダミー
|
|
192
|
+
def dispose
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
alias_method(:setVolume, :set_volume)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
--
|
|
4
|
+
Miyako v2.0
|
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
|
6
|
+
|
|
7
|
+
This library is free software; you can redistribute it and/or
|
|
8
|
+
modify it under the terms of the GNU Lesser General Public
|
|
9
|
+
License as published by the Free Software Foundation; either
|
|
10
|
+
version 2.1 of the License, or (at your option) any later version.
|
|
11
|
+
|
|
12
|
+
This library is distributed in the hope that it will be useful,
|
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
15
|
+
Lesser General Public License for more details.
|
|
16
|
+
|
|
17
|
+
You should have received a copy of the GNU Lesser General Public
|
|
18
|
+
License along with this library; if not, write to the Free Software
|
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
20
|
+
++
|
|
21
|
+
=end
|
|
22
|
+
|
|
23
|
+
module Miyako
|
|
24
|
+
#==位置情報のための構造体クラス
|
|
25
|
+
#位置変更メソッドを追加
|
|
26
|
+
class PointStruct < Struct
|
|
27
|
+
#===位置を変更する(変化量を指定)
|
|
28
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
29
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
|
30
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
|
31
|
+
#返却値:: 自分自身を返す
|
|
32
|
+
def move(dx, dy)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
#===位置を変更する(位置指定)
|
|
36
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
37
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
|
38
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
|
39
|
+
#返却値:: 自分自身を返す
|
|
40
|
+
def move_to(x, y)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#==サイズ情報のための構造体クラス
|
|
45
|
+
#サイズ変更メソッドを追加
|
|
46
|
+
class SizeStruct < Struct
|
|
47
|
+
#===サイズを変更する(変化量を指定)
|
|
48
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
49
|
+
#_dw_:: 幅変更。単位はピクセル
|
|
50
|
+
#_dh_:: 高さ変更。単位はピクセル
|
|
51
|
+
#返却値:: 自分自身を返す
|
|
52
|
+
def resize(dw, dh)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#===サイズを変更する
|
|
56
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
57
|
+
#_w_:: 幅変更。単位はピクセル
|
|
58
|
+
#_h_:: 高さ変更。単位はピクセル
|
|
59
|
+
#返却値:: 自分自身を返す
|
|
60
|
+
def resize_to(w, h)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#==矩形情報のための構造体クラス
|
|
65
|
+
#矩形変更メソッドを追加
|
|
66
|
+
class RectStruct < Struct
|
|
67
|
+
#===位置を変更する(変化量を指定)
|
|
68
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
69
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
|
70
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
|
71
|
+
#返却値:: 自分自身を返す
|
|
72
|
+
def move(dx, dy)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#===位置を変更する(位置指定)
|
|
76
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
77
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
|
78
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
|
79
|
+
#返却値:: 自分自身を返す
|
|
80
|
+
def move_to(x, y)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
#===サイズを変更する(変化量を指定)
|
|
84
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
85
|
+
#_dw_:: 幅変更。単位はピクセル
|
|
86
|
+
#_dh_:: 高さ変更。単位はピクセル
|
|
87
|
+
#返却値:: 自分自身を返す
|
|
88
|
+
def resize(dw, dh)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#===サイズを変更する
|
|
92
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
93
|
+
#_w_:: 幅変更。単位はピクセル
|
|
94
|
+
#_h_:: 高さ変更。単位はピクセル
|
|
95
|
+
#返却値:: 自分自身を返す
|
|
96
|
+
def resize_to(w, h)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#===指定の座標が矩形の範囲内かを問い合わせる
|
|
100
|
+
#_x_:: 指定のx座標
|
|
101
|
+
#_y_:: 指定のy座標
|
|
102
|
+
#返却値:: 座標が矩形の範囲内ならtrueを返す
|
|
103
|
+
def in_range?(x, y)
|
|
104
|
+
return (x >= self[0] && y >= self[1] && x < self[0] + self[2] && y < self[1] + self[3])
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#==Square構造体用クラス
|
|
109
|
+
#位置変更メソッドを追加
|
|
110
|
+
class SquareStruct < Struct
|
|
111
|
+
#===位置を変更する(変化量を指定)
|
|
112
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
113
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
|
114
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
|
115
|
+
#返却値:: 自分自身を返す
|
|
116
|
+
def move(dx, dy)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#===位置を変更する(位置指定)
|
|
120
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
121
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
|
122
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
|
123
|
+
#返却値:: 自分自身を返す
|
|
124
|
+
def move_to(x, y)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
#===サイズを変更する(変化量を指定)
|
|
128
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
129
|
+
#_dw_:: 幅変更。単位はピクセル
|
|
130
|
+
#_dh_:: 高さ変更。単位はピクセル
|
|
131
|
+
#返却値:: 自分自身を返す
|
|
132
|
+
def resize(dw, dh)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
#===サイズを変更する
|
|
136
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
137
|
+
#_w_:: 幅変更。単位はピクセル
|
|
138
|
+
#_h_:: 高さ変更。単位はピクセル
|
|
139
|
+
#返却値:: 自分自身を返す
|
|
140
|
+
def resize_to(w, h)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#===指定の座標が矩形の範囲内かを問い合わせる
|
|
144
|
+
#_x_:: 指定のx座標
|
|
145
|
+
#_y_:: 指定のy座標
|
|
146
|
+
#返却値:: 座標が矩形の範囲内ならtrueを返す
|
|
147
|
+
def in_range?(x, y)
|
|
148
|
+
return (x >= self[0] && y >= self[1] && x <= self[2] && y <= self[3])
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
#==線分の区間情報のための構造体クラス
|
|
153
|
+
#位置変更メソッドを追加
|
|
154
|
+
class SegmentStruct < Struct
|
|
155
|
+
#===Segment構造体インスタンスを生成する
|
|
156
|
+
# 入力した矩形情報(Rect構造体、[x,y,w,h]で表される配列)から、構造体インスタンスを生成する
|
|
157
|
+
#_rect_:: 算出に使用する矩形情報
|
|
158
|
+
#返却値:: 生成したインスタンスを返す
|
|
159
|
+
def SegmentStruct.create(rect)
|
|
160
|
+
return Segment.new([rect[0], rect[0] + rect[2] - 1],
|
|
161
|
+
[rect[1], rect[1] + rect[3] - 1])
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
#===位置を変更する(変化量を指定)
|
|
165
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
166
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
|
167
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
|
168
|
+
#返却値:: 自分自身を返す
|
|
169
|
+
def move(dx, dy)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#===位置を変更する(位置指定)
|
|
173
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
174
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
|
175
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
|
176
|
+
#返却値:: 自分自身を返す
|
|
177
|
+
def move_to(x, y)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
#===サイズを変更する(変化量を指定)
|
|
181
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
182
|
+
#_dw_:: 幅変更。単位はピクセル
|
|
183
|
+
#_dh_:: 高さ変更。単位はピクセル
|
|
184
|
+
#返却値:: 自分自身を返す
|
|
185
|
+
def resize(dw, dh)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
#===サイズを変更する
|
|
189
|
+
# ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
|
190
|
+
#_w_:: 幅変更。単位はピクセル
|
|
191
|
+
#_h_:: 高さ変更。単位はピクセル
|
|
192
|
+
#返却値:: 自分自身を返す
|
|
193
|
+
def resize_to(w, h)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def reset(min_x, max_x, min_y, max_y) #:nodoc:
|
|
197
|
+
x[0], x[1], y[0], y[1] = min_x, max_x, min_y, max_y
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
#===小線分を移動させたとき、大線分が範囲内かどうかを判別する
|
|
201
|
+
# 移動後の小線分が大線分の範囲内にあるかどうかをtrue/falseで取得する
|
|
202
|
+
#_idx_:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
|
|
203
|
+
#_big_segment_:: 大線分の範囲。[min,max]で構成された2要素の配列
|
|
204
|
+
#_d_:: selfの移動量
|
|
205
|
+
#_flag_:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
|
|
206
|
+
#返却値:: 範囲内のときはtrue、範囲外の時はfalseを返す
|
|
207
|
+
def in_bounds?(idx, big_segment, d, flag = false)
|
|
208
|
+
raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx)
|
|
209
|
+
nx = self[idx][0] + d
|
|
210
|
+
nx2 = self[idx][1] + d
|
|
211
|
+
nx, nx2 = nx2, nx if nx > nx2
|
|
212
|
+
return flag ?
|
|
213
|
+
(nx >= big_segment[idx][0] && nx2 <= big_segment[idx][1]) :
|
|
214
|
+
(nx > big_segment[idx][0] && (nx2 - 1) < big_segment[idx][1])
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
#===小線分を移動させたとき、大線分が範囲内かどうかを判別して、その状態によって値を整数で返す
|
|
218
|
+
# 移動後の小線分の範囲が大線分の範囲内のときは0、
|
|
219
|
+
# マイナス方向で範囲外に出るときは-1、
|
|
220
|
+
# プラス方向で出るときは1を返す
|
|
221
|
+
#_idx_:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
|
|
222
|
+
#_big_segment_:: 大線分の範囲。[min,max]で構成された2要素の配列
|
|
223
|
+
#_d_:: selfの移動量
|
|
224
|
+
#_flag_:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
|
|
225
|
+
#返却値:: 判別の結果
|
|
226
|
+
def in_bounds_ex?(idx, big_segment, d, flag = false)
|
|
227
|
+
raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx)
|
|
228
|
+
nx = self[idx][0] + d
|
|
229
|
+
nx2 = self[idx][1] + d - 1
|
|
230
|
+
nx, nx2 = nx2, nx if nx > nx2
|
|
231
|
+
return -1 if (nx < big_segment[idx][0]) || (flag && (nx == big_segment[idx][0]))
|
|
232
|
+
return (nx2 > big_segment[idx][1]) || (flag && (nx2 == big_segment[idx][1])) ? 1 : 0
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
|
|
236
|
+
# 移動後の小線分の範囲が大線分の範囲内のときは0、
|
|
237
|
+
# マイナス方向で範囲外に出るときは1、
|
|
238
|
+
# プラス方向で出るときは-1を返す
|
|
239
|
+
#_idx_:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
|
|
240
|
+
#_big_segment_:: 大線分の範囲。[min,max]で構成された2要素の配列
|
|
241
|
+
#_d_:: selfの移動量
|
|
242
|
+
#_flag_:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
|
|
243
|
+
#返却値:: 判別の結果
|
|
244
|
+
def in_bounds_rev?(idx, big_segment, d, flag = false)
|
|
245
|
+
raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx)
|
|
246
|
+
nx = self[idx][0] + d
|
|
247
|
+
nx2 = self[idx][1] + d - 1
|
|
248
|
+
nx, nx2 = nx2, nx if nx > nx2
|
|
249
|
+
return 1 if (nx < big_segment[idx][0]) || (flag && (nx == big_segment[idx][0]))
|
|
250
|
+
return (nx2 > big_segment[idx][1]) || (flag && (nx2 == big_segment[idx][1])) ? -1 : 0
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
|
|
254
|
+
# 移動量が0のときは0、
|
|
255
|
+
# 移動後の小線分の範囲が大線分の範囲内のときは1、
|
|
256
|
+
# 範囲外に出るときは-1を返す
|
|
257
|
+
#_idx_:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
|
|
258
|
+
#_big_segment_:: 大線分の範囲。[min,max]で構成された2要素の配列
|
|
259
|
+
#_d_:: selfの移動量
|
|
260
|
+
#_flag_:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
|
|
261
|
+
#返却値:: 判別の結果
|
|
262
|
+
def in_bounds_rev_ex?(idx, big_segment, d, flag = false)
|
|
263
|
+
raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx)
|
|
264
|
+
return 0 if d == 0
|
|
265
|
+
dir = (d <=> 0)
|
|
266
|
+
nx = self[idx][0] + d
|
|
267
|
+
nx2 = self[idx][1] + d - 1
|
|
268
|
+
nx, nx2 = nx2, nx if nx > nx2
|
|
269
|
+
return -dir if (nx < big_segment[idx][0]) || (flag && (nx == big_segment[idx][0]))
|
|
270
|
+
return (nx2 > big_segment[idx][1]) || (flag && (nx2 == big_segment[idx][1])) ? -dir : dir
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
#==座標などを構成するために使用する構造体
|
|
275
|
+
#_x_:: X座標の値
|
|
276
|
+
#_y_:: Y座標の値
|
|
277
|
+
Point = PointStruct.new(:x, :y)
|
|
278
|
+
|
|
279
|
+
#==サイズなどを構成するために使用する構造体
|
|
280
|
+
#_w_:: 横幅
|
|
281
|
+
#_h_:: 高さ
|
|
282
|
+
Size = SizeStruct.new(:w, :h)
|
|
283
|
+
|
|
284
|
+
#==矩形などを構成するために使用する構造体
|
|
285
|
+
#_x_:: X座標の値
|
|
286
|
+
#_y_:: Y座標の値
|
|
287
|
+
#_w_:: 横幅
|
|
288
|
+
#_h_:: 高さ
|
|
289
|
+
Rect = RectStruct.new(:x, :y, :w, :h)
|
|
290
|
+
|
|
291
|
+
#==矩形などを構成するために使用する構造体
|
|
292
|
+
#_left_:: 左上X座標の値
|
|
293
|
+
#_top_:: 左上Y座標の値
|
|
294
|
+
#_right_:: 右下X座標の値
|
|
295
|
+
#_bottom_:: 右下Y座標の値
|
|
296
|
+
Square = SquareStruct.new(:left, :top, :right, :bottom)
|
|
297
|
+
|
|
298
|
+
#==線分を構成するために使用する構造体
|
|
299
|
+
#_x_:: X方向の線分([min_x, max_x]で構成される配列)
|
|
300
|
+
#_y_:: Y方向の線分([min_y, max_y]で構成される配列)
|
|
301
|
+
Segment = SegmentStruct.new(:x, :y)
|
|
302
|
+
|
|
303
|
+
#==色を管理するクラス
|
|
304
|
+
#
|
|
305
|
+
#色情報は、[r(赤),g(緑),b(青),a(透明度)]、[r,g,b,a(透明度)]の2種類の配列
|
|
306
|
+
#
|
|
307
|
+
#それぞれの要素の値は0〜255の範囲
|
|
308
|
+
#
|
|
309
|
+
#4要素必要な色情報に3要素の配列を渡すと、自動的に4要素目(値は255)が挿入される
|
|
310
|
+
#
|
|
311
|
+
#(注)本クラスで採用する透明度と、画像が持つ透明度とは別物
|
|
312
|
+
class Color
|
|
313
|
+
@@symbol2color = {:black => [ 0, 0, 0, 255],
|
|
314
|
+
:white => [255,255,255, 255],
|
|
315
|
+
:blue => [ 0, 0,255, 255],
|
|
316
|
+
:green => [ 0,255, 0, 255],
|
|
317
|
+
:red => [255, 0, 0, 255],
|
|
318
|
+
:cyan => [ 0,255,255, 255],
|
|
319
|
+
:purple => [255, 0,255, 255],
|
|
320
|
+
:yellow => [255,255, 0, 255],
|
|
321
|
+
:light_gray => [200,200,200, 255],
|
|
322
|
+
:half_gray => [128,128,128, 255],
|
|
323
|
+
:half_blue => [ 0, 0,128, 255],
|
|
324
|
+
:half_green => [ 0,128, 0, 255],
|
|
325
|
+
:half_red => [128, 0, 0, 255],
|
|
326
|
+
:half_cyan => [ 0,128,128, 255],
|
|
327
|
+
:half_purple => [128, 0,128, 255],
|
|
328
|
+
:half_yellow => [128,128, 0, 255],
|
|
329
|
+
:dark_gray => [ 80, 80, 80, 255],
|
|
330
|
+
:dark_blue => [ 0, 0, 80, 255],
|
|
331
|
+
:dark_green => [ 0, 80, 0, 255],
|
|
332
|
+
:dark_red => [ 80, 0, 0, 255],
|
|
333
|
+
:dark_cyan => [ 0, 80, 80, 255],
|
|
334
|
+
:dark_purple => [ 80, 0, 80, 255],
|
|
335
|
+
:dark_yellow => [ 80, 80, 0, 255]}
|
|
336
|
+
@@symbol2color.default = nil
|
|
337
|
+
|
|
338
|
+
#===シンボルから色情報を取得する
|
|
339
|
+
#_name_::色に対応したシンボル(以下の一覧参照)。存在しないシンボルを渡したときはエラーを返す
|
|
340
|
+
#返却値::シンボルに対応した4要素の配列
|
|
341
|
+
#
|
|
342
|
+
#シンボル:: 色配列([赤,緑,青,透明度])
|
|
343
|
+
#:black:: [ 0, 0, 0, 255]
|
|
344
|
+
#:white:: [255,255,255, 255]
|
|
345
|
+
#:blue:: [ 0, 0,255, 255]
|
|
346
|
+
#:green:: [ 0,255, 0, 255]
|
|
347
|
+
#:red:: [255, 0, 0, 255]
|
|
348
|
+
#:cyan:: [ 0,255,255, 255]
|
|
349
|
+
#:purple:: [255, 0,255, 255]
|
|
350
|
+
#:yellow:: [255,255, 0, 255]
|
|
351
|
+
#:light_gray:: [200,200,200, 255]
|
|
352
|
+
#:half_gray:: [128,128,128, 255]
|
|
353
|
+
#:half_blue:: [ 0, 0,128, 255]
|
|
354
|
+
#:half_green:: [ 0,128, 0, 255]
|
|
355
|
+
#:half_red:: [128, 0, 0, 255]
|
|
356
|
+
#:half_cyan:: [ 0,128,128, 255]
|
|
357
|
+
#:half_purple:: [128, 0,128, 255]
|
|
358
|
+
#:half_yellow:: [128,128, 0, 255]
|
|
359
|
+
#:dark_gray:: [ 80, 80, 80, 255]
|
|
360
|
+
#:dark_blue:: [ 0, 0, 80, 255]
|
|
361
|
+
#:dark_green:: [ 0, 80, 0, 255]
|
|
362
|
+
#:dark_red:: [ 80, 0, 0, 255]
|
|
363
|
+
#:dark_cyan:: [ 0, 80, 80, 255]
|
|
364
|
+
#:dark_purple:: [ 80, 0, 80, 255]
|
|
365
|
+
#:dark_yellow:: [ 80, 80, 0, 255]
|
|
366
|
+
def Color.[](name, alpha = nil)
|
|
367
|
+
c = (@@symbol2color[name.to_sym] or raise MiyakoError, "Illegal Color Name! : #{name}")
|
|
368
|
+
c[3] = alpha if alpha
|
|
369
|
+
return c
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
#===Color.[]メソッドで使用できるシンボルと色情報との対を登録する
|
|
373
|
+
#_name_:: 色に対応させるシンボル
|
|
374
|
+
#_value_:: 色情報を示す3〜4要素の配列。3要素のときは4要素目を自動的に追加する
|
|
375
|
+
def Color.[]=(name, value)
|
|
376
|
+
@@symbol2color[name.to_sym] = value
|
|
377
|
+
@@symbol2color[name.to_sym] << 255 if value.length == 3
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
#===様々な形式のデータを色情報に変換する
|
|
381
|
+
#_v_::変換対象のインスタンス。変換可能な内容は以下の一覧参照
|
|
382
|
+
#_alpha_::透明度。デフォルトはnil
|
|
383
|
+
#
|
|
384
|
+
#インスタンス:: 書式
|
|
385
|
+
#配列:: 最低3要素の数値の配列
|
|
386
|
+
#文字列:: ”#RRGGBB"で示す16進数の文字列、もしくは"red"、"black"など。使える文字列はColor.[]で使えるシンボルに対応
|
|
387
|
+
#数値:: 32bitの値を8bitずつ割り当て(aaaaaaaarrrrrrrrggggggggbbbbbbbb)
|
|
388
|
+
#シンボル:: Color.[]と同じ
|
|
389
|
+
def Color::to_rgb(v, alpha = nil)
|
|
390
|
+
c = (v.to_miyako_color or raise MiyakoError, "Illegal parameter")
|
|
391
|
+
c[3] = alpha if alpha
|
|
392
|
+
return c
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
#===色情報をColor.[]メソッドで使用できるシンボルと色情報との対を登録する
|
|
396
|
+
#_cc_:: 色情報(シンボル、文字列)
|
|
397
|
+
#_value_:: 色情報を示す3〜4要素の配列。3要素のときは4要素目を自動的に追加する
|
|
398
|
+
def Color::to_s(cc)
|
|
399
|
+
c = to_rgb(cc)
|
|
400
|
+
return "[#{c[0]},#{c[1]},#{c[2]},#{c[3]}]"
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
#タイマーを管理するクラス
|
|
405
|
+
class WaitCounter
|
|
406
|
+
SECOND2TICK = 1000
|
|
407
|
+
|
|
408
|
+
#WaitCounterインスタンス固有の名前
|
|
409
|
+
#デフォルトはインスタンスIDを文字列化したもの
|
|
410
|
+
attr_accessor :name
|
|
411
|
+
|
|
412
|
+
def WaitCounter.get_second_to_tick(s) #:nodoc:
|
|
413
|
+
return (SECOND2TICK * s).to_i
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
#===インスタンスを生成する
|
|
417
|
+
#_seconds_:: タイマーとして設定する秒数(実数で指定可能)
|
|
418
|
+
#_name_:: インスタンス固有の名称。デフォルトはnil
|
|
419
|
+
#(nilを渡した場合、インスタンスIDを文字列化したものが名称になる)
|
|
420
|
+
#返却値:: 生成されたインスタンス
|
|
421
|
+
def initialize(seconds, name=nil)
|
|
422
|
+
@seconds = seconds
|
|
423
|
+
@name = name ? name : __id__.to_s
|
|
424
|
+
@wait = WaitCounter.get_second_to_tick(@seconds)
|
|
425
|
+
@st = 0
|
|
426
|
+
@counting = false
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
#===設定されているウェイトの長さを求める
|
|
430
|
+
#ウェイトの長さをミリセカンド単位で取得する
|
|
431
|
+
#返却値:: ウェイトの長さ
|
|
432
|
+
def length
|
|
433
|
+
return @wait
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
#===残りウェイトの長さを求める
|
|
437
|
+
#タイマー実行中のときウェイトの長さをミリセカンド単位で取得する
|
|
438
|
+
#返却値:: 残りウェイトの長さ(実行していない時はウェイトの長さ)
|
|
439
|
+
def remind
|
|
440
|
+
return @wait unless @counting
|
|
441
|
+
cnt = SDL.getTicks - @st
|
|
442
|
+
return @wait < cnt ? 0 : @wait - cnt
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
#===タイマー処理を開始する
|
|
446
|
+
#返却値:: 自分自身を返す
|
|
447
|
+
def start
|
|
448
|
+
@st = SDL.getTicks
|
|
449
|
+
@counting = true
|
|
450
|
+
return self
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
#===タイマー処理を停止する
|
|
454
|
+
#一旦タイマーを停止すると、復帰できない(一時停止ではない)
|
|
455
|
+
#返却値:: 自分自身を返す
|
|
456
|
+
def stop
|
|
457
|
+
@counting = false
|
|
458
|
+
@st = 0
|
|
459
|
+
return self
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
def wait_inner(f) #:nodoc:
|
|
463
|
+
return !f unless @counting
|
|
464
|
+
t = SDL.getTicks
|
|
465
|
+
return f unless (t - @st) >= @wait
|
|
466
|
+
@counting = false
|
|
467
|
+
return !f
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
private :wait_inner
|
|
471
|
+
|
|
472
|
+
#===タイマー処理中かを返す
|
|
473
|
+
#タイマー処理中ならばtrue、停止中ならばfalseを返す
|
|
474
|
+
#返却値:: タイマー処理中かどうかを示すフラグ
|
|
475
|
+
def waiting?
|
|
476
|
+
return wait_inner(true)
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
#===タイマー処理が終了したかを返す
|
|
480
|
+
#タイマー処理が終了したらtrue、処理中ならfalseを返す
|
|
481
|
+
#返却値:: タイマー処理が終わったかどうかを示すフラグ
|
|
482
|
+
def finish?
|
|
483
|
+
return wait_inner(false)
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
def wait #:nodoc:
|
|
487
|
+
st = SDL.getTicks
|
|
488
|
+
t = SDL.getTicks
|
|
489
|
+
until (t - st) >= @wait do
|
|
490
|
+
t = SDL.getTicks
|
|
491
|
+
end
|
|
492
|
+
return self
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
#===インスタンスないで所持している領域を開放する
|
|
496
|
+
#(現段階ではダミー)
|
|
497
|
+
def dispose
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
# for duck typing
|
|
503
|
+
class Object
|
|
504
|
+
def to_miyako_color #:nodoc:
|
|
505
|
+
raise Miyako::MiyakoError, "Illegal color parameter class!"
|
|
506
|
+
end
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
class String
|
|
510
|
+
def to_miyako_color #:nodoc:
|
|
511
|
+
case self
|
|
512
|
+
when /\A\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*(\d+)\s*\]\z/
|
|
513
|
+
#4要素の配列形式
|
|
514
|
+
return [$1.to_i, $2.to_i, $3.to_i, $4.to_i]
|
|
515
|
+
when /\A\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\z/
|
|
516
|
+
#4個の数列形式
|
|
517
|
+
return [$1.to_i, $2.to_i, $3.to_i, $4.to_i]
|
|
518
|
+
when /\A\#([\da-fA-F]{8})\z/
|
|
519
|
+
#HTML形式(#RRGGBBAA)
|
|
520
|
+
return [$1[0,2].hex, $1[2,2].hex, $1[4,2].hex, $1[6,2].hex]
|
|
521
|
+
when /\A\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\]\z/
|
|
522
|
+
#3要素の配列形式
|
|
523
|
+
return [$1.to_i, $2.to_i, $3.to_i, 255]
|
|
524
|
+
when /\A\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\z/
|
|
525
|
+
#3個の数列方式
|
|
526
|
+
[$1.to_i, $2.to_i, $3.to_i, 255]
|
|
527
|
+
when /\A\#([\da-fA-F]{6})\z/
|
|
528
|
+
#HTML形式(#RRGGBB)
|
|
529
|
+
return [$1[0,2].hex, $1[2,2].hex, $1[4,2].hex, 255]
|
|
530
|
+
else return self.to_sym.to_miyako_color
|
|
531
|
+
end
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
class Symbol
|
|
536
|
+
def to_miyako_color #:nodoc:
|
|
537
|
+
return Miyako::Color[self]
|
|
538
|
+
end
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
class Integer
|
|
542
|
+
def to_miyako_color #:nodoc:
|
|
543
|
+
return [(self >> 16) & 0xff, (self >> 8) & 0xff, self & 0xff, (self >> 24) & 0xff]
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
class Array
|
|
548
|
+
def to_miyako_color #:nodoc:
|
|
549
|
+
raise Miyako::MiyakoError, "Color Array needs more than 3 elements : #{self.length} elements" if self.length < 3
|
|
550
|
+
return (self[0,3] << 255) if self.length == 3
|
|
551
|
+
return self[0,4]
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
#=begin rdoc
|
|
556
|
+
#==1個のインスタンスでイテレータを実装できるモジュール
|
|
557
|
+
#=end
|
|
558
|
+
module SingleEnumerable
|
|
559
|
+
include Enumerable
|
|
560
|
+
|
|
561
|
+
#===ブロックの処理を実行する
|
|
562
|
+
#返却値:: 自分自身を返す
|
|
563
|
+
def each
|
|
564
|
+
yield self
|
|
565
|
+
return self
|
|
566
|
+
end
|
|
567
|
+
|
|
568
|
+
#===sizeメソッドと同様
|
|
569
|
+
#返却値:: sizeメソッドと同様
|
|
570
|
+
def length
|
|
571
|
+
return 1
|
|
572
|
+
end
|
|
573
|
+
end
|