ruby-miyako 2.1.6 → 2.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README +45 -3
- data/lib/Miyako/API/i_yuki.rb +41 -8
- data/lib/Miyako/API/simple_story.rb +240 -0
- data/lib/Miyako/API/story.rb +5 -5
- data/lib/Miyako/API/yuki.rb +34 -3
- data/lib/Miyako/miyako.rb +2 -1
- data/miyako_drawing.c +2 -6
- data/miyako_font.c +2 -2
- data/win/miyako_no_katana.so +0 -0
- metadata +3 -2
data/README
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
*******************************************************************************
|
2
2
|
【 作者名 】 サイロス誠
|
3
3
|
【 ソフト名 】 Interactive Media Authoring System "Miyako"
|
4
|
-
【 バージョン 】 2.1.
|
5
|
-
【 作成日 】 2010/01/
|
4
|
+
【 バージョン 】 2.1.7
|
5
|
+
【 作成日 】 2010/01/03
|
6
6
|
【 種別 】 フリーウェア
|
7
7
|
【 開発言語 】 Ruby 1.9.1
|
8
8
|
【 ランタイム 】 Ruby 1.9.1~,Ruby/SDL 2.1~,SDL
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
【 注意事項 】
|
17
17
|
|
18
|
-
本バージョンは、2.1.
|
18
|
+
本バージョンは、2.1.7公式リリース版です。
|
19
19
|
本バージョンでは、ドキュメント・リファレンスは不十分ですが、「サイログ。」内や、サンプルプログラムの紹介等で随時ドキュメントを公開して行きます。
|
20
20
|
(RDOC化を進めていますので、我こそはと思う方は是非・・・)
|
21
21
|
|
@@ -1546,5 +1546,47 @@ v2.1.6(2010.01.01)
|
|
1546
1546
|
・InitiativeScenarioEngine#update_animation_all
|
1547
1547
|
<インスタンスメソッド廃止>
|
1548
1548
|
|
1549
|
+
v2.1.7(2010.01.03)
|
1550
|
+
<バグ修正>
|
1551
|
+
・InitiativeScenarioEngine#Command構造体の順番がScenarioEngine#Commandと同期されていなかった問題を修正
|
1552
|
+
・InitiativeScenarioEngine#CommandEx構造体の順番がScenarioEngine#CommandExと同期されていなかった問題を修正
|
1553
|
+
・InitiativeScenarioEngine#render_allでエラーを出すバグを修正
|
1554
|
+
・InitiativeScenarioEngine#render_to_allでエラーを出すバグを修正
|
1555
|
+
・InitiativeScenarioEngine#pauseで解除待ちカーソルが消えないバグを修正
|
1556
|
+
<機能改善>
|
1557
|
+
<仕様変更>
|
1558
|
+
・(Initiative)ScenarioEngine#commandで、第2引数にnilを渡すことで、キャンセル操作無効にするようにした(明示的な引数渡しが必要)
|
1559
|
+
・over_execで使用するシナリオエンジンの事前登録が可能
|
1560
|
+
・ScenarioEngine#over_execメソッドの仕様を変更(engine,plotが省略可能に)
|
1561
|
+
・InitiativeScenarioEngine#over_execメソッドの仕様を変更(base,engine,plotが省略可能に)
|
1562
|
+
<ファイル追加>
|
1563
|
+
・API/simple_story.rb
|
1564
|
+
<ファイル削除>
|
1565
|
+
<グローバル変数追加>
|
1566
|
+
<定数追加>
|
1567
|
+
<定数削除>
|
1568
|
+
<構造体追加>
|
1569
|
+
<クラス追加>
|
1570
|
+
・SimpleStory
|
1571
|
+
<モジュール追加>
|
1572
|
+
・SimpleStory::Scene
|
1573
|
+
<mixin>
|
1574
|
+
<クラス・モジュールメソッド追加>
|
1575
|
+
<クラス・モジュールメソッド廃止>
|
1576
|
+
<モジュール関数追加>
|
1577
|
+
<モジュール関数廃止>
|
1578
|
+
<インスタンスメソッド追加>
|
1579
|
+
・ScenarioEngine#over_engine=
|
1580
|
+
・ScenarioEngine#under_engine
|
1581
|
+
・ScenarioEngine#under_engine=
|
1582
|
+
・ScenarioEngine#render_all
|
1583
|
+
・ScenarioEngine#render_to_all
|
1584
|
+
・InitiativeScenarioEngine#over_engine=
|
1585
|
+
・InitiativeScenarioEngine#under_engine
|
1586
|
+
・InitiativeScenarioEngine#under_engine=
|
1587
|
+
・InitiativeScenarioEngine#engine_stack
|
1588
|
+
・InitiativeScenarioEngine#create_engine_stack
|
1589
|
+
<インスタンスメソッド廃止>
|
1590
|
+
|
1549
1591
|
*******************************************************************************
|
1550
1592
|
このReadMeファイルは「れ~どめ~えじた~」によって作成されました。
|
data/lib/Miyako/API/i_yuki.rb
CHANGED
@@ -82,7 +82,7 @@ module Miyako
|
|
82
82
|
#_result_:: 選択結果(移動先シーンクラス名、シナリオ(メソッド)名他のオブジェクト)
|
83
83
|
#_body_disable_:: 選択不可時コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)(省略時は、bodyと同一)
|
84
84
|
#_enabe_:: コマンド選択の時はtrue、選択不可の時はfalseを設定
|
85
|
-
Command = Struct.new(:body, :body_selected, :
|
85
|
+
Command = Struct.new(:body, :body_selected, :body_disable, :enable, :condition, :result)
|
86
86
|
|
87
87
|
#==コマンド構造体
|
88
88
|
#_body_:: コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)
|
@@ -93,7 +93,7 @@ module Miyako
|
|
93
93
|
#_body_disable_:: 選択不可時コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)(省略時は、bodyと同一)
|
94
94
|
#ブロックは1つの引数を取る(コマンド選択テキストボックス))。デフォルトはnil
|
95
95
|
#_enabe_:: コマンド選択の時はtrue、選択不可の時はfalseを設定
|
96
|
-
CommandEX = Struct.new(:body, :body_selected, :condition, :
|
96
|
+
CommandEX = Struct.new(:body, :body_selected, :condition, :body_disable, :enable, :result, :end_select_proc)
|
97
97
|
|
98
98
|
attr_reader :visibles, :pre_visibles, :bgs, :base
|
99
99
|
attr_reader :valign
|
@@ -114,6 +114,11 @@ module Miyako
|
|
114
114
|
#callメソッドを持つブロックが使用可能。
|
115
115
|
attr_reader :selecting_procs
|
116
116
|
|
117
|
+
#over_execを使用したシナリオエンジンのコールスタック
|
118
|
+
#over_execするエンジンを基準に、一番大本のエンジンから順に積み込まれる
|
119
|
+
#自分自身(self)は含まない
|
120
|
+
attr_reader :engine_stack
|
121
|
+
|
117
122
|
#===Yukiにメソッドを追加する(すべてのYukiインスタンスに適応)
|
118
123
|
#ブロックを渡すことで、Yukiに新しいメソッドを追加できる。
|
119
124
|
#追加したメソッドは、すべてのYukiインスタンスで利用可能となる。
|
@@ -152,6 +157,7 @@ module Miyako
|
|
152
157
|
def initialize(*params, &proc)
|
153
158
|
@base = nil
|
154
159
|
@over_yuki = nil
|
160
|
+
@under_yuki = nil
|
155
161
|
@yuki = { }
|
156
162
|
@text_box = nil
|
157
163
|
@command_box = nil
|
@@ -168,6 +174,7 @@ module Miyako
|
|
168
174
|
@select_ok = false
|
169
175
|
@select_cancel = false
|
170
176
|
@select_amount = [0, 0]
|
177
|
+
@cencel = nil
|
171
178
|
@mouse_amount = nil
|
172
179
|
|
173
180
|
@mouse_enable = true
|
@@ -215,6 +222,8 @@ module Miyako
|
|
215
222
|
@now_page = nil
|
216
223
|
@first_page = nil
|
217
224
|
|
225
|
+
@engine_stack = []
|
226
|
+
|
218
227
|
raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
|
219
228
|
instance_exec(*params, &proc) if block_given?
|
220
229
|
end
|
@@ -223,6 +232,13 @@ module Miyako
|
|
223
232
|
raise MiyakoCopyError.not_copy("Yuki")
|
224
233
|
end
|
225
234
|
|
235
|
+
#===エンジンスタックを生成する
|
236
|
+
#base:: over_exec呼び出し元のエンジン
|
237
|
+
def create_engine_stack(base)
|
238
|
+
return unless @engine_stack.empty?
|
239
|
+
@engine_stack.push(*base.engine_stack, base)
|
240
|
+
end
|
241
|
+
|
226
242
|
#===マウスでの制御を可能にする
|
227
243
|
#ゲームパッド・キーボードでのコマンド・ポーズ制御を行えるが、
|
228
244
|
#それに加えて、マウスでもゲームパッド・キーボードでの制御が行える
|
@@ -254,7 +270,7 @@ module Miyako
|
|
254
270
|
self.bgs.render
|
255
271
|
self.visibles.render
|
256
272
|
self.textbox_all.render
|
257
|
-
self.commandbox_all.render unless
|
273
|
+
self.commandbox_all.render unless self.box_shared?
|
258
274
|
self.pre_visibles.render
|
259
275
|
end
|
260
276
|
|
@@ -271,7 +287,7 @@ module Miyako
|
|
271
287
|
self.bgs.render_to(dst)
|
272
288
|
self.visibles.render_to(dst)
|
273
289
|
self.textbox_all.render_to(dst)
|
274
|
-
self.commandbox_all.render_to(dst) unless
|
290
|
+
self.commandbox_all.render_to(dst) unless self.box_shared?
|
275
291
|
self.pre_visibles.render_to(dst)
|
276
292
|
end
|
277
293
|
|
@@ -825,6 +841,21 @@ module Miyako
|
|
825
841
|
@over_yuki
|
826
842
|
end
|
827
843
|
|
844
|
+
def over_engine=(engine)
|
845
|
+
@over_yuki = engine
|
846
|
+
engine.under_engine = self
|
847
|
+
engine.engine_stack.clear
|
848
|
+
engine.create_engine_stack(self)
|
849
|
+
end
|
850
|
+
|
851
|
+
def under_engine
|
852
|
+
@under_yuki
|
853
|
+
end
|
854
|
+
|
855
|
+
def under_engine=(engine)
|
856
|
+
@under_yuki = engine
|
857
|
+
end
|
858
|
+
|
828
859
|
#===別のYukiエンジンを実行する
|
829
860
|
#[[Yukiスクリプトとして利用可能]]
|
830
861
|
#もう一つのYukiエンジンを実行させ、並行実行させることができる
|
@@ -835,10 +866,11 @@ module Miyako
|
|
835
866
|
#_plot_:: プロットインスタンス。すでにsetupなどで登録しているときはnilを渡す
|
836
867
|
#_params_:: プロット実行開始時に、プロットに渡す引数
|
837
868
|
#返却値:: 自分自身を返す
|
838
|
-
def over_exec(yuki, base, plot, *params)
|
869
|
+
def over_exec(yuki = nil, base = nil, plot = nil, *params)
|
839
870
|
raise MiyakoValueError, "This Yuki engine is same as self!" if yuki.eql?(self)
|
840
|
-
|
841
|
-
@over_yuki.start_plot(base, plot, *params)
|
871
|
+
self.over_engine = yuki if yuki
|
872
|
+
@over_yuki.start_plot(base ? base : @over_yuki, plot, *params)
|
873
|
+
yuki.engine_stack.clear if yuki
|
842
874
|
return self
|
843
875
|
end
|
844
876
|
|
@@ -1260,6 +1292,7 @@ module Miyako
|
|
1260
1292
|
pause_release = @release_checks.inject(false){|r, c| r |= c.call }
|
1261
1293
|
post_process
|
1262
1294
|
end
|
1295
|
+
@text_box.release
|
1263
1296
|
@post_pause.each{|proc| proc.call}
|
1264
1297
|
return self
|
1265
1298
|
end
|
@@ -1312,7 +1345,7 @@ module Miyako
|
|
1312
1345
|
pre_process
|
1313
1346
|
@base.selecting_inner(self) if @base
|
1314
1347
|
@select_ok = true if @ok_checks.inject(false){|r, c| r |= c.call }
|
1315
|
-
@select_cancel = true if @cancel_checks.inject(false){|r, c| r |= c.call }
|
1348
|
+
@select_cancel = true if @cancel && @cancel_checks.inject(false){|r, c| r |= c.call }
|
1316
1349
|
@select_amount = @key_amount_proc.call
|
1317
1350
|
@mouse_amount = @mouse_amount_proc.call
|
1318
1351
|
@selecting_procs.each{|sp|
|
@@ -0,0 +1,240 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
=begin
|
4
|
+
--
|
5
|
+
Miyako v2.1
|
6
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
7
|
+
|
8
|
+
This library is free software; you can redistribute it and/or
|
9
|
+
modify it under the terms of the GNU Lesser General Public
|
10
|
+
License as published by the Free Software Foundation; either
|
11
|
+
version 2.1 of the License, or (at your option) any later version.
|
12
|
+
|
13
|
+
This library is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
Lesser General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Lesser General Public
|
19
|
+
License along with this library; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
++
|
22
|
+
=end
|
23
|
+
|
24
|
+
module Miyako
|
25
|
+
#==シーン実行クラス
|
26
|
+
#用意したシーンインスタンスを実行
|
27
|
+
class SimpleStory
|
28
|
+
|
29
|
+
@@sub_scenes = [:sub_scene, :sub_routine]
|
30
|
+
|
31
|
+
def prev_label #:nodoc:
|
32
|
+
return @prev_label
|
33
|
+
end
|
34
|
+
|
35
|
+
def next_label #:nodoc:
|
36
|
+
return @next_label
|
37
|
+
end
|
38
|
+
|
39
|
+
def upper_label #:nodoc:
|
40
|
+
return @stack.empty? ? nil : @stack.last[0]
|
41
|
+
end
|
42
|
+
|
43
|
+
#===インスタンスの作成
|
44
|
+
#ストーリー情報の初期か
|
45
|
+
#返却値:: 生成したインスタンス
|
46
|
+
def initialize
|
47
|
+
@prev_label = nil
|
48
|
+
@next_label = nil
|
49
|
+
|
50
|
+
@stack = []
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize_copy(obj) #:nodoc:
|
54
|
+
@stack = @stack.dup
|
55
|
+
end
|
56
|
+
|
57
|
+
#===Storyの実行を始める
|
58
|
+
#"obj.run(MainScene)"と記述すると、SceneモジュールをmixinしたMainSceneクラスのインスタンスを作成し、評価を始める
|
59
|
+
#_n_:: 最初に実行するシーン名(クラス名を定数で)
|
60
|
+
def run(n)
|
61
|
+
return nil if n == nil
|
62
|
+
u = nil
|
63
|
+
on = nil
|
64
|
+
@stack = Array.new # reset
|
65
|
+
while n != nil
|
66
|
+
@prev_label = on
|
67
|
+
on = n
|
68
|
+
|
69
|
+
raise MiyakoValueError, "Illegal Script-label name! : #{n}" unless Scene.has_scene?(n.to_s)
|
70
|
+
raise MiyakoValueError, "This scene cannot use for Standard Scene! : #{n}" if n.scene_type != :scene
|
71
|
+
u = n.new(self) if u == nil
|
72
|
+
u.init_inner(@prev_label, self.upper_label)
|
73
|
+
|
74
|
+
n = u.execute
|
75
|
+
u.next = n
|
76
|
+
@next_label = n
|
77
|
+
if n.nil?
|
78
|
+
if @@sub_scenes.include?(u.class.scene_type) && @stack.empty? == false
|
79
|
+
n, u = @stack.pop
|
80
|
+
next
|
81
|
+
end
|
82
|
+
u.dispose
|
83
|
+
break
|
84
|
+
elsif @@sub_scenes.include?(n.scene_type)
|
85
|
+
@stack.push([on, u])
|
86
|
+
u = nil
|
87
|
+
else
|
88
|
+
u.dispose
|
89
|
+
u = nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#===内部の情報を解放する
|
95
|
+
def dispose
|
96
|
+
@stack.each{|scene| scene.dispose }
|
97
|
+
end
|
98
|
+
|
99
|
+
#==シーンモジュール
|
100
|
+
#本モジュールをmixinすることにより、シーンを示すインスタンスを作成することができる
|
101
|
+
#mixinするときに気をつけなければいけないのは、本モジュールでは以下の
|
102
|
+
#モジュール変数を
|
103
|
+
#予約しているため、これらの変数の値を勝手に変えてはいけない
|
104
|
+
#・@@scenesモジュール変数(シーンクラス一覧が入っているハッシュ)
|
105
|
+
#・@@poolモジュール変数(シーン情報が入っているハッシュ)
|
106
|
+
#(互換性のために@nowを残しているが、now_sceneのみを使うときは値を上書きしてもかまわない))
|
107
|
+
#また、シーンには「シーン形式」がある。
|
108
|
+
#種類は、シーケンスな移動が出来る「通常シーン」、終了したときに移動元に戻る「サブシーン」、
|
109
|
+
#現在実行中のシーン上で並行に実行する「オーバーシーン」の3種類。
|
110
|
+
#デフォルトは「通常シーン」となっている。
|
111
|
+
#判別は、scene_typeクラスメソッドを呼び出すことで可能。デフォルトは、
|
112
|
+
#通常シーンを示すシンボル":scene"が返る。
|
113
|
+
#形式を変えるには、scene_typeクラスメソッドをオーバーライドし、返却値を変える。
|
114
|
+
#サブシーンの時はシンボル":sub_scene"を返すように実装する
|
115
|
+
#(注1)同じクラス名のシーンを繰り返し実行したいときは、いったん別のダミーシーンを
|
116
|
+
#介してから元のシーンへ移動する必要がある
|
117
|
+
#(注2)オーバーシーン内では、シーンの移動が出来ないが、入れ子形式で
|
118
|
+
#別のオーバーシーンを積み上げる形なら移動可能。
|
119
|
+
module Scene
|
120
|
+
@@scenes = {}
|
121
|
+
@@pool = {}
|
122
|
+
|
123
|
+
def self.included(c) #:nodoc:
|
124
|
+
unless c.singleton_methods.include?(:scene_type)
|
125
|
+
def c.scene_type
|
126
|
+
return :scene
|
127
|
+
end
|
128
|
+
end
|
129
|
+
@@scenes[c.to_s] = c
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.scenes #:nodoc:
|
133
|
+
return @@scenes
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.has_scene?(s) #:nodoc:
|
137
|
+
return @@scenes.has_key?(s)
|
138
|
+
end
|
139
|
+
|
140
|
+
def initialize(story, check_only=false) #:nodoc:
|
141
|
+
return if check_only
|
142
|
+
@@pool[self.object_id] = Miyako::Story::ScenePool.new(story, nil, nil, nil)
|
143
|
+
@now = self.now_scene
|
144
|
+
self.init
|
145
|
+
end
|
146
|
+
|
147
|
+
def init_inner(p, u) #:nodoc:
|
148
|
+
@@pool[self.object_id].prev = p
|
149
|
+
@@pool[self.object_id].upper = u
|
150
|
+
end
|
151
|
+
|
152
|
+
#===前回実行したシーンを返す
|
153
|
+
#前回実行しているシーンをクラス名で返す
|
154
|
+
#但し、最初のシーンの場合はnilを返す
|
155
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
156
|
+
def story
|
157
|
+
return @@pool[self.object_id].story
|
158
|
+
end
|
159
|
+
|
160
|
+
#===サブルーチンの呼び元シーンを返す
|
161
|
+
#サブルーチンを呼び出したシーンをクラス名で返す
|
162
|
+
#サブルーチンではないときはnilを返す
|
163
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
164
|
+
def upper_scene
|
165
|
+
return @@pool[self.object_id].upper
|
166
|
+
end
|
167
|
+
|
168
|
+
def next_scene #:nodoc:
|
169
|
+
return @@pool[self.object_id].next
|
170
|
+
end
|
171
|
+
|
172
|
+
#===前回実行したシーンを返す
|
173
|
+
#前回実行しているシーンをクラス名で返す
|
174
|
+
#但し、最初のシーンの場合はnilを返す
|
175
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
176
|
+
def prev_scene
|
177
|
+
return @@pool[self.object_id].prev
|
178
|
+
end
|
179
|
+
|
180
|
+
#===現在実行中のシーンを返す
|
181
|
+
#現在実行しているシーンをクラス名で返す
|
182
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
183
|
+
def now_scene
|
184
|
+
return self.class
|
185
|
+
end
|
186
|
+
|
187
|
+
#===シーン内で使用するオブジェクトの初期化テンプレートメソッド
|
188
|
+
#シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する
|
189
|
+
def init
|
190
|
+
end
|
191
|
+
|
192
|
+
#===シーンの情報を更新するテンプレートメソッド
|
193
|
+
#
|
194
|
+
#現在実行しているシーンを繰り返し実行する場合はインスタンス変数@nowを返すように実装する
|
195
|
+
#nilを返すとシーンの処理を終了する(元のStory#runメソッド呼び出しの次に処理が移る)
|
196
|
+
#但し、scene_typeメソッドの結果が:sub_routneのとき、移動元シーンに戻る
|
197
|
+
#返却値:: 移動先シーンクラス
|
198
|
+
def execute
|
199
|
+
return now_scene
|
200
|
+
end
|
201
|
+
|
202
|
+
#===シーンに使用したデータの解放を記述するテンプレートメソッド
|
203
|
+
#initメソッドと対になっているというイメージ
|
204
|
+
def dispose
|
205
|
+
end
|
206
|
+
|
207
|
+
def next=(label) #:nodoc:
|
208
|
+
@@pool[self.object_id].next = label
|
209
|
+
end
|
210
|
+
|
211
|
+
#===シーンの解説を返す(テンプレートメソッド)
|
212
|
+
#Sceneモジュールをmixinしたとき、解説文を返す実装をしておくと、
|
213
|
+
#Scene.#lisutupメソッドを呼び出したときに、noticeメソッドの結果を取得できる
|
214
|
+
#返却値:: シーンの解説(文字列)
|
215
|
+
def notice
|
216
|
+
return ""
|
217
|
+
end
|
218
|
+
|
219
|
+
#===登録しているシーン一覧をリストアップする
|
220
|
+
#リストの内容は、"シーンクラス名(文字列),シーンクラス(ポインタ),
|
221
|
+
#解説(noticeメソッドの内容)"という書式で取得できる
|
222
|
+
#返却値:: リストアップしたシーンの配列
|
223
|
+
def self.listup
|
224
|
+
list = Array.new
|
225
|
+
sns = @@scenes
|
226
|
+
sns.keys.sort.each{|k| list.push("#{k}, #{sns[k]}, \"#{sns[k].notice}\"\n") }
|
227
|
+
return list
|
228
|
+
end
|
229
|
+
|
230
|
+
#===Scene.#listupメソッドの内容をCSVファイルに保存する
|
231
|
+
#_csvname_:: 保存するCSVファイルパス
|
232
|
+
def self.listup2csv(csvfname)
|
233
|
+
csvfname += ".csv" if csvfname !~ /\.csv$/
|
234
|
+
list = self.listup
|
235
|
+
File.open(csvfname, "w"){|f| list.each{|l| f.print l } }
|
236
|
+
end
|
237
|
+
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
data/lib/Miyako/API/story.rb
CHANGED
@@ -151,7 +151,7 @@ module Miyako
|
|
151
151
|
@@scenes = {}
|
152
152
|
@@pool = {}
|
153
153
|
|
154
|
-
def
|
154
|
+
def self.included(c) #:nodoc:
|
155
155
|
unless c.singleton_methods.include?(:scene_type)
|
156
156
|
def c.scene_type
|
157
157
|
return :scene
|
@@ -160,11 +160,11 @@ module Miyako
|
|
160
160
|
@@scenes[c.to_s] = c
|
161
161
|
end
|
162
162
|
|
163
|
-
def
|
163
|
+
def self.scenes #:nodoc:
|
164
164
|
return @@scenes
|
165
165
|
end
|
166
166
|
|
167
|
-
def
|
167
|
+
def self.has_scene?(s) #:nodoc:
|
168
168
|
return @@scenes.has_key?(s)
|
169
169
|
end
|
170
170
|
|
@@ -267,7 +267,7 @@ module Miyako
|
|
267
267
|
#リストの内容は、"シーンクラス名(文字列),シーンクラス(ポインタ),
|
268
268
|
#解説(noticeメソッドの内容)"という書式で取得できる
|
269
269
|
#返却値:: リストアップしたシーンの配列
|
270
|
-
def
|
270
|
+
def self.listup
|
271
271
|
list = Array.new
|
272
272
|
sns = @@scenes
|
273
273
|
sns.keys.sort.each{|k| list.push("#{k}, #{sns[k]}, \"#{sns[k].notice}\"\n") }
|
@@ -276,7 +276,7 @@ module Miyako
|
|
276
276
|
|
277
277
|
#===Scene.#listupメソッドの内容をCSVファイルに保存する
|
278
278
|
#_csvname_:: 保存するCSVファイルパス
|
279
|
-
def
|
279
|
+
def self.listup2csv(csvfname)
|
280
280
|
csvfname += ".csv" if csvfname !~ /\.csv$/
|
281
281
|
list = self.listup
|
282
282
|
File.open(csvfname, "w"){|f| list.each{|l| f.print l } }
|
data/lib/Miyako/API/yuki.rb
CHANGED
@@ -146,6 +146,7 @@ module Miyako
|
|
146
146
|
def initialize(*params, &proc)
|
147
147
|
@yuki = { }
|
148
148
|
@over_yuki = nil
|
149
|
+
@under_yuki = nil
|
149
150
|
@over_exec = false
|
150
151
|
@text_box = nil
|
151
152
|
@command_box = nil
|
@@ -164,6 +165,7 @@ module Miyako
|
|
164
165
|
@select_ok = false
|
165
166
|
@select_cancel = false
|
166
167
|
@select_amount = [0, 0]
|
168
|
+
@cencel = nil
|
167
169
|
@mouse_amount = nil
|
168
170
|
|
169
171
|
@mouse_enable = true
|
@@ -238,6 +240,19 @@ module Miyako
|
|
238
240
|
@over_yuki
|
239
241
|
end
|
240
242
|
|
243
|
+
def over_engine=(engine)
|
244
|
+
@over_yuki = engine
|
245
|
+
engine.under_engine = self
|
246
|
+
end
|
247
|
+
|
248
|
+
def under_engine
|
249
|
+
@under_yuki
|
250
|
+
end
|
251
|
+
|
252
|
+
def under_engine=(engine)
|
253
|
+
@under_yuki = engine
|
254
|
+
end
|
255
|
+
|
241
256
|
#===マウスでの制御を可能にする
|
242
257
|
#ゲームパッド・キーボードでのコマンド・ポーズ制御を行えるが、
|
243
258
|
#それに加えて、マウスでもゲームパッド・キーボードでの制御が行える
|
@@ -283,6 +298,22 @@ module Miyako
|
|
283
298
|
return self
|
284
299
|
end
|
285
300
|
|
301
|
+
def render_all
|
302
|
+
self.bgs.render
|
303
|
+
self.visibles.render
|
304
|
+
self.textbox_all.render
|
305
|
+
self.commandbox_all.render unless self.box_shared?
|
306
|
+
self.pre_visibles.render
|
307
|
+
end
|
308
|
+
|
309
|
+
def render_to_all(dst)
|
310
|
+
self.bgs.render_to(dst)
|
311
|
+
self.visibles.render_to(dst)
|
312
|
+
self.textbox_all.render_to(dst)
|
313
|
+
self.commandbox_all.render_to(dst) unless self.box_shared?
|
314
|
+
self.pre_visibles.render_to(dst)
|
315
|
+
end
|
316
|
+
|
286
317
|
#===Yuki#showで表示指定した画像のアニメーションを更新する
|
287
318
|
#showメソッドで指定した画像のupdate_animationメソッドを呼び出す
|
288
319
|
#返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
|
@@ -724,9 +755,9 @@ module Miyako
|
|
724
755
|
#_plot_:: プロットインスタンス。すでにsetupなどで登録しているときはnilを渡す
|
725
756
|
#_params_:: プロット実行開始時に、プロットに渡す引数
|
726
757
|
#返却値:: 自分自身を返す
|
727
|
-
def over_exec(yuki, plot, *params)
|
758
|
+
def over_exec(yuki = nil, plot = nil, *params)
|
728
759
|
raise MiyakoValueError, "This Yuki engine is same as self!" if yuki.eql?(self)
|
729
|
-
|
760
|
+
self.over_engine = yuki if yuki
|
730
761
|
@over_yuki.start_plot(plot, *params)
|
731
762
|
return self
|
732
763
|
end
|
@@ -848,7 +879,7 @@ module Miyako
|
|
848
879
|
@pause_release = true
|
849
880
|
elsif @selecting
|
850
881
|
@select_ok = true if @ok_checks.inject(false){|r, c| r |= c.call }
|
851
|
-
@select_cancel = true if @cancel_checks.inject(false){|r, c| r |= c.call }
|
882
|
+
@select_cancel = true if @cancel && @cancel_checks.inject(false){|r, c| r |= c.call }
|
852
883
|
@select_amount = @key_amount_proc.call
|
853
884
|
@mouse_amount = @mouse_amount_proc.call
|
854
885
|
end
|
data/lib/Miyako/miyako.rb
CHANGED
@@ -63,7 +63,7 @@ Thread.abort_on_exception = true
|
|
63
63
|
|
64
64
|
#==Miyako基幹モジュール
|
65
65
|
module Miyako
|
66
|
-
VERSION = "2.1.
|
66
|
+
VERSION = "2.1.7"
|
67
67
|
|
68
68
|
#===アプリケーション実行中に演奏する音楽のサンプリングレートを指定する
|
69
69
|
#単位はHz(周波数)
|
@@ -155,6 +155,7 @@ require 'Miyako/API/map'
|
|
155
155
|
require 'Miyako/API/fixedmap'
|
156
156
|
require 'Miyako/API/map_event'
|
157
157
|
require 'Miyako/API/story'
|
158
|
+
require 'Miyako/API/simple_story'
|
158
159
|
require 'Miyako/API/diagram'
|
159
160
|
|
160
161
|
module Miyako
|
data/miyako_drawing.c
CHANGED
@@ -83,7 +83,6 @@ static void get_position(VALUE pos, Sint16 *x, Sint16 *y)
|
|
83
83
|
}
|
84
84
|
|
85
85
|
/*
|
86
|
-
ポリゴン描画
|
87
86
|
*/
|
88
87
|
static VALUE drawing_draw_polygon(int argc, VALUE *argv, VALUE self)
|
89
88
|
{
|
@@ -101,7 +100,6 @@ static VALUE drawing_draw_polygon(int argc, VALUE *argv, VALUE self)
|
|
101
100
|
|
102
101
|
rb_scan_args(argc, argv, "32", &vdst, &pairs, &mcolor, &fill, &aa);
|
103
102
|
|
104
|
-
// bitmapメソッドを持っていれば、メソッドの値をvdstとする
|
105
103
|
methods = rb_funcall(vdst, rb_intern("methods"), 0);
|
106
104
|
if(rb_ary_includes(methods, rb_str_intern(rb_str_new2("to_unit"))) == Qfalse &&
|
107
105
|
rb_ary_includes(methods, rb_str_intern(rb_str_new2("bitmap"))) == Qfalse
|
@@ -112,11 +110,10 @@ static VALUE drawing_draw_polygon(int argc, VALUE *argv, VALUE self)
|
|
112
110
|
vdst = rb_funcall(vdst, rb_intern("bitmap"), 0);
|
113
111
|
|
114
112
|
vertexes = RARRAY_LEN(pairs);
|
115
|
-
|
113
|
+
|
116
114
|
if(vertexes > 65536)
|
117
115
|
rb_raise(eMiyakoError, "too many pairs. pairs is less than 65536.");
|
118
116
|
|
119
|
-
// 範囲チェック
|
120
117
|
for(i=0; i<vertexes; i++)
|
121
118
|
{
|
122
119
|
VALUE vertex = *(RARRAY_PTR(pairs)+i);
|
@@ -124,7 +121,7 @@ static VALUE drawing_draw_polygon(int argc, VALUE *argv, VALUE self)
|
|
124
121
|
get_position(vertex, &x, &y);
|
125
122
|
}
|
126
123
|
|
127
|
-
|
124
|
+
dst = GetSurface(vdst)->surface;
|
128
125
|
|
129
126
|
color = value_2_color(rb_funcall(cColor, rb_intern("to_rgb"), 1, mcolor), dst->format, &alpha);
|
130
127
|
|
@@ -177,7 +174,6 @@ static VALUE drawing_draw_polygon(int argc, VALUE *argv, VALUE self)
|
|
177
174
|
}
|
178
175
|
|
179
176
|
/*
|
180
|
-
ポリゴン描画
|
181
177
|
*/
|
182
178
|
static VALUE screen_clear(VALUE self)
|
183
179
|
{
|
data/miyako_font.c
CHANGED
@@ -271,10 +271,10 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
271
271
|
}
|
272
272
|
else
|
273
273
|
{
|
274
|
-
psrc = (Uint32 *)(ssrc->pixels);
|
275
|
-
|
276
274
|
MiyakoSize size;
|
277
275
|
|
276
|
+
psrc = (Uint32 *)(ssrc->pixels);
|
277
|
+
|
278
278
|
size.w = dst.rect.w - (src.x < 0 ? 0 : src.x);
|
279
279
|
if(size.w <= 0)
|
280
280
|
{
|
data/win/miyako_no_katana.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-miyako
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyross Makoto
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-03 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- ./lib/Miyako/API/sprite_animation.rb
|
61
61
|
- ./lib/Miyako/API/sprite_list.rb
|
62
62
|
- ./lib/Miyako/API/story.rb
|
63
|
+
- ./lib/Miyako/API/simple_story.rb
|
63
64
|
- ./lib/Miyako/API/struct_point.rb
|
64
65
|
- ./lib/Miyako/API/struct_size.rb
|
65
66
|
- ./lib/Miyako/API/struct_rect.rb
|