Class: Miyako::Yuki

Inherits:
Object show all
Includes:
Animation, SpriteBase
Defined in:
lib/Miyako/API/yuki.rb

Overview

Yuki本体クラス

Yukiの内容をオブジェクト化したクラス Yukiのプロット処理を外部メソッドで管理可能 プロットは、引数を一つ(Yuki2クラスのインスタンス)を取ったメソッドもしくはブロック として記述する。

Defined Under Namespace

Classes: Canceled, Command, CommandEX

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Animation

[], []=, anim_hash, reset, #reset, start, stop, update, update_animation

Methods included from SpriteBase

#bitmap, #image_rect, #image_size, #oh, #ow, #ox, #oy, #part_rect, #rect, #render_xy, #render_xy_to, #to_sprite, #to_unit

Constructor Details

#initialize(*params, &proc) ⇒ Yuki

Yukiを初期化する

ブロック引数として、テキストボックスの変更などの処理をブロック内に記述することが出来る。 引数の数とブロック引数の数が違っていれば例外が発生する

params

ブロックに渡す引数リスト(ただし、ブロックを渡しているときのみに有効)

Raises:



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/Miyako/API/yuki.rb', line 146

def initialize(*params, &proc)
  @yuki = { }
  @over_yuki = nil
  @under_yuki = nil
  @over_exec = false
  @text_box = nil
  @command_box = nil
  @text_box_all = nil
  @command_box_all = nil

  @executing = false

  @exec_plot = nil

  @pausing = false
  @selecting = false
  @waiting = false

  @pause_release = false
  @select_ok = false
  @select_cancel = false
  @select_amount = [0, 0]
  @cencel = nil
  @mouse_amount = nil

  @mouse_enable = true

  @result = nil
  @plot_result = nil

  @update_inner = lambda{|yuki|}
  @update_text  = lambda{|yuki, ch|}
  @update_cr    = lambda{|yuki|}
  @update_clear = lambda{|yuki|}

  @parts = {}
  @visibles = SpriteList.new
  @pre_visibles = SpriteList.new
  @bgs = SpriteList.new
  @vars = {}
  @visible = true

  @executing_fiber = nil

  @text_methods = {:char => self.method(:text_by_char),
                  :string => self.method(:text_by_str) }
  @text_method_name = :char

  @valign = :middle

  @release_checks_default = [
    lambda{ Input.pushed_any?(:btn1, :spc) },
    lambda{ @mouse_enable && Input.click?(:left) }
  ]
  @release_checks = @release_checks_default.dup

  @ok_checks_default = [
    lambda{ Input.pushed_any?(:btn1, :spc) },
    lambda{ @mouse_enable && self.commandbox.attach_any_command?(*Input.get_mouse_position) && Input.click?(:left) }
  ]
  @ok_checks = @ok_checks_default.dup

  @cancel_checks_default = [
    lambda{ Input.pushed_any?(:btn2, :esc) },
    lambda{ @mouse_enable && Input.click?(:right) }
  ]
  @cancel_checks = @cancel_checks_default.dup

  @key_amount_proc   = lambda{ Input.pushed_amount }
  @mouse_amount_proc = lambda{ Input.mouse_cursor_inner? ? Input.get_mouse_position : nil }

  @pre_pause    = []
  @pre_command  = []
  @pre_cancel   = []
  @post_pause   = []
  @post_command = []
  @post_cancel  = []
  @on_disable   = []
  @selecting_procs = []

  @is_outer_height = self.method(:is_outer_height)

  @now_page = nil
  @first_page = nil

  raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
  instance_exec(*params, &proc) if block_given?
end

Instance Attribute Details

#bgsObject (readonly)

Returns the value of attribute bgs.



93
94
95
# File 'lib/Miyako/API/yuki.rb', line 93

def bgs
  @bgs
end

#cancel_checksObject (readonly)

release_checks

ポーズ解除を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

ok_checks

コマンド選択決定を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

cancel_checks

コマンド選択解除(キャンセル)を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。



100
101
102
# File 'lib/Miyako/API/yuki.rb', line 100

def cancel_checks
  @cancel_checks
end

#ok_checksObject (readonly)

release_checks

ポーズ解除を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

ok_checks

コマンド選択決定を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

cancel_checks

コマンド選択解除(キャンセル)を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。



100
101
102
# File 'lib/Miyako/API/yuki.rb', line 100

def ok_checks
  @ok_checks
end

#on_disableObject (readonly)

Returns the value of attribute on_disable.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def on_disable
  @on_disable
end

#post_cancelObject (readonly)

Returns the value of attribute post_cancel.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def post_cancel
  @post_cancel
end

#post_commandObject (readonly)

Returns the value of attribute post_command.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def post_command
  @post_command
end

#post_pauseObject (readonly)

Returns the value of attribute post_pause.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def post_pause
  @post_pause
end

#pre_cancelObject (readonly)

Returns the value of attribute pre_cancel.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def pre_cancel
  @pre_cancel
end

#pre_commandObject (readonly)

Returns the value of attribute pre_command.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def pre_command
  @pre_command
end

#pre_pauseObject (readonly)

Returns the value of attribute pre_pause.



101
102
103
# File 'lib/Miyako/API/yuki.rb', line 101

def pre_pause
  @pre_pause
end

#pre_visiblesObject (readonly)

Returns the value of attribute pre_visibles.



93
94
95
# File 'lib/Miyako/API/yuki.rb', line 93

def pre_visibles
  @pre_visibles
end

#release_checksObject (readonly)

release_checks

ポーズ解除を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

ok_checks

コマンド選択決定を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。

cancel_checks

コマンド選択解除(キャンセル)を問い合わせるブロックの配列。

callメソッドを持ち、true/falseを返すインスタンスを配列操作で追加・削除できる。



100
101
102
# File 'lib/Miyako/API/yuki.rb', line 100

def release_checks
  @release_checks
end

#selecting_procsObject (readonly)

selecting_procs

コマンド選択時に行うブロックの配列。

ブロックは4つの引数を取る必要がある。 (1)コマンド決定ボタンを押した?(true/false) (2)キャンセルボタンを押した?(true/false) (3)キーパッドの移動量を示す配列() (4)マウスの位置を示す配列() callメソッドを持つブロックが使用可能。



109
110
111
# File 'lib/Miyako/API/yuki.rb', line 109

def selecting_procs
  @selecting_procs
end

#update_clear(yuki) ⇒ Object

Yuki#clear呼び出し時に行わせる処理を実装するテンプレートメソッド

但し、メソッド本体は、update_clear=メソッドで設定する必要がある

yuki

実行中のYukiクラスインスタンス



88
89
# File 'lib/Miyako/API/yuki.rb', line 88

def update_clear(yuki)
end

#update_cr(yuki) ⇒ Object

Yuki#cr呼び出し時に行わせる処理を実装するテンプレートメソッド

但し、メソッド本体は、update_cr=メソッドで設定する必要がある

yuki

実行中のYukiクラスインスタンス



82
83
# File 'lib/Miyako/API/yuki.rb', line 82

def update_cr(yuki)
end

#update_inner(yuki) ⇒ Object

Yuki#update実行中に行わせる処理を実装するテンプレートメソッド

但し、メソッド本体は、update_inner=メソッドで設定する必要がある

yuki

実行中のYukiクラスインスタンス



66
67
# File 'lib/Miyako/API/yuki.rb', line 66

def update_inner(yuki)
end

#update_text(yuki, ch) ⇒ Object

Yuki#text実行中に行わせる処理を実装するテンプレートメソッド

update_textテンプレートメソッドは、textメソッドで渡した文字列全体ではなく、 内部で1文字ずつ分割して、その字が処理されるごとに呼ばれる。 そのため、引数chで入ってくるのは、分割された1文字となる。 但し、メソッド本体は、update_text=メソッドで設定する必要がある

yuki

実行中のYukiクラスインスタンス

ch

textメソッドで処理中の文字(分割済みの1文字)



76
77
# File 'lib/Miyako/API/yuki.rb', line 76

def update_text(yuki, ch)
end

#valignObject (readonly)

Returns the value of attribute valign.



93
94
95
# File 'lib/Miyako/API/yuki.rb', line 93

def valign
  @valign
end

#visibleObject

Returns the value of attribute visible.



91
92
93
# File 'lib/Miyako/API/yuki.rb', line 91

def visible
  @visible
end

#visiblesObject (readonly)

Returns the value of attribute visibles.



93
94
95
# File 'lib/Miyako/API/yuki.rb', line 93

def visibles
  @visibles
end

Class Method Details

.add_method(name, &block) ⇒ Object

Yukiにメソッドを追加する(すべてのYukiインスタンスに適応)

ブロックを渡すことで、Yukiに新しいメソッドを追加できる。 追加したメソッドは、すべてのYukiインスタンスで利用可能となる。 コンテキストはYukiクラスのインスタンスとなるため、Yukiスクリプトと同じ感覚でメソッドを追加できる。 ただし、すでに追加したメソッド(もしくはYukiクラスですでに追加されているメソッド)を追加しようとすると例外が発生する

name

ブロックに渡す引数リスト

block

メソッドとして実行させるブロック

Raises:



119
120
121
122
123
124
# File 'lib/Miyako/API/yuki.rb', line 119

def Yuki.add_method(name, &block)
  name = name.to_sym
  raise MiyakoError, "Already added method! : #{name.to_s}" if self.methods.include?(name)
  define_method(name, block)
  return nil
end

Instance Method Details

#add_method(name, &block) ⇒ Object

Yukiにメソッドを追加する(指定のYukiインスタンスのみ適応)

ブロックを渡すことで、Yukiに新しいメソッドを追加できる。 追加したメソッドは、指定したYukiインスタンスのみ利用可能となる。 コンテキストはYukiクラスのインスタンスとなるため、Yukiスクリプトと同じ感覚でメソッドを追加できる。 ただし、すでに追加したメソッド(もしくはYukiクラスですでに追加されているメソッド)を追加しようとすると例外が発生する

name

ブロックに渡す引数リスト

block

メソッドとして実行させるブロック

Raises:



134
135
136
137
138
139
# File 'lib/Miyako/API/yuki.rb', line 134

def add_method(name, &block)
  name = name.to_sym
  raise MiyakoError, "Already added method! : #{name.to_s}" if self.methods.include?(name)
  self.define_singleton_method(name, block)
  return nil
end

#bg_hide(*names) ⇒ Object

パーツで指定した背景を隠蔽する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画させないよう指定する

names

パーツ名(シンボル)、複数指定可能

返却値

自分自身を返す



638
639
640
641
642
643
644
645
# File 'lib/Miyako/API/yuki.rb', line 638

def bg_hide(*names)
  if names.length == 0
    @bgs.each_value{|sprite| sprite.hide}
    return self
  end
  names.each{|name| @bgs[name].hide }
  return self
end

#bg_show(*names) ⇒ Object

パーツで指定した背景を表示する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画する すでにshowメソッドで表示指定している場合は、先頭に表示させる

names

パーツ名(シンボル)、複数指定可能(指定した順番に描画される)

返却値

自分自身を返す



621
622
623
624
625
626
627
628
629
630
631
# File 'lib/Miyako/API/yuki.rb', line 621

def bg_show(*names)
  if names.length == 0
    @bgs.each_value{|sprite| sprite.show}
    return self
  end
  names.each{|name|
    @bgs.add(name, @parts[name]) unless @bgs.include?(name)
    @bgs[name].show
  }
  return self
end

#bgs_namesObject

現在描画対象のパーツ名のリストを取得する

[Yukiスクリプトとして利用可能]

現在描画しているパーツ名の配列を参照する。 実体のインスタンスは、partsメソッドで参照できるハッシュの値として格納されている。 Yuki#renderで描画する際、配列の先頭から順に、要素に対応するインスタンスを描画する(つまり、配列の後ろにある方が前に描画される (例):[:a, :b, :c]の順に並んでいたら、:cが指すインスタンスが一番前に描画される。

返却値

描画対象リスト



414
415
416
# File 'lib/Miyako/API/yuki.rb', line 414

def bgs_names
  @bgs.names
end

#bold(&block) ⇒ Object

太文字を描画する

[Yukiスクリプトとして利用可能]

ブロック内で指定した文字列を太文字で表示する (使用すると文字の端が切れてしまう場合あり!)

返却値

自分自身を返す



1246
1247
1248
1249
# File 'lib/Miyako/API/yuki.rb', line 1246

def bold(&block)
  @text_box.font_bold{ text block.call }
  return self
end

#box_shared?Boolean

コマンドボックスとテキストボックスを共用しているか問い合わせる

[Yukiスクリプトとして利用可能]

テキストボックスとコマンドボックスを共用しているときはtrueを返す 共用していなければfalseを返す

返却値

true/false

Returns:

  • (Boolean)


536
537
538
# File 'lib/Miyako/API/yuki.rb', line 536

def box_shared?
  @text_box_all.object_id == @command_box_all.object_id
end

#call_plot(plot_proc = nil, &plot_block) ⇒ Object

プロット処理中に別のプロットを呼び出す

呼び出し可能なプロットは以下の2種類。(上から優先度が高い順)

1)引数prot_proc(Procクラスのインスタンス)

2)引数として渡したブロック

plot_proc

プロットの実行部をインスタンス化したオブジェクト

返却値

プロットの実行結果を返す



909
910
911
912
# File 'lib/Miyako/API/yuki.rb', line 909

def call_plot(plot_proc = nil, &plot_block)
  return plot_proc ? self.instance_exec(&plot_proc) :
                     self.instance_exec(&plot_block)
end

#cancel_checks_during(procs, pre_procs = [], post_procs = []) ⇒ Object

ブロック評価中、コマンド選択キャンセル問い合わせメソッド配列を置き換える

同時に、コマンド選択開始時処理(Yuki#pre_cancel)、コマンド選択終了時処理(Yuki#post_cancel)を引数で設定できる。 ブロックの評価が終われば、メソッド配列・コマンド選択開始時処理・コマンド選択終了時処理を元に戻す

procs

置き換えるメソッド配列(callメソッドを持ち、true/falseを返すメソッドの配列)

pre_proc

コマンド選択開始時に実行させるProc(デフォルトは[](何もしない))

post_proc

コマンド選択キャンセル時に実行させるProc(デフォルトは[](何もしない))

返却値

自分自身を返す

Raises:



1007
1008
1009
1010
1011
1012
1013
1014
# File 'lib/Miyako/API/yuki.rb', line 1007

def cancel_checks_during(procs, pre_procs = [], post_procs = [])
  raise MiyakoProcError, "Can't find block!" unless block_given?
  backup = [@cancel_checks, @pre_cancel, @post_cancel]
  @cancel_checks, @pre_cancel, @post_cancel = procs, pre_proc, post_proc
  yield
  @cancel_checks, @pre_cancel, @post_cancel = backup.pop(3)
  return self
end

#canceled?Boolean

コマンド選択がキャンセルされたときの結果を返す

[Yukiスクリプトとして利用可能]
返却値

キャンセルされたときはtrue、されていないときはfalseを返す

Returns:

  • (Boolean)


1056
1057
1058
# File 'lib/Miyako/API/yuki.rb', line 1056

def canceled?
  return @result == @cancel
end

#clearObject

テキストボックスの内容を消去する

[Yukiスクリプトとして利用可能]

開業後にupdate_clearテンプレートメソッドが1回呼ばれる

返却値

自分自身を返す



1287
1288
1289
1290
1291
# File 'lib/Miyako/API/yuki.rb', line 1287

def clear
  @text_box.clear
  @update_clear.call(self)
  return self
end

#color(color, &block) ⇒ Object

文字色を変更する

[Yukiスクリプトとして利用可能]

ブロック内で指定した文字列を、指定の色で描画する

color

文字色

返却値

自分自身を返す



1208
1209
1210
1211
# File 'lib/Miyako/API/yuki.rb', line 1208

def color(color, &block)
  @text_box.color_during(Color.to_rgb(color)){ text block.call }
  return self
end

#command(command_list, cancel_to = Miyako::Yuki::Canceled, &chain_block) ⇒ Object

コマンドを表示する

[Yukiスクリプトとして利用可能]

表示対象のコマンド群をCommand構造体の配列で示す。 キャンセルのときの結果も指定可能(既定ではキャンセル不可状態) body_selectedをnilにした場合は、bodyと同一となる body_selectedを文字列を指定した場合は、文字色が赤色になることに注意 引数無しのブロックを渡せば、コマンド選択開始前に、決定判別・キャンセル判別に必要な前処理を施すことが出来る 選択中、update_innerメソッドを呼び出し、続けて、処理をYuki#startもしくはYuki#update呼び出し直後に戻す Yuki#updateが呼び出されても選択中の場合は、再び上記の処理を繰り返す

command_list

表示するコマンド群。各要素はCommand/CommandEx構造体の配列

cancel_to

キャンセルボタンを押したときの結果。デフォルトはnil(キャンセル無効)

chain_block

コマンドの表示方法。TextBox#create_choices_chainメソッド参照

返却値

自分自身を返す

Raises:



1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
# File 'lib/Miyako/API/yuki.rb', line 1344

def command(command_list, cancel_to = Miyako::Yuki::Canceled, &chain_block)
  raise MiyakoValueError, "Yuki Error! Commandbox is not selected!" unless @command_box
  @cancel = cancel_to

  choices = []
  command_list.each{|cm|
    if (cm[:condition] == nil || cm[:condition].call)
      cm_array = [cm[:body], cm[:body_selected], cm[:body_disable], cm[:enable], cm[:result]]
      methods = cm.methods
      cm_array << (methods.include?(:end_select_proc) ? cm[:end_select_proc] : nil)
      choices.push(cm_array)
    end
  }
  return self if choices.length == 0

  @pre_command.each{|proc| proc.call}
  @pre_cancel.each{|proc| proc.call}
  yield if block_given?
  @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
  @command_box.command(@command_box.create_choices_chain(choices, &chain_block))
  @result = nil
  @selecting = true
  while @selecting
    @update_inner.call(self)
    Fiber.yield
  end
  @post_cancel.each{|proc| proc.call}
  @post_command.each{|proc| proc.call}
  return self
end

#commandboxObject

コマンドボックスを取得する

[Yukiスクリプトとして利用可能]

コマンドボックスが登録されていないときはnilを返す

返却値

コマンドボックス



479
480
481
# File 'lib/Miyako/API/yuki.rb', line 479

def commandbox
  return @command_box
end

#commandbox_allObject

コマンドボックス全体を取得する

[Yukiスクリプトとして利用可能]

コマンドボックスが登録されていないときはnilを返す

返却値

コマンドボックス全体



495
496
497
# File 'lib/Miyako/API/yuki.rb', line 495

def commandbox_all
  return @command_box_all
end

#condition(&block) ⇒ Object

ブロックを条件として設定する

[Yukiスクリプトとして利用可能]

メソッドをMethodクラスのインスタンスに変換する

block

シナリオインスタンスに変換したいメソッド名(シンボル)

返却値

シナリオインスタンスに変換したメソッド



1065
1066
1067
# File 'lib/Miyako/API/yuki.rb', line 1065

def condition(&block)
  return block
end

#cr(tm = 1) ⇒ Object

改行を行う

[Yukiスクリプトとして利用可能]

開業後にupdate_crテンプレートメソッドが1回呼ばれる

tm

改行回数。デフォルトは1

返却値

自分自身を返す



1275
1276
1277
1278
1279
1280
1281
# File 'lib/Miyako/API/yuki.rb', line 1275

def cr(tm = 1)
  tm.times{|n|
    @text_box.cr
    @update_cr.call(self)
  }
  return self
end

#disable_mouseObject

マウスでの制御を不可にする

ゲームパッド・キーボードでのコマンド・ポーズ制御を行えるが、 マウスでの利用を制限する Yukiクラスインスタンス生成時はマウス利用可能

返却値

自分自身を返す



271
272
273
274
# File 'lib/Miyako/API/yuki.rb', line 271

def disable_mouse
  @mouse_enable = false
  return self
end

#disposeObject

インスタンスで使用しているオブジェクトを解放する



1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
# File 'lib/Miyako/API/yuki.rb', line 1495

def dispose
  @update_inner  = nil
  @update_text   = nil
  @update_cr     = nil
  @update_clear  = nil

  @executing_fiber = nil

  @parts.clear
  @parts = nil
  @visibles.clear
  @visibles = nil
  @vars.clear
  @vars = nil

  @is_outer_height = nil
end

#enable_mouseObject

マウスでの制御を可能にする

ゲームパッド・キーボードでのコマンド・ポーズ制御を行えるが、 それに加えて、マウスでもゲームパッド・キーボードでの制御が行える Yukiクラスインスタンス生成時はマウス利用可能

返却値

自分自身を返す



261
262
263
264
# File 'lib/Miyako/API/yuki.rb', line 261

def enable_mouse
  @mouse_enable = true
  return self
end

#executing?Boolean

プロット処理が実行中かどうかを確認する

返却値

プロット処理実行中の時はtrueを返す

Returns:

  • (Boolean)


916
917
918
# File 'lib/Miyako/API/yuki.rb', line 916

def executing?
  return @executing
end

#hide(*names) ⇒ Object

パーツで指定したオブジェクトを隠蔽する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画させないよう指定する

names

パーツ名(シンボル)、複数指定可能

返却値

自分自身を返す



574
575
576
577
578
579
580
581
# File 'lib/Miyako/API/yuki.rb', line 574

def hide(*names)
  if names.length == 0
    @visibles.each_value{|sprite| sprite.hide}
    return self
  end
  names.each{|name| @visibles[name].hide }
  return self
end

#hide_commandboxObject

コマンドボックスを描画不可能にする

[Yukiスクリプトとして利用可能]
返却値

レシーバ



526
527
528
529
# File 'lib/Miyako/API/yuki.rb', line 526

def hide_commandbox
  @command_box_all.hide
  return self
end

#hide_textboxObject

テキストボックスを描画不可能にする

[Yukiスクリプトとして利用可能]
返却値

レシーバ



518
519
520
521
# File 'lib/Miyako/API/yuki.rb', line 518

def hide_textbox
  @text_box_all.hide
  return self
end

#initialize_copy(obj) ⇒ Object

:nodoc:



235
236
237
# File 'lib/Miyako/API/yuki.rb', line 235

def initialize_copy(obj) #:nodoc:
  raise MiyakoCopyError.not_copy("Yuki")
end

#is_scenario?(result) ⇒ Boolean

結果がシナリオかどうかを問い合わせる

[Yukiスクリプトとして利用可能]

結果がシナリオ(メソッド)のときはtrueを返す 対象の結果は、選択結果、プロット処理結果ともに有効

返却値

結果がシナリオかどうか(true/false)

Returns:

  • (Boolean)


1049
1050
1051
# File 'lib/Miyako/API/yuki.rb', line 1049

def is_scenario?(result)
  return (result.kind_of?(Proc) || result.kind_of?(Method))
end

#is_scene?(result) ⇒ Boolean

結果がシーンかどうかを問い合わせる

[Yukiスクリプトとして利用可能]

結果がシーン(シーンクラス名)のときはtrueを返す 対象の結果は、選択結果、プロット処理結果ともに有効

返却値

結果がシーンかどうか(true/false)

Returns:

  • (Boolean)


1040
1041
1042
# File 'lib/Miyako/API/yuki.rb', line 1040

def is_scene?(result)
  return (result.class == Class && result.include?(Story::Scene))
end

#italic(&block) ⇒ Object

斜体文字を描画する

[Yukiスクリプトとして利用可能]

ブロック内で指定した文字列を斜体で表示する (使用すると文字の端が切れてしまう場合あり!)

返却値

自分自身を返す



1256
1257
1258
1259
# File 'lib/Miyako/API/yuki.rb', line 1256

def italic(&block)
  @text_box.font_italic{ text block.call }
  return self
end

#load_bg(name, filename) ⇒ Object

背景を登録する

[Yukiスクリプトとして利用可能]

画面に表示する背景を登録する すでにshowメソッドで表示指定している場合は、先頭に表示させる

name

スプライト名(重複するときは上書き)

filename

読み込むファイル名

返却値

自分自身を返す



671
672
673
674
675
676
677
# File 'lib/Miyako/API/yuki.rb', line 671

def load_bg(name, filename)
  spr = Sprite.new(:file=>filename, :type=>:ac)
  @parts[name] = spr
  @parts[name].hide
  @bgs.add(name, @parts[name])
  return self
end

#load_bgm(name, filename) ⇒ Object

BGMを登録する

[Yukiスクリプトとして利用可能]

音声ファイルを読み込み、BGMとして登録する 登録したBGMはpartsメソッドを使って参照できる

name

スプライト名(重複するときは上書き)

filename

読み込むファイル名

返却値

自分自身を返す



686
687
688
689
# File 'lib/Miyako/API/yuki.rb', line 686

def load_bgm(name, filename)
  @parts[name] = Audio::BGM.new(filename)
  return self
end

#load_se(name, filename) ⇒ Object

効果音を登録する

[Yukiスクリプトとして利用可能]

音声ファイルを読み込み、効果音として登録する 登録した効果音はpartsメソッドを使って参照できる

name

スプライト名(重複するときは上書き)

filename

読み込むファイル名

返却値

自分自身を返す



698
699
700
701
# File 'lib/Miyako/API/yuki.rb', line 698

def load_se(name, filename)
  @parts[name] = Audio::SE.new(filename)
  return self
end

#load_sprite(name, filename, pre = false) ⇒ Object

ファイル名で指定したスプライトを登録する

[Yukiスクリプトとして利用可能]

画面に表示するスプライトを登録する すでにshowメソッドで表示指定している場合は、先頭に表示させる

name

スプライト名(重複するときは上書き)

filename

読み込むファイル名

pre

pre_visiblesに登録するときはtrue、visiblesに登録するときはfalseを渡す

省略時はfalse
返却値

自分自身を返す



656
657
658
659
660
661
662
# File 'lib/Miyako/API/yuki.rb', line 656

def load_sprite(name, filename, pre=false)
  spr = Sprite.new(:file=>filename, :type=>:ac)
  @parts[name] = spr
  @parts[name].hide
  pre ? @pre_visibles.add(name, @parts[name]) :  @visibles.add(name, @parts[name])
  return self
end

#mouse_enable?Boolean

マウスでの制御を可・不可を問い合わせる

マウスを利用できるときはtrue、利用できないときはfalseを返す

返却値

true/false

Returns:

  • (Boolean)


279
280
281
# File 'lib/Miyako/API/yuki.rb', line 279

def mouse_enable?
  @mouse_enable
end

#now_pageObject

シナリオ上の現在のページを返す

[Yukiスクリプトとして利用可能]

呼び出し当時、シナリオ上、pageメソッドでくくられていない場合は、nilを返す

返却値

ページ名



1469
1470
1471
# File 'lib/Miyako/API/yuki.rb', line 1469

def now_page
  return @now_page
end

#ok_checks_during(procs, pre_procs = [], post_procs = []) ⇒ Object

ブロック評価中、コマンド選択決定問い合わせメソッド配列を置き換える

同時に、コマンド選択開始時処理(Yuki#pre_command)、コマンド選択終了時処理(Yuki#post_command)を引数で設定できる。 ブロックの評価が終われば、メソッド配列・コマンド選択開始時処理・コマンド選択終了時処理を元に戻す

procs

置き換えるメソッド配列(callメソッドを持ち、true/falseを返すメソッドの配列)

pre_proc

コマンド選択開始時に実行させるProc(デフォルトは[](何もしない))

post_proc

コマンド選択決定時に実行させるProc(デフォルトは[](何もしない))

返却値

自分自身を返す

Raises:



991
992
993
994
995
996
997
998
# File 'lib/Miyako/API/yuki.rb', line 991

def ok_checks_during(procs, pre_procs = [], post_procs = [])
  raise MiyakoProcError, "Can't find block!" unless block_given?
  backup = [@ok_checks, @pre_command, @post_command]
  @ok_checks, @pre_command, @post_command = procs, pre_proc, post_proc
  yield
  @ok_checks, @pre_command, @post_command = backup.pop(3)
  return self
end

#over_engineObject



239
240
241
# File 'lib/Miyako/API/yuki.rb', line 239

def over_engine
  @over_yuki
end

#over_engine=(engine) ⇒ Object



243
244
245
246
# File 'lib/Miyako/API/yuki.rb', line 243

def over_engine=(engine)
  @over_yuki = engine
  engine.under_engine = self
end

#over_exec(yuki = nil, plot = nil, *params) ⇒ Object

別のYukiエンジンを実行する

[Yukiスクリプトとして利用可能]

もう一つのYukiエンジンを実行させ、並行実行させることができる ウインドウの上にウインドウを表示したりするときに、このメソッドを使う renderメソッドで描画する際は、自分のインスタンスが描画した直後に描画される 自分自身を実行しようとするとMiyakoValueError例外が発生する

yuki

実行対象のYukiインスタンス(事前にsetupの呼び出しが必要)

plot

プロットインスタンス。すでにsetupなどで登録しているときはnilを渡す

params

プロット実行開始時に、プロットに渡す引数

返却値

自分自身を返す

Raises:



758
759
760
761
762
763
# File 'lib/Miyako/API/yuki.rb', line 758

def over_exec(yuki = nil, plot = nil, *params)
  raise MiyakoValueError, "This Yuki engine is same as self!" if yuki.eql?(self)
  self.over_engine = yuki if yuki
  @over_yuki.start_plot(plot, *params)
  return self
end

#page(name, use_pause = true) ⇒ Object

シナリオ上の括り(ページ)を実装する

[Yukiスクリプトとして利用可能]

シナリオ上、「このプロットの明示的な範囲」を示すために使用する(セーブ時の再現位置の指定など) Yuki#select_first_pageメソッドで開始位置が指定されている場合、以下の処理を行う。 (1)select_first_pageメソッドで指定されたページから処理する。それまでのページは無視される (2)開始ページを処理する前に、select_first_pageメソッドの内容をクリアする(nilに変更する) このメソッドはブロックが必須。ブロックがないと例外が発生する。

name

ページ名。select_first_pageメソッドは、この名前を検索する。また、now_pageメソッドの返却値でもある

use_pause::ページの処理が終了した後、必ずpauseメソッドを呼び出すかどうかのフラグ。デフォルトはtrue

返却値

select_first_pageメソッドで指定されていないページのときはnil、指定されているページの場合は引数nameの値

Raises:



1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
# File 'lib/Miyako/API/yuki.rb', line 1454

def page(name, use_pause = true)
  raise MiyakoProcError, "Yuki#page needs block!" unless block_given?
  return nil if (@first_page && name != @first_page)
  @first_page = nil
  @now_page = name
  yield
  pause if use_pause
  @now_page = nil
  return name
end

#partsObject

パーツを参照する

[Yukiスクリプトとして利用可能]

パーツの管理オブジェクトを、ハッシュとして参照する。 パーツ名nameを指定して、インスタンスを参照できる 未登録のパーツはnilが返る (例)parts

返却値

パーツ管理ハッシュ



364
365
366
# File 'lib/Miyako/API/yuki.rb', line 364

def parts
  @parts
end

#parts_namesObject

パーツ名の一覧を参照する

[Yukiスクリプトとして利用可能]

パーツ管理オブジェクトに登録されているパーツ名の一覧を配列として返す。 順番は登録順。 まだ何も登録されていないときは空の配列が返る。 (例)regist_parts :chr1, hoge

regist_parts :chr2, fuga
parts_names # => [:chr1, :chr2]
返却値

パーツ管理ハッシュ



378
379
380
# File 'lib/Miyako/API/yuki.rb', line 378

def parts_names
  @parts.keys
end

#pauseObject

ポーズを行う

[Yukiスクリプトとして利用可能]

ポーズが行われると、ポーズ用のカーソルが表示される 所定のボタンを押すとポーズが解除され、カーソルが消える 解除後は、プロットの続きを処理する 引数無しのブロックを渡せば、ポーズ開始前に行いたい処理を施すことが出来る ポーズ中、update_innerメソッドを呼び出し、続けて、処理をYuki#startもしくはYuki#update呼び出し直後に戻す Yuki#updateが呼び出されてもポーズ中の場合は、再び上記の処理を繰り返す (たとえば、一定時間後に自動的にポーズ解除する場合、そのタイマーを開始させるなど)

返却値

自分自身を返す



1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
# File 'lib/Miyako/API/yuki.rb', line 1303

def pause
  @pre_pause.each{|proc| proc.call}
  yield if block_given?
  @text_box.pause
  @pausing = true
  while @pausing
    @update_inner.call(self)
    Fiber.yield
  end
  @post_pause.each{|proc| proc.call}
  return self
end

#pause_and_clearObject

ポーズをかけて、テキストボックスの内容を消去する

[Yukiスクリプトとして利用可能]

ポーズをかけ、ポーズを解除するときにテキストボックスの内容を消去する

返却値

自分自身を返す



1327
1328
1329
# File 'lib/Miyako/API/yuki.rb', line 1327

def pause_and_clear
  return pause.clear
end

#pausingObject

:nodoc:



1316
1317
1318
1319
1320
1321
# File 'lib/Miyako/API/yuki.rb', line 1316

def pausing #:nodoc:
  return unless @pause_release
  @text_box.release
  @pausing = false
  @pause_release = false
end

#pausing?Boolean

メッセージ送り待ちの問い合わせメソッド

[Yukiスクリプトとして利用可能]
返却値

メッセージ送り待ちの時はtrueを返す

Returns:

  • (Boolean)


1086
1087
1088
# File 'lib/Miyako/API/yuki.rb', line 1086

def pausing?
  return @pausing
end

#play(name) ⇒ Object

パーツで指定したオブジェクトを再生する

[Yukiスクリプトとして利用可能]

nameで指定したパーツを再生(例:BGM)する。 (但し、パーツで指定したオブジェクトがplayメソッドを持つことが条件)

name

パーツ名(シンボル)

返却値

自分自身を返す



720
721
722
723
# File 'lib/Miyako/API/yuki.rb', line 720

def play(name)
  @parts[name].play
  return self
end

#plot_facade(plot_proc = nil, *params, &plot_block) ⇒ Object

:nodoc:



889
890
891
892
893
894
895
896
897
898
# File 'lib/Miyako/API/yuki.rb', line 889

def plot_facade(plot_proc = nil, *params, &plot_block) #:nodoc:
  @plot_result = nil
  @executing = true
  exec_plot = @exec_plot
  @plot_result = plot_proc ? self.instance_exec(*params, &plot_proc) :
                 block_given? ? self.instance_exec(*params, &plot_block) :
                 exec_plot ? self.instance_exec(*params, &exec_plot) :
                 raise(MiyakoProcError, "Cannot find plot!")
  @executing = false
end

#pre_hide(*names) ⇒ Object

パーツで指定したオブジェクトを隠蔽する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画させないよう指定する

names

パーツ名(シンボル)、複数指定可能

返却値

自分自身を返す



606
607
608
609
610
611
612
613
# File 'lib/Miyako/API/yuki.rb', line 606

def pre_hide(*names)
  if names.length == 0
    @pre_visibles.each_value{|sprite| sprite.hide}
    return self
  end
  names.each{|name| @pre_visibles[name].hide }
  return self
end

#pre_show(*names) ⇒ Object

パーツで指定したオブジェクトを先頭に表示する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画する すでにshowメソッドで表示指定している場合は、先頭に表示させる

names

パーツ名(シンボル)、複数指定可能(指定した順番に描画される)

返却値

自分自身を返す



589
590
591
592
593
594
595
596
597
598
599
# File 'lib/Miyako/API/yuki.rb', line 589

def pre_show(*names)
  if names.length == 0
    @pre_visibles.each_value{|sprite| sprite.show}
    return self
  end
  names.each{|name|
    @pre_visibles.add(name, @parts[name]) unless @pre_visibles.include?(name)
    @pre_visibles[name].show
  }
  return self
end

#pre_visibles_namesObject

現在描画対象のパーツ名のリストを取得する

[Yukiスクリプトとして利用可能]

現在描画しているパーツ名の配列を参照する。 実体のインスタンスは、partsメソッドで参照できるハッシュの値として格納されている。 Yuki#renderで描画する際、配列の先頭から順に、要素に対応するインスタンスを描画する(つまり、配列の後ろにある方が前に描画される (例):[:a, :b, :c]の順に並んでいたら、:cが指すインスタンスが一番前に描画される。

返却値

描画対象リスト



402
403
404
# File 'lib/Miyako/API/yuki.rb', line 402

def pre_visibles_names
  @pre_visibles.names
end

#process(*params) ⇒ Object

一旦処理をメインに戻す

[Yukiスクリプトとして利用可能]

Yukiスクリプト内で定義されているループ内処理から一旦抜け出し、メインループに戻る 追加したYukiスクリプトにループが含まれているとき、 ループを回すごとに画面更新やメイン処理を行いたいときに使う 但し、ページ名を指定しないときはnilを指定する。

params

メインループに返す引数

返却値

メインループから渡ってきた引数



1490
1491
1492
# File 'lib/Miyako/API/yuki.rb', line 1490

def process(*params)
  Fiber.yield *params
end

#regist_parts(name, parts) ⇒ Object

オブジェクトを登録する

[Yukiスクリプトとして利用可能]

オブジェクトをパーツnameとして登録する。 Yuki::partsで参照可能

name

パーツ名(シンボル)

parts

登録対象のインスタンス

返却値

自分自身を返す



426
427
428
429
# File 'lib/Miyako/API/yuki.rb', line 426

def regist_parts(name, parts)
  @parts[name] = parts
  return self
end

#release_checks_during(procs, pre_procs = [], post_procs = []) ⇒ Object

ブロック評価中、ポーズ解除問い合わせメソッド配列を置き換える

同時に、ポーズ時処理(Yuki#pre_pause)、ポーズ解除時処理(Yuki#post_pause)を引数で設定できる。 ブロックの評価が終われば、メソッド配列・ポーズ時処理・ポーズ解除時処理を元に戻す

procs

置き換えるメソッド配列(callメソッドを持ち、true/falseを返すメソッドの配列)

pre_proc

ポーズ開始時に実行させるProc(デフォルトは[](何もしない))

post_proc

ポーズ解除時に実行させるProc(デフォルトは[](何もしない))

返却値

自分自身を返す

Raises:



975
976
977
978
979
980
981
982
# File 'lib/Miyako/API/yuki.rb', line 975

def release_checks_during(procs, pre_procs = [], post_procs = [])
  raise MiyakoProcError, "Can't find block!" unless block_given?
  backup = [@release_checks, @pre_pause, @post_pause]
  @release_checks, @pre_pause, @post_pause = procs, pre_proc, post_proc
  yield
  @release_checks, @pre_pause, @post_pause = backup.pop(3)
  return self
end

#remove_parts(name) ⇒ Object

オブジェクトの登録を解除する

[Yukiスクリプトとして利用可能]

パーツnameとして登録されているオブジェクトを登録から解除する。

name

パーツ名(シンボル)

返却値

自分自身を返す



546
547
548
549
# File 'lib/Miyako/API/yuki.rb', line 546

def remove_parts(name)
  @parts.delete(name)
  return self
end

#renderObject

Yuki#showで表示指定した画像を描画する

描画順は、showメソッドで指定した順に描画される(先に指定した画像は後ろに表示される) なお、visibleの値がfalseの時は描画されない。

返却値

自分自身を返す



287
288
289
290
# File 'lib/Miyako/API/yuki.rb', line 287

def render
  @over_yuki.render if @over_yuki && @over_yuki.executing?
  return self
end

#render_allObject



301
302
303
304
305
306
307
# File 'lib/Miyako/API/yuki.rb', line 301

def render_all
  self.bgs.render
  self.visibles.render
  self.textbox_all.render
  self.commandbox_all.render unless self.box_shared?
  self.pre_visibles.render
end

#render_to(dst) ⇒ Object

Yuki#showで表示指定した画像を描画する

描画順は、showメソッドで指定した順に描画される(先に指定した画像は後ろに表示される) なお、visibleの値がfalseの時は描画されない。

返却値

自分自身を返す



296
297
298
299
# File 'lib/Miyako/API/yuki.rb', line 296

def render_to(dst)
  @over_yuki.render_to(dst) if @over_yuki && @over_yuki.executing?
  return self
end

#render_to_all(dst) ⇒ Object



309
310
311
312
313
314
315
# File 'lib/Miyako/API/yuki.rb', line 309

def render_to_all(dst)
  self.bgs.render_to(dst)
  self.visibles.render_to(dst)
  self.textbox_all.render_to(dst)
  self.commandbox_all.render_to(dst) unless self.box_shared?
  self.pre_visibles.render_to(dst)
end

#reset_cancel_checksObject

コマンド選択キャンセル問い合わせメソッド配列を初期状態に戻す

返却値

自分自身を返す



936
937
938
939
# File 'lib/Miyako/API/yuki.rb', line 936

def reset_cancel_checks
  @cancel_checks = @cancel_checks_default.dup
  return self
end

#reset_ok_checksObject

コマンド選択決定問い合わせメソッド配列を初期状態に戻す

返却値

自分自身を返す



929
930
931
932
# File 'lib/Miyako/API/yuki.rb', line 929

def reset_ok_checks
  @ok_checks = @ok_checks_default.dup
  return self
end

#reset_pre_post_cancelObject

コマンド選択キャンセル前後処理メソッド配列を初期状態に戻す

pre_cancel/post_cancelの処理を初期状態([])に戻す

返却値

自分自身を返す



962
963
964
965
966
# File 'lib/Miyako/API/yuki.rb', line 962

def reset_pre_post_cancel
  @pre_acncel = []
  @post_cancel = []
  return self
end

#reset_pre_post_commandObject

コマンド選択前後処理メソッド配列を初期状態に戻す

pre_command/post_commandの処理を初期状態([])に戻す

返却値

自分自身を返す



953
954
955
956
957
# File 'lib/Miyako/API/yuki.rb', line 953

def reset_pre_post_command
  @pre_command = []
  @post_command = []
  return self
end

#reset_pre_post_releaseObject

ポーズ前後処理メソッド配列を初期状態に戻す

pre_pause/post_pauseの処理を初期状態([])に戻す

返却値

自分自身を返す



944
945
946
947
948
# File 'lib/Miyako/API/yuki.rb', line 944

def reset_pre_post_release
  @pre_pause = []
  @post_pause = []
  return self
end

#reset_release_checksObject

ポーズ解除問い合わせメソッド配列を初期状態に戻す

返却値

自分自身を返す



922
923
924
925
# File 'lib/Miyako/API/yuki.rb', line 922

def reset_release_checks
  @release_checks = @release_checks_default.dup
  return self
end

#reset_selectingObject

:nodoc:



1405
1406
1407
1408
1409
# File 'lib/Miyako/API/yuki.rb', line 1405

def reset_selecting #:nodoc:
  @select_ok = false
  @select_cancel = false
  @select_amount = [0, 0]
end

#resultObject

プロットの処理結果を返す

[Yukiスクリプトとして利用可能]

プロット処理の結果を返す。 まだ結果が得られていない場合はnilを得る プロット処理が終了していないのに結果を得られるので注意!

返却値

プロットの処理結果



1022
1023
1024
# File 'lib/Miyako/API/yuki.rb', line 1022

def result
  return @plot_result
end

#result=(ret = nil) ⇒ Object

プロット処理の結果を設定する

[Yukiスクリプトとして利用可能]
ret

設定する結果。デフォルトはnil

返却値

自分自身を返す



1030
1031
1032
1033
# File 'lib/Miyako/API/yuki.rb', line 1030

def result=(ret = nil)
  @plot_result = ret
  return self
end

#select_commandbox(box, box_all = nil) ⇒ Object

表示・描画対象のコマンドボックスを選択する

第2引数として、テキストボックス全体を渡せる(省略可能) 第1引数が、PartsやSpriteListの1部分のときに、第2引数を渡すことで、 テキストボックス全体を制御可能 第2引数を省略時は、全バージョンに引き続いて、テキストボックス本体のみを制御する

[Yukiスクリプトとして利用可能]
box

テキストボックス本体

box_all

テキストボックス全体

返却値

自分自身を返す



461
462
463
464
465
# File 'lib/Miyako/API/yuki.rb', line 461

def select_commandbox(box, box_all = nil)
  @command_box = box
  @command_box_all = box_all || box
  return self
end

#select_first_page(name) ⇒ Object

プロット上の最初に実行するページを指定知る

[Yukiスクリプトとして利用可能]

但し、ページ名を指定しないときはnilを指定する。

name

最初に実行するページ名



1477
1478
1479
# File 'lib/Miyako/API/yuki.rb', line 1477

def select_first_page(name)
  @first_page = name
end

#select_plot(plot_proc) ⇒ Object

実行するプロットと登録する

plot_proc

プロットの実行部をインスタンス化したオブジェクト

返却値

自分自身を返す



815
816
817
818
# File 'lib/Miyako/API/yuki.rb', line 815

def select_plot(plot_proc)
  @exec_plot = plot_proc
  return self
end

#select_resultObject

コマンドの選択結果を返す

[Yukiスクリプトとして利用可能]

コマンド選択の結果を返す。 まだ結果が得られていない場合はnilを得る プロット処理・コマンド選択が終了していないのに結果を得られるので注意!

返却値

コマンドの選択結果



1417
1418
1419
# File 'lib/Miyako/API/yuki.rb', line 1417

def select_result
  return @result
end

#select_textbox(box, box_all = nil) ⇒ Object

表示・描画対象のテキストボックスを選択する

第2引数として、テキストボックス全体を渡せる(省略可能) 第1引数が、PartsやSpriteListの1部分のときに、第2引数を渡すことで、 テキストボックス全体を制御可能 第2引数を省略時は、全バージョンに引き続いて、テキストボックス本体のみを制御する

[Yukiスクリプトとして利用可能]
box

テキストボックス本体

box_all

テキストボックス全体

返却値

自分自身を返す



441
442
443
444
445
446
447
448
449
# File 'lib/Miyako/API/yuki.rb', line 441

def select_textbox(box, box_all = nil)
  @text_box = box
  @text_box_all = box_all || box
  unless @command_box
    @command_box = @text_box
    @command_box_all = @text_box_all
  end
  return self
end

#selectingObject

:nodoc:



1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
# File 'lib/Miyako/API/yuki.rb', line 1375

def selecting #:nodoc:
  return unless @selecting
  return unless @command_box.selecting?
  @selecting_procs.each{|sp|
    sp.call(@select_ok, @select_cansel, @select_amount, @mouse_amount)
  }
  if @select_ok
    return @on_disable.each{|proc| proc.call} unless @command_box.enable_choice?
    @result = @command_box.result
    @command_box.finish_command
    @command_box_all.hide if @command_box_all.object_id != @text_box_all.object_id
    @text_box.release
    @selecting = false
    reset_selecting
  elsif @select_cancel
    @result = @cancel
    @command_box.finish_command
    @command_box_all.hide if @command_box_all.object_id != @text_box_all.object_id
    @text_box.release
    @selecting = false
    reset_selecting
  elsif @select_amount != [0,0]
    @command_box.move_cursor(*@select_amount)
    reset_selecting
  elsif @mouse_amount
    @command_box.attach_cursor(*@mouse_amount.to_a) if @mouse_enable
    reset_selecting
  end
end

#selecting?Boolean

コマンド選択中の問い合わせメソッド

[Yukiスクリプトとして利用可能]
返却値

コマンド選択中の時はtrueを返す

Returns:

  • (Boolean)


1072
1073
1074
# File 'lib/Miyako/API/yuki.rb', line 1072

def selecting?
  return @selecting
end

#setup(*params, &proc) ⇒ Object

シーンのセットアップ時に実行する処理

ブロック引数として、テキストボックスの変更などの処理をブロック内に記述することが出来る。 引数の数とブロック引数の数が違っていれば例外が発生する

params

ブロックに渡す引数リスト(ブロックを渡しているときのみ)

返却値

自分自身を返す

Raises:



785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
# File 'lib/Miyako/API/yuki.rb', line 785

def setup(*params, &proc)
  @exec_plot = nil

  @executing = false

  @pausing = false
  @selecting = false
  @waiting = false

  @pause_release = false
  @select_ok = false
  @select_cancel = false
  @select_amount = [0, 0]
  @mouse_amount = nil

  @result = nil
  @plot_result = nil

  @now_page = nil
  @first_page = nil

  raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
  instance_exec(*params, &proc) if proc

  return self
end

#show(*names) ⇒ Object

パーツで指定したオブジェクトを先頭に表示する

[Yukiスクリプトとして利用可能]

描画時に、指定したパーツを描画する すでにshowメソッドで表示指定している場合は、先頭に表示させる

names

パーツ名(シンボル)、複数指定可能(指定した順番に描画される)

返却値

自分自身を返す



557
558
559
560
561
562
563
564
565
566
567
# File 'lib/Miyako/API/yuki.rb', line 557

def show(*names)
  if names.length == 0
    @visibles.each_value{|sprite| sprite.show}
    return self
  end
  names.each{|name|
    @visibles.add(name, @parts[name]) unless @visibles.include?(name)
    @visibles[name].show
  }
  return self
end

#show_commandboxObject

コマンドボックスを描画可能にする

[Yukiスクリプトとして利用可能]
返却値

レシーバ



510
511
512
513
# File 'lib/Miyako/API/yuki.rb', line 510

def show_commandbox
  @command_box_all.show
  return self
end

#show_textboxObject

テキストボックスを描画可能にする

[Yukiスクリプトとして利用可能]
返却値

レシーバ



502
503
504
505
# File 'lib/Miyako/API/yuki.rb', line 502

def show_textbox
  @text_box_all.show
  return self
end

#size(size, valign = @valign, &block) ⇒ Object

文字の大きさを変更する

[Yukiスクリプトとして利用可能]

ブロック内で指定した文字列を、指定の大きさで描画する

size

文字の大きさ(整数)

valign

文字の縦の位置(top, middle, bottom)。デフォルトは:middle(Yuki#valign=,Yuki#valign_duringで変更可能)

返却値

自分自身を返す



1234
1235
1236
1237
1238
1239
# File 'lib/Miyako/API/yuki.rb', line 1234

def size(size, valign = @valign, &block)
  @text_box.font_size_during(size){
    @text_box.margin_during(@text_box.margin_height(valign)){ text block.call }
  }
  return self
end

#start(name) ⇒ Object

パーツで指定したオブジェクトの処理を開始する

[Yukiスクリプトとして利用可能]

nameで指定したパーツが持つ処理(例:アニメーション)を開始する。 (但し、パーツで指定したオブジェクトがstartメソッドを持つことが条件)

name

パーツ名(シンボル)

返却値

自分自身を返す



709
710
711
712
# File 'lib/Miyako/API/yuki.rb', line 709

def start(name)
  @parts[name].start
  return self
end

#start_plot(plot_proc = nil, *params, &plot_block) ⇒ Object

プロット処理を実行する(明示的に呼び出す必要がある場合)

引数もしくはブロックで指定したプロット処理を非同期に実行する。 呼び出し可能なプロットは以下の3種類。(上から優先度が高い順) プロットが見つからなければ例外が発生する

1)引数prot_proc(Procクラスのインスタンス)

2)引数として渡したブロック

3)select_plotメソッドで登録したブロック(Procクラスのインスタンス)

plot_proc

プロットの実行部をインスタンス化したオブジェクト。省略時はnil(paramsを指定するときは必ず設定すること)

params

プロットに引き渡す引数リスト

返却値

自分自身を返す

Raises:



834
835
836
837
838
839
840
841
842
# File 'lib/Miyako/API/yuki.rb', line 834

def start_plot(plot_proc = nil, *params, &plot_block)
  raise MiyakoValueError, "Yuki Error! Textbox is not selected!" unless @text_box
  raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_proc && plot_proc.arity.abs != params.length
  raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_block && plot_block.arity.abs != params.length
  raise MiyakoProcError, "Aagument count is not same block parameter count!" if @exec_plot && @exec_plot.arity.abs != params.length
  @executing_fiber = Fiber.new{ plot_facade(plot_proc, *params, &plot_block) }
  @executing_fiber.resume
  return self
end

#stop(name) ⇒ Object

パーツで指定したオブジェクトの処理を停止する

[Yukiスクリプトとして利用可能]

nameで指定したパーツが持つ処理を停止する。 (但し、パーツで指定したオブジェクトがstopメソッドを持つことが条件)

name

パーツ名(シンボル)

返却値

自分自身を返す



731
732
733
734
# File 'lib/Miyako/API/yuki.rb', line 731

def stop(name)
  @parts[name].stop
  return self
end

#text(txt) ⇒ Object

テキストボックスに文字を表示する

[Yukiスクリプトとして利用可能]

テキストボックスとして用意している画像に文字を描画する。 描画する単位(文字単位、文字列単位)によって、挙動が違う。 (文字単位の時) Yuki#text_by_charメソッドと同じ挙動。 (文字列単位の時) Yuki#text_by_strメソッドと同じ挙動。 デフォルトは文字単位。 引数txtの値は、内部で1文字ずつ分割され、1文字描画されるごとに、 update_textメソッドが呼び出され、続けてYuki#start_plotもしくはYuki#updateメソッド呼び出し直後に戻る

txt

表示させるテキスト

返却値

自分自身を返す



1133
1134
1135
1136
1137
# File 'lib/Miyako/API/yuki.rb', line 1133

def text(txt)
  return self if txt.eql?(self)
  return self if txt.empty?
  return @text_methods[@text_method_name].call(txt)
end

#text_by_char(txt) ⇒ Object

テキストボックスに文字を1文字ずつ表示する

[Yukiスクリプトとして利用可能]

引数txtの値は、内部で1文字ずつ分割され、1文字描画されるごとに、 update_textメソッドが呼び出され、続けてYuki#start_plotもしくはYuki#updateメソッド呼び出し直後に戻る 注意として、改行が文字列中にあれば改行、タブやフィードが文字列中にあれば、nilを返す。

txt

表示させるテキスト

返却値

自分自身を返す



1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
# File 'lib/Miyako/API/yuki.rb', line 1146

def text_by_char(txt)
  return self if txt.eql?(self)
  txt.chars{|ch|
    if /[\n\r]/.match(ch)
      next wait_by_cond(@is_outer_height)
    elsif @text_box.locate.x + @text_box.font.text_size(ch)[0] >= @text_box.textarea.w
      wait_by_cond(@is_outer_height)
    elsif /[\t\f]/.match(ch)
      next nil
    end
    @text_box.draw_text(ch)
    @update_text.call(self, ch)
    Fiber.yield
  }
  return self
end

#text_by_str(txt) ⇒ Object

テキストボックスに文字を表示する

[Yukiスクリプトとして利用可能]

文字列が描画されるごとに、update_textメソッドが呼び出され、 続けてYuki#start_plotもしくはYuki#updateメソッド呼び出し直後に戻る 注意として、改行が文字列中にあれば改行、タブやフィードが文字列中にあれば、nilを返す。

txt

表示させるテキスト

返却値

自分自身を返す



1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
# File 'lib/Miyako/API/yuki.rb', line 1170

def text_by_str(txt)
  return self if txt.eql?(self)
  use_cr = false
  until txt.empty? do
    if /[\n\r]/.match(txt)
      tmp = Regexp.last_match.pre_match
      txt = Regexp.last_match.post_match
      use_cr = true
    elsif @text_box.locate.x + @text_box.font.text_size(txt)[0] >= @text_box.textarea.w
      w = (@text_box.textarea.w - @text_box.locate.x) / @text_box.font.size
      tmp = txt.slice!(0,w)
      use_cr = true
    elsif /[\t\f]/.match(txt)
      next nil
    else
      tmp = txt
      txt = ""
    end
    @text_box.draw_text(tmp)
    self.cr if use_cr
    @update_text.call(self, tmp)
    Fiber.yield
    use_cr = false
  end
  return self
end

#text_method(mode) ⇒ Object

テキストボックスに文字を表示する方法を指定する

引数に、:charを渡すと1文字ごと、:stringを渡すと文字列ごとに表示される。それ以外を指定したときは例外が発生 ブロックを渡せば、ブロックの評価中のみ設定が有効になる。 ブロック評価終了後、呼び出し前の設定に戻る

mode

テキストの表示方法。:charのときは文字ごと、:stringのときは文字列ごとに表示される。それ以外を指定したときは例外が発生

返却値

自分自身を返す

Raises:



1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
# File 'lib/Miyako/API/yuki.rb', line 1109

def text_method(mode)
  raise MiyakoValueError, "undefined text_mode! #{mode}" unless [:char,:string].include?(mode)
  backup = @text_method_name
  @text_method_name = mode
  if block_given?
    yield
    @text_method_name = backup
  end
  return self
end

#textboxObject

テキストボックスを取得する

[Yukiスクリプトとして利用可能]

テキストボックスが登録されていないときはnilを返す

返却値

テキストボックス



471
472
473
# File 'lib/Miyako/API/yuki.rb', line 471

def textbox
  return @text_box
end

#textbox_allObject

テキストボックス全体を取得する

[Yukiスクリプトとして利用可能]

テキストボックスが登録されていないときはnilを返す

返却値

テキストボックス全体



487
488
489
# File 'lib/Miyako/API/yuki.rb', line 487

def textbox_all
  return @text_box_all
end

#to_plot(&plot) ⇒ Object

プロット用ブロックをYukiへ渡すためのインスタンスを作成する

プロット用に用意したブロック(ブロック引数無し)を、Yukiでの選択結果や移動先として利用できる インスタンスに変換する

返却値

ブロックをオブジェクトに変換したものを返す



865
866
867
# File 'lib/Miyako/API/yuki.rb', line 865

def to_plot(&plot)
  return plot
end

#under_engineObject



248
249
250
# File 'lib/Miyako/API/yuki.rb', line 248

def under_engine
  @under_yuki
end

#under_engine=(engine) ⇒ Object



252
253
254
# File 'lib/Miyako/API/yuki.rb', line 252

def under_engine=(engine)
  @under_yuki = engine
end

#under_line(&block) ⇒ Object

下線付き文字を描画する

[Yukiスクリプトとして利用可能]

ブロック内で指定した文字列を下線付きで表示する

返却値

自分自身を返す



1265
1266
1267
1268
# File 'lib/Miyako/API/yuki.rb', line 1265

def under_line(&block)
  @text_box.font_under_line{ text block.call }
  return self
end

#updateObject

プロット処理を更新する

ポーズ中、コマンド選択中、 Yuki#wait メソッドによるウェイトの状態確認を行う。 プロット処理の実行確認は出来ない



847
848
849
850
851
852
853
854
855
856
857
858
859
# File 'lib/Miyako/API/yuki.rb', line 847

def update
  return unless @executing
  return @over_yuki.update if @over_yuki && @over_yuki.executing? && !@over_exec
  update_plot_input
  pausing if @pausing
  selecting if @selecting
  waiting   if @waiting
  @pause_release = false
  @select_ok = false
  @select_cancel = false
  @select_amount = [0, 0]
  @executing_fiber.resume
end

#update_animationObject

Yuki#showで表示指定した画像のアニメーションを更新する

showメソッドで指定した画像のupdate_animationメソッドを呼び出す

返却値

描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す



320
321
322
# File 'lib/Miyako/API/yuki.rb', line 320

def update_animation
  @over_yuki.update_animation if @over_yuki && @over_yuki.executing?
end

#update_plot_inputObject

プロット処理に使用する入力情報を更新する

ポーズ中、コマンド選択中に使用する入力デバイスの押下状態を更新する (但し、プロット処理の実行中にのみ更新する) Yuki#update メソッドをそのまま使う場合は呼び出す必要がないが、 Yuki#exec_plot メソッドを呼び出す プロット処理の場合は、メインスレッドから明示的に呼び出す必要がある

返却値

nil を返す



875
876
877
878
879
880
881
882
883
884
885
886
887
# File 'lib/Miyako/API/yuki.rb', line 875

def update_plot_input
  return nil if @over_yuki && @over_yuki.executing?
  return nil unless @executing
  if @pausing && @release_checks.inject(false){|r, c| r |= c.call }
    @pause_release = true
  elsif @selecting
    @select_ok = true if @ok_checks.inject(false){|r, c| r |= c.call }
    @select_cancel = true if @cancel && @cancel_checks.inject(false){|r, c| r |= c.call }
    @select_amount = @key_amount_proc.call
    @mouse_amount = @mouse_amount_proc.call
  end
  return nil
end

#valign_during(valign) ⇒ Object

ブロック評価中、行中の表示位置を変更する

[Yukiスクリプトとして利用可能]

ブロックを評価している間だけ、デフォルトの縦の表示位置を変更する 変更できる値は、:top、:middle、:bottomの3種類。 ブロックを渡していないときはエラーを返す

valign

文字の縦の位置(top, middle, bottom)

返却値

自分自身を返す

Raises:



1220
1221
1222
1223
1224
1225
1226
# File 'lib/Miyako/API/yuki.rb', line 1220

def valign_during(valign)
  raise MiyakoProcError, "Can't find block!" unless block_given?
  oalign, @valign = @valign, valign
  yield
  @valign = oalign
  return self
end

#varsObject

変数を参照する

[Yukiスクリプトとして利用可能]

変数の管理オブジェクトを、ハッシュとして参照する。 変数名nameを指定して、インスタンスを参照できる。 未登録の変数はnilが変える。 (例)vars = 2 # 変数への代入

vars[:b] = vars[:a] + 5
show vars[:my_name]
name

パーツ名(シンボル)

返却値

変数管理ハッシュ



336
337
338
# File 'lib/Miyako/API/yuki.rb', line 336

def vars
  @vars
end

#vars_namesObject

変数を参照する

[Yukiスクリプトとして利用可能]

変数の管理オブジェクトを、ハッシュとして参照する。 変数名nameを指定して、インスタンスを参照できる。 未登録の変数はnilが変える。 (例)vars = 2 # 変数への代入

vars[:b] = vars[:a] + 5
vars_names => [:a, :b]
name

パーツ名(シンボル)

返却値

変数管理ハッシュ



352
353
354
# File 'lib/Miyako/API/yuki.rb', line 352

def vars_names
  @vars.keys
end

#visibles_namesObject

現在描画対象のパーツ名のリストを取得する

[Yukiスクリプトとして利用可能]

現在描画しているパーツ名の配列を参照する。 実体のインスタンスは、partsメソッドで参照できるハッシュの値として格納されている。 Yuki#renderで描画する際、配列の先頭から順に、要素に対応するインスタンスを描画する(つまり、配列の後ろにある方が前に描画される (例):[:a, :b, :c]の順に並んでいたら、:cが指すインスタンスが一番前に描画される。

返却値

描画対象リスト



390
391
392
# File 'lib/Miyako/API/yuki.rb', line 390

def visibles_names
  @visibles.names
end

#wait(length) ⇒ Object

プロットの処理を待機する

[Yukiスクリプトとして利用可能]

指定の秒数(少数可)、プロットの処理を待機する。 待機中、update_innerメソッドを呼び出し、続けて、処理をYuki#startもしくはYuki#update呼び出し直後に戻す Yuki#updateが呼び出されても待機中の場合は、再び上記の処理を繰り返す

length

待機する長さ。単位は秒。少数可。

返却値

自分自身を返す



1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
# File 'lib/Miyako/API/yuki.rb', line 1428

def wait(length)
  @waiting_timer = WaitCounter.new(length)
  @waiting_timer.start
  @waiting = true
  while @waiting
    @update_inner.call(self)
    Fiber.yield
  end
  return self
end

#wait_by_cond(cond = nil) ⇒ Object

条件に合っていればポーズをかける

[Yukiスクリプトとして利用可能]

引数で設定した条件(Proc,メソッドインスタンス,ブロック)を評価した結果、trueのときはポーズを行い、 condの値がnilで、ブロックが渡されていないときは何もしない falseのときは改行してプロットの処理を継続する

cond

条件を示すオブジェクト(返却値はtrue/false)。デフォルトはnil(渡されたブロックを評価する)

返却値

自分自身を返す



1097
1098
1099
1100
1101
# File 'lib/Miyako/API/yuki.rb', line 1097

def wait_by_cond(cond = nil)
  return yield ? pause_and_clear : cr if block_given?
  return cond.call ? pause_and_clear : cr if cond
  return self
end

#wait_by_finish(name) ⇒ Object

遷移図の処理が終了するまで待つ

[Yukiスクリプトとして利用可能]

nameで指定した遷移図の処理が終了するまで、プロットを停止する name: 遷移図名(シンボル)

返却値

自分自身を返す



741
742
743
744
745
746
# File 'lib/Miyako/API/yuki.rb', line 741

def wait_by_finish(name)
  until @parts[name].finish?
    @update_inner.call(self)
  end
  return self
end

#wait_over_execObject

別のYukiエンジンの実行が終わるまで待つ

[Yukiスクリプトとして利用可能]

over_execを呼び出した時、処理がすぐに次の行へ移るため、 over_execの処理が終了するのを待たせるためのメソッド

返却値

自分自身を返す



770
771
772
773
774
775
776
777
# File 'lib/Miyako/API/yuki.rb', line 770

def wait_over_exec
  @over_exec = true
  while @over_yuki && @over_yuki.executing?
    @over_yuki.update
    Fiber.yield
  end
  return self
end

#waitingObject

:nodoc:



1439
1440
1441
1442
# File 'lib/Miyako/API/yuki.rb', line 1439

def waiting #:nodoc:
  return if @waiting_timer.waiting?
  @waiting = false
end

#waiting?Boolean

Yuki#waitメソッドによる処理待ちの問い合わせメソッド

[Yukiスクリプトとして利用可能]
返却値

処理待ちの時はtrueを返す

Returns:

  • (Boolean)


1079
1080
1081
# File 'lib/Miyako/API/yuki.rb', line 1079

def waiting?
  return @waiting
end