ruby-miyako-mswin32 2.1.0 → 2.1.1
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 +275 -20
 - data/install_miyako.rb +5 -3
 - data/lib/Miyako/API/audio.rb +11 -6
 - data/lib/Miyako/API/basic_data.rb +0 -985
 - data/lib/Miyako/API/bitmap.rb +19 -22
 - data/lib/Miyako/API/choices.rb +203 -69
 - data/lib/Miyako/API/collision.rb +451 -9
 - data/lib/Miyako/API/color.rb +177 -0
 - data/lib/Miyako/API/diagram.rb +18 -20
 - data/lib/Miyako/API/fixedmap.rb +207 -73
 - data/lib/Miyako/API/font.rb +111 -18
 - data/lib/Miyako/API/i_yuki.rb +1201 -0
 - data/lib/Miyako/API/input.rb +65 -0
 - data/lib/Miyako/API/layout.rb +41 -29
 - data/lib/Miyako/API/map.rb +202 -157
 - data/lib/Miyako/API/map_event.rb +86 -19
 - data/lib/Miyako/API/map_struct.rb +268 -0
 - data/lib/Miyako/API/modules.rb +136 -37
 - data/lib/Miyako/API/movie.rb +8 -8
 - data/lib/Miyako/API/parts.rb +63 -20
 - data/lib/Miyako/API/plane.rb +4 -4
 - data/lib/Miyako/API/screen.rb +16 -8
 - data/lib/Miyako/API/sprite.rb +290 -23
 - data/lib/Miyako/API/sprite_animation.rb +23 -11
 - data/lib/Miyako/API/sprite_list.rb +406 -183
 - data/lib/Miyako/API/story.rb +4 -65
 - data/lib/Miyako/API/struct_point.rb +157 -0
 - data/lib/Miyako/API/struct_rect.rb +233 -0
 - data/lib/Miyako/API/struct_segment.rb +641 -0
 - data/lib/Miyako/API/struct_size.rb +158 -0
 - data/lib/Miyako/API/struct_square.rb +253 -0
 - data/lib/Miyako/API/textbox.rb +49 -35
 - data/lib/Miyako/API/viewport.rb +5 -5
 - data/lib/Miyako/API/wait_counter.rb +350 -0
 - data/lib/Miyako/API/yuki.rb +95 -60
 - data/lib/Miyako/EXT/raster_scroll.rb +30 -8
 - data/lib/Miyako/EXT/slides.rb +6 -6
 - data/lib/Miyako/miyako.rb +25 -11
 - data/lib/Miyako/miyako_no_katana.so +0 -0
 - data/lib/miyako.rb +28 -0
 - data/lib/miyako_require_only.rb +35 -0
 - data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
 - data/sample/Room3/blue.rb +19 -19
 - data/sample/Room3/green.rb +9 -9
 - data/sample/Room3/main.rb +12 -12
 - data/sample/Room3/red.rb +12 -12
 - data/sample/Room3/title.rb +15 -10
 - data/sample/collision_test2.rb +2 -1
 - data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
 - data/sample/map_test/main_scene.rb +12 -10
 - data/sample/map_test/map_manager.rb +14 -13
 - data/sample/rasterscroll.rb +5 -5
 - data/sample/takahashi.rb +3 -3
 - data/sample/textbox_sample.rb +8 -5
 - data/sample/transform.rb +2 -1
 - data/uninstall_miyako.rb +4 -1
 - metadata +13 -4
 - data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
 - data/sample/cairo_sample.rb +0 -25
 
    
        data/lib/Miyako/API/fixedmap.rb
    CHANGED
    
    | 
         @@ -29,12 +29,12 @@ module Miyako 
     | 
|
| 
       29 
29 
     | 
    
         
             
                include SpriteBase
         
     | 
| 
       30 
30 
     | 
    
         
             
                include Animation
         
     | 
| 
       31 
31 
     | 
    
         
             
                include Layout
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       33 
33 
     | 
    
         
             
                @@idx_ix = [-1, 2, 4]
         
     | 
| 
       34 
34 
     | 
    
         
             
                @@idx_iy = [-1, 0, 6]
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
         
     | 
| 
       37 
     | 
    
         
            -
                attr_reader :name, :map_layers, :mapchips, : 
     | 
| 
      
 37 
     | 
    
         
            +
                attr_reader :name, :map_layers, :mapchips, :map_size, :map_w, :map_h
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                #==あとで書く
         
     | 
| 
       40 
40 
     | 
    
         
             
                class FixedMapLayer #:nodoc: all
         
     | 
| 
         @@ -43,10 +43,10 @@ module Miyako 
     | 
|
| 
       43 
43 
     | 
    
         
             
                  extend Forwardable
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                  @@use_chip_list = Hash.new(nil)
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       47 
47 
     | 
    
         
             
                  attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
         
     | 
| 
       48 
48 
     | 
    
         
             
                  attr_accessor :mapchip, :mapchip_units
         
     | 
| 
       49 
     | 
    
         
            -
                  attr_reader :pos
         
     | 
| 
      
 49 
     | 
    
         
            +
                  attr_reader :pos, :ignore_list
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
                  def round(v, max) #:nodoc:
         
     | 
| 
       52 
52 
     | 
    
         
             
                    v = max + (v % max) if v < 0
         
     | 
| 
         @@ -90,9 +90,11 @@ module Miyako 
     | 
|
| 
       90 
90 
     | 
    
         
             
                                               :ox => (idx % @mapchip.size.w) * @ow, :oy => (idx / @mapchip.size.w) * @oh,
         
     | 
| 
       91 
91 
     | 
    
         
             
                                               :ow => @ow, :oh => @oh)
         
     | 
| 
       92 
92 
     | 
    
         
             
                    }
         
     | 
| 
      
 93 
     | 
    
         
            +
                    @def_ignore = -1
         
     | 
| 
      
 94 
     | 
    
         
            +
                    @ignore_list = []
         
     | 
| 
       93 
95 
     | 
    
         
             
                    reSize
         
     | 
| 
       94 
96 
     | 
    
         
             
                  end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       96 
98 
     | 
    
         
             
                  def initialize_copy(obj) #:nodoc:
         
     | 
| 
       97 
99 
     | 
    
         
             
                    @mapchip = @mapchip.dup
         
     | 
| 
       98 
100 
     | 
    
         
             
                    @size = @size.dup
         
     | 
| 
         @@ -130,6 +132,15 @@ module Miyako 
     | 
|
| 
       130 
132 
     | 
    
         
             
                                     @modpy2[round(y, @size.h)])
         
     | 
| 
       131 
133 
     | 
    
         
             
                  end
         
     | 
| 
       132 
134 
     | 
    
         | 
| 
      
 135 
     | 
    
         
            +
                  #===レイヤー配列を取得する
         
     | 
| 
      
 136 
     | 
    
         
            +
                  #レイヤーを構成している配列を取得する
         
     | 
| 
      
 137 
     | 
    
         
            +
                  #取得した配列にアクセスするときの書式は、以下のようになる。
         
     | 
| 
      
 138 
     | 
    
         
            +
                  #layer[y][x]
         
     | 
| 
      
 139 
     | 
    
         
            +
                  #返却値:: 所持しているレイヤー配列
         
     | 
| 
      
 140 
     | 
    
         
            +
                  def layer
         
     | 
| 
      
 141 
     | 
    
         
            +
                    @mapdat
         
     | 
| 
      
 142 
     | 
    
         
            +
                  end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
       133 
144 
     | 
    
         
             
                  #===指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
         
     | 
| 
       134 
145 
     | 
    
         
             
                  #但し、引数には、Rect(x,y,w,h)形式のインスタンスを渡す
         
     | 
| 
       135 
146 
     | 
    
         
             
                  #_rect_:: キャラクタの矩形
         
     | 
| 
         @@ -159,61 +170,79 @@ module Miyako 
     | 
|
| 
       159 
170 
     | 
    
         
             
                  #===キャラクタとマップチップが重なっているかどうか問い合わせる
         
     | 
| 
       160 
171 
     | 
    
         
             
                  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる
         
     | 
| 
       161 
172 
     | 
    
         
             
                  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
         
     | 
| 
       162 
     | 
    
         
            -
                   
     | 
| 
      
 173 
     | 
    
         
            +
                  #指定の位置のマップチップ番号が以下の時はfalseを返す
         
     | 
| 
      
 174 
     | 
    
         
            +
                  #1)-1(未定義)のとき
         
     | 
| 
      
 175 
     | 
    
         
            +
                  #2)FixexMapLayer#ignore_listに含まれているとき
         
     | 
| 
      
 176 
     | 
    
         
            +
                  #3)引数ignoresに含まれているとき
         
     | 
| 
       163 
177 
     | 
    
         
             
                  #_type_:: 移動形式(0以上の整数)
         
     | 
| 
       164 
178 
     | 
    
         
             
                  #_pos_:: 調査対象のマップチップの位置
         
     | 
| 
       165 
179 
     | 
    
         
             
                  #_collision_:: キャラクタのコリジョン
         
     | 
| 
       166 
     | 
    
         
            -
                  # 
     | 
| 
      
 180 
     | 
    
         
            +
                  #_cpos_:: キャラクタの位置
         
     | 
| 
      
 181 
     | 
    
         
            +
                  #_ignores_:: コリジョンの対象にしないマップチップ番号のリスト
         
     | 
| 
       167 
182 
     | 
    
         
             
                  #返却値:: コリジョンが重なっていればtrueを返す
         
     | 
| 
       168 
     | 
    
         
            -
                  def collision?(type, pos, collision,  
     | 
| 
      
 183 
     | 
    
         
            +
                  def collision?(type, pos, collision, cpos, *ignores)
         
     | 
| 
       169 
184 
     | 
    
         
             
                    code = get_code(*pos.to_a)
         
     | 
| 
       170 
     | 
    
         
            -
                    return false if code ==  
     | 
| 
       171 
     | 
    
         
            -
                    return @mapchip.collision_table[type][code].collision?(pos, collision,  
     | 
| 
      
 185 
     | 
    
         
            +
                    return false if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
         
     | 
| 
      
 186 
     | 
    
         
            +
                    return @mapchip.collision_table[type][code].collision?(pos, collision, cpos)
         
     | 
| 
       172 
187 
     | 
    
         
             
                  end
         
     | 
| 
       173 
188 
     | 
    
         | 
| 
       174 
189 
     | 
    
         
             
                  #===キャラクタとマップチップが隣り合っているかどうか問い合わせる
         
     | 
| 
       175 
190 
     | 
    
         
             
                  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる
         
     | 
| 
       176 
191 
     | 
    
         
             
                  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
         
     | 
| 
       177 
     | 
    
         
            -
                   
     | 
| 
      
 192 
     | 
    
         
            +
                  #指定の位置のマップチップ番号が以下の時はfalseを返す
         
     | 
| 
      
 193 
     | 
    
         
            +
                  #1)-1(未定義)のとき
         
     | 
| 
      
 194 
     | 
    
         
            +
                  #2)FixexMapLayer#ignore_listに含まれているとき
         
     | 
| 
      
 195 
     | 
    
         
            +
                  #3)引数ignoresに含まれているとき
         
     | 
| 
       178 
196 
     | 
    
         
             
                  #_type_:: 移動形式(0以上の整数)
         
     | 
| 
       179 
197 
     | 
    
         
             
                  #_pos_:: 調査対象のマップチップの位置
         
     | 
| 
       180 
198 
     | 
    
         
             
                  #_collision_:: キャラクタのコリジョン
         
     | 
| 
       181 
     | 
    
         
            -
                  # 
     | 
| 
      
 199 
     | 
    
         
            +
                  #_cpos_:: キャラクタの位置
         
     | 
| 
      
 200 
     | 
    
         
            +
                  #_ignores_:: コリジョンの対象にしないマップチップ番号のリスト
         
     | 
| 
       182 
201 
     | 
    
         
             
                  #返却値:: コリジョンが隣り合っていればtrueを返す
         
     | 
| 
       183 
     | 
    
         
            -
                  def meet?(type, pos, collision, rect)
         
     | 
| 
      
 202 
     | 
    
         
            +
                  def meet?(type, pos, collision, rect, *ignores)
         
     | 
| 
       184 
203 
     | 
    
         
             
                    code = get_code(*pos.to_a)
         
     | 
| 
       185 
     | 
    
         
            -
                    return false if code ==  
     | 
| 
       186 
     | 
    
         
            -
                    return @mapchip.collision_table[type][code].meet?(pos, collision,  
     | 
| 
      
 204 
     | 
    
         
            +
                    return false if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
         
     | 
| 
      
 205 
     | 
    
         
            +
                    return @mapchip.collision_table[type][code].meet?(pos, collision, cpos)
         
     | 
| 
       187 
206 
     | 
    
         
             
                  end
         
     | 
| 
       188 
207 
     | 
    
         | 
| 
       189 
208 
     | 
    
         
             
                  #===キャラクタとマップチップが覆い被さっているかどうか問い合わせる
         
     | 
| 
       190 
209 
     | 
    
         
             
                  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる
         
     | 
| 
       191 
210 
     | 
    
         
             
                  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
         
     | 
| 
       192 
     | 
    
         
            -
                   
     | 
| 
      
 211 
     | 
    
         
            +
                  #指定の位置のマップチップ番号が以下の時はfalseを返す
         
     | 
| 
      
 212 
     | 
    
         
            +
                  #1)-1(未定義)のとき
         
     | 
| 
      
 213 
     | 
    
         
            +
                  #2)FixexMapLayer#ignore_listに含まれているとき
         
     | 
| 
      
 214 
     | 
    
         
            +
                  #3)引数ignoresに含まれているとき
         
     | 
| 
       193 
215 
     | 
    
         
             
                  #_type_:: 移動形式(0以上の整数)
         
     | 
| 
       194 
216 
     | 
    
         
             
                  #_pos_:: 調査対象のマップチップの位置
         
     | 
| 
       195 
217 
     | 
    
         
             
                  #_collision_:: キャラクタのコリジョン
         
     | 
| 
       196 
     | 
    
         
            -
                  # 
     | 
| 
      
 218 
     | 
    
         
            +
                  #_cpos_:: キャラクタの位置
         
     | 
| 
      
 219 
     | 
    
         
            +
                  #_ignores_:: コリジョンの対象にしないマップチップ番号のリスト
         
     | 
| 
       197 
220 
     | 
    
         
             
                  #返却値:: どちらかのコリジョンが覆い被さっていればtrueを返す
         
     | 
| 
       198 
     | 
    
         
            -
                  def cover?(type, pos, collision, rect)
         
     | 
| 
      
 221 
     | 
    
         
            +
                  def cover?(type, pos, collision, rect, *ignores)
         
     | 
| 
       199 
222 
     | 
    
         
             
                    code = get_code(*pos.to_a)
         
     | 
| 
       200 
     | 
    
         
            -
                    return false if code ==  
     | 
| 
       201 
     | 
    
         
            -
                    return @mapchip.collision_table[type][code].cover?(pos, collision,  
     | 
| 
      
 223 
     | 
    
         
            +
                    return false if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
         
     | 
| 
      
 224 
     | 
    
         
            +
                    return @mapchip.collision_table[type][code].cover?(pos, collision, cpos)
         
     | 
| 
       202 
225 
     | 
    
         
             
                  end
         
     | 
| 
       203 
226 
     | 
    
         | 
| 
       204 
227 
     | 
    
         
             
                  #===キャラクタとマップチップが重なっているかどうか問い合わせる
         
     | 
| 
       205 
228 
     | 
    
         
             
                  #指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる
         
     | 
| 
       206 
     | 
    
         
            -
                   
     | 
| 
      
 229 
     | 
    
         
            +
                  #指定の位置のマップチップ番号が以下の時はtrueを返す
         
     | 
| 
      
 230 
     | 
    
         
            +
                  #1)-1(未定義)のとき
         
     | 
| 
      
 231 
     | 
    
         
            +
                  #2)FixexMapLayer#ignore_listに含まれているとき
         
     | 
| 
      
 232 
     | 
    
         
            +
                  #3)引数ignoresに含まれているとき
         
     | 
| 
      
 233 
     | 
    
         
            +
                  #また、dx==0, dy==0のときもtrueを返す
         
     | 
| 
       207 
234 
     | 
    
         
             
                  #_type_:: 移動形式(0以上の整数)
         
     | 
| 
       208 
235 
     | 
    
         
             
                  #_inout_:: 入退形式(:in もしくは :out)
         
     | 
| 
       209 
236 
     | 
    
         
             
                  #_pos_:: 調査対象のマップチップの位置
         
     | 
| 
       210 
237 
     | 
    
         
             
                  #_dx_:: 移動量(x座標)
         
     | 
| 
       211 
238 
     | 
    
         
             
                  #_dy_:: 移動量(y座標)
         
     | 
| 
      
 239 
     | 
    
         
            +
                  #_ignores_:: チェックの対象にしないマップチップ番号のリスト。番号に含まれているときはtrueを返す
         
     | 
| 
       212 
240 
     | 
    
         
             
                  #返却値:: 移動可能ならばtrueを返す
         
     | 
| 
       213 
     | 
    
         
            -
                  def can_access?(type, inout, pos, dx, dy)
         
     | 
| 
      
 241 
     | 
    
         
            +
                  def can_access?(type, inout, pos, dx, dy, *ignores)
         
     | 
| 
      
 242 
     | 
    
         
            +
                    return true if dx == 0 and dy == 0
         
     | 
| 
       214 
243 
     | 
    
         
             
                    code = get_code(pos[0]+dx, pos[1]+dy)
         
     | 
| 
       215 
     | 
    
         
            -
                    return true if code ==  
     | 
| 
       216 
     | 
    
         
            -
                    index =  
     | 
| 
      
 244 
     | 
    
         
            +
                    return true if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
         
     | 
| 
      
 245 
     | 
    
         
            +
                    index = MapDir.index2(inout, dx, dy)
         
     | 
| 
       217 
246 
     | 
    
         
             
                    return true if index == -1
         
     | 
| 
       218 
247 
     | 
    
         
             
                    return @mapchip.access_table[type][code][index]
         
     | 
| 
       219 
248 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -221,6 +250,8 @@ module Miyako 
     | 
|
| 
       221 
250 
     | 
    
         
             
                  def dispose #:nodoc:
         
     | 
| 
       222 
251 
     | 
    
         
             
                    @mapdat = nil
         
     | 
| 
       223 
252 
     | 
    
         
             
                    @baseimg = nil
         
     | 
| 
      
 253 
     | 
    
         
            +
                    @ignore_list.clear
         
     | 
| 
      
 254 
     | 
    
         
            +
                    @ignore_list = []
         
     | 
| 
       224 
255 
     | 
    
         
             
                  end
         
     | 
| 
       225 
256 
     | 
    
         | 
| 
       226 
257 
     | 
    
         
             
                  #===マップレイヤーを画面に描画する
         
     | 
| 
         @@ -258,88 +289,191 @@ module Miyako 
     | 
|
| 
       258 
289 
     | 
    
         
             
                #先頭に戻って繰り返し渡す仕様になっている
         
     | 
| 
       259 
290 
     | 
    
         
             
                #各MapChip構造体のマップチップの大きさを同じにしておく必要がある
         
     | 
| 
       260 
291 
     | 
    
         
             
                #_mapchips_:: マップチップ構造体群(MapChip構造体単体もしくは配列)
         
     | 
| 
       261 
     | 
    
         
            -
                # 
     | 
| 
       262 
     | 
    
         
            -
                #_event_manager_:: MapEventManager 
     | 
| 
      
 292 
     | 
    
         
            +
                #_map_struct_:: MapStruct構造体のインスタンス
         
     | 
| 
      
 293 
     | 
    
         
            +
                #_event_manager_:: MapEventManagerクラスのインスタンス。省略時(イベントを使わない時)はnil
         
     | 
| 
       263 
294 
     | 
    
         
             
                #返却値:: 生成したインスタンス
         
     | 
| 
       264 
     | 
    
         
            -
                def initialize(mapchips,  
     | 
| 
       265 
     | 
    
         
            -
                  raise MiyakoIOError.no_file(layer_csv) unless File.exist?(layer_csv)
         
     | 
| 
      
 295 
     | 
    
         
            +
                def initialize(mapchips, map_struct, event_manager=nil)
         
     | 
| 
       266 
296 
     | 
    
         
             
                  init_layout
         
     | 
| 
       267 
297 
     | 
    
         
             
                  @visible = true
         
     | 
| 
       268 
     | 
    
         
            -
                   
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
      
 298 
     | 
    
         
            +
                  if event_manager
         
     | 
| 
      
 299 
     | 
    
         
            +
                    @em = event_manager.dup
         
     | 
| 
      
 300 
     | 
    
         
            +
                    @em.set(self)
         
     | 
| 
      
 301 
     | 
    
         
            +
                  else
         
     | 
| 
      
 302 
     | 
    
         
            +
                    @em = nil
         
     | 
| 
      
 303 
     | 
    
         
            +
                  end
         
     | 
| 
       271 
304 
     | 
    
         
             
                  @mapchips = mapchips.to_a
         
     | 
| 
       272 
     | 
    
         
            -
                  layer_data = CSV.readlines(layer_csv)
         
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
       274 
     | 
    
         
            -
                  raise MiyakoFileFormatError, "This file is not Miyako Map Layer file! : #{layer_csv}" unless layer_data.shift[0] == "Miyako Maplayer"
         
     | 
| 
       275 
     | 
    
         
            -
             
     | 
| 
       276 
     | 
    
         
            -
                  tmp = layer_data.shift # 空行の空読み込み
         
     | 
| 
       277 
     | 
    
         
            -
             
     | 
| 
       278 
     | 
    
         
            -
                  @size = Size.new(tmp[0].to_i, tmp[1].to_i)
         
     | 
| 
       279 
     | 
    
         
            -
                  @w = @size.w * @mapchips.first.chip_size.w
         
     | 
| 
       280 
     | 
    
         
            -
                  @h = @size.h * @mapchips.first.chip_size.h
         
     | 
| 
       281 
305 
     | 
    
         | 
| 
       282 
     | 
    
         
            -
                   
     | 
| 
      
 306 
     | 
    
         
            +
                  @map_size = map_struct.size
         
     | 
| 
      
 307 
     | 
    
         
            +
                  @map_w = @map_size.w * @mapchips.first.chip_size.w
         
     | 
| 
      
 308 
     | 
    
         
            +
                  @map_h = @map_size.h * @mapchips.first.chip_size.h
         
     | 
| 
       283 
309 
     | 
    
         | 
| 
       284 
     | 
    
         
            -
                   
     | 
| 
       285 
     | 
    
         
            -
                  brlist = []
         
     | 
| 
       286 
     | 
    
         
            -
                  layers.times{|n|
         
     | 
| 
       287 
     | 
    
         
            -
                    name = layer_data.shift[0]
         
     | 
| 
       288 
     | 
    
         
            -
                    values = []
         
     | 
| 
       289 
     | 
    
         
            -
                    @size.h.times{|y|
         
     | 
| 
       290 
     | 
    
         
            -
                      values << layer_data.shift.map{|m| m.to_i}
         
     | 
| 
       291 
     | 
    
         
            -
                    }
         
     | 
| 
       292 
     | 
    
         
            -
                    if name == "<event>"
         
     | 
| 
       293 
     | 
    
         
            -
                      evlist << values
         
     | 
| 
       294 
     | 
    
         
            -
                    else
         
     | 
| 
       295 
     | 
    
         
            -
                      brlist << values
         
     | 
| 
       296 
     | 
    
         
            -
                    end
         
     | 
| 
       297 
     | 
    
         
            -
                  }
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
                  @event_layer = nil
         
     | 
| 
      
 310 
     | 
    
         
            +
                  @event_layers = []
         
     | 
| 
       300 
311 
     | 
    
         | 
| 
       301 
     | 
    
         
            -
                   
     | 
| 
       302 
     | 
    
         
            -
                     
     | 
| 
       303 
     | 
    
         
            -
                     
     | 
| 
       304 
     | 
    
         
            -
                       
     | 
| 
       305 
     | 
    
         
            -
             
     | 
| 
       306 
     | 
    
         
            -
                         
     | 
| 
      
 312 
     | 
    
         
            +
                  if map_struct.elayers
         
     | 
| 
      
 313 
     | 
    
         
            +
                    raise MiyakoError "Event Manager is not registered!" unless @em
         
     | 
| 
      
 314 
     | 
    
         
            +
                    map_struct.elayers.each{|events|
         
     | 
| 
      
 315 
     | 
    
         
            +
                      event_layer = Array.new
         
     | 
| 
      
 316 
     | 
    
         
            +
                      events.each_with_index{|ly, y|
         
     | 
| 
      
 317 
     | 
    
         
            +
                        ly.each_with_index{|code, x|
         
     | 
| 
      
 318 
     | 
    
         
            +
                          next unless @em.include?(code)
         
     | 
| 
      
 319 
     | 
    
         
            +
                          event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
         
     | 
| 
      
 320 
     | 
    
         
            +
                        }
         
     | 
| 
       307 
321 
     | 
    
         
             
                      }
         
     | 
| 
      
 322 
     | 
    
         
            +
                      @event_layers << event_layer
         
     | 
| 
       308 
323 
     | 
    
         
             
                    }
         
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
       310 
     | 
    
         
            -
             
     | 
| 
      
 324 
     | 
    
         
            +
                  end
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
      
 326 
     | 
    
         
            +
                  @event_layers << [] if @event_layers.empty?
         
     | 
| 
       311 
327 
     | 
    
         | 
| 
       312 
328 
     | 
    
         
             
                  mc = @mapchips.cycle
         
     | 
| 
       313 
     | 
    
         
            -
                  @mapchips = mc.take( 
     | 
| 
      
 329 
     | 
    
         
            +
                  @mapchips = mc.take(map_struct.layer_num)
         
     | 
| 
       314 
330 
     | 
    
         
             
                  @map_layers = []
         
     | 
| 
       315 
     | 
    
         
            -
                   
     | 
| 
      
 331 
     | 
    
         
            +
                  map_struct.layers.each{|br|
         
     | 
| 
       316 
332 
     | 
    
         
             
                    br = br.map{|b| b.map{|bb| bb >= @mapchips.first.chips ? -1 : bb } }
         
     | 
| 
       317 
     | 
    
         
            -
                    @map_layers.push(FixedMapLayer.new(mc.next, br, @ 
     | 
| 
      
 333 
     | 
    
         
            +
                    @map_layers.push(FixedMapLayer.new(mc.next, br, @map_size))
         
     | 
| 
       318 
334 
     | 
    
         
             
                  }
         
     | 
| 
       319 
     | 
    
         
            -
                  set_layout_size(@ 
     | 
| 
      
 335 
     | 
    
         
            +
                  set_layout_size(@map_w, @map_h)
         
     | 
| 
       320 
336 
     | 
    
         
             
                end
         
     | 
| 
       321 
     | 
    
         
            -
             
     | 
| 
      
 337 
     | 
    
         
            +
             
     | 
| 
       322 
338 
     | 
    
         
             
                def initialize_copy(obj) #:nodoc:
         
     | 
| 
       323 
339 
     | 
    
         
             
                  @map_layers = @map_layers.dup
         
     | 
| 
       324 
340 
     | 
    
         
             
                  @event_layers = @event_layers.dup
         
     | 
| 
       325 
     | 
    
         
            -
                  @em = em.dup
         
     | 
| 
      
 341 
     | 
    
         
            +
                  @em = @em.dup if @em
         
     | 
| 
       326 
342 
     | 
    
         
             
                  @mapchips = @mapchips.dup
         
     | 
| 
       327 
     | 
    
         
            -
                  @ 
     | 
| 
      
 343 
     | 
    
         
            +
                  @map_size = @map_size.dup
         
     | 
| 
       328 
344 
     | 
    
         
             
                  copy_layout
         
     | 
| 
       329 
345 
     | 
    
         
             
                end
         
     | 
| 
       330 
346 
     | 
    
         | 
| 
       331 
347 
     | 
    
         
             
                #===マップにイベントを追加する
         
     | 
| 
      
 348 
     | 
    
         
            +
                #イベントレイヤーでの番号はイベント番号と一致する
         
     | 
| 
      
 349 
     | 
    
         
            +
                #ブロックを渡すと、求めたマップチップ番号をブロック引数として受け取る評価を行える
         
     | 
| 
       332 
350 
     | 
    
         
             
                #_idx_:: 追加するイベントレイヤの指標
         
     | 
| 
       333 
351 
     | 
    
         
             
                #_code_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
         
     | 
| 
       334 
352 
     | 
    
         
             
                #_x_:: マップ上の位置(x方向)
         
     | 
| 
       335 
353 
     | 
    
         
             
                #_y_:: マップ常温位置(y方向)
         
     | 
| 
       336 
354 
     | 
    
         
             
                #返却値:: 自分自身を返す
         
     | 
| 
       337 
355 
     | 
    
         
             
                def add_event(idx, code, x, y)
         
     | 
| 
       338 
     | 
    
         
            -
                   
     | 
| 
      
 356 
     | 
    
         
            +
                  raise MiyakoError "Event Manager is not registered!" unless @em
         
     | 
| 
      
 357 
     | 
    
         
            +
                  raise MiyakoError "Unregisted event code! : #{code}" unless @em.include?(code)
         
     | 
| 
       339 
358 
     | 
    
         
             
                  @event_layers[idx].push(@em.create(code, x, y))
         
     | 
| 
       340 
359 
     | 
    
         
             
                  return self
         
     | 
| 
       341 
360 
     | 
    
         
             
                end
         
     | 
| 
       342 
361 
     | 
    
         | 
| 
      
 362 
     | 
    
         
            +
                #===マップに生成済みのイベントを追加する
         
     | 
| 
      
 363 
     | 
    
         
            +
                #_idx_:: 追加するイベントレイヤの指標
         
     | 
| 
      
 364 
     | 
    
         
            +
                #_event_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
         
     | 
| 
      
 365 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 366 
     | 
    
         
            +
                def append_event(idx, event)
         
     | 
| 
      
 367 
     | 
    
         
            +
                  @event_layers[idx].push(event)
         
     | 
| 
      
 368 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 369 
     | 
    
         
            +
                end
         
     | 
| 
      
 370 
     | 
    
         
            +
             
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
      
 372 
     | 
    
         
            +
                #===指定のレイヤーのイベントに対してupdateメソッドを呼び出す
         
     | 
| 
      
 373 
     | 
    
         
            +
                #イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す
         
     | 
| 
      
 374 
     | 
    
         
            +
                #_idx_:: 更新するイベントレイヤーの番号
         
     | 
| 
      
 375 
     | 
    
         
            +
                #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 376 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 377 
     | 
    
         
            +
                def event_update(idx, *params)
         
     | 
| 
      
 378 
     | 
    
         
            +
                  @event_layers[idx].each{|event| event.update(self, @event_layers[idx], *params) }
         
     | 
| 
      
 379 
     | 
    
         
            +
                  self
         
     | 
| 
      
 380 
     | 
    
         
            +
                end
         
     | 
| 
      
 381 
     | 
    
         
            +
             
     | 
| 
      
 382 
     | 
    
         
            +
                #===全てのイベントに対してupdateメソッドを呼び出す
         
     | 
| 
      
 383 
     | 
    
         
            +
                #全レイヤーのイベントを呼び出すことに注意
         
     | 
| 
      
 384 
     | 
    
         
            +
                #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 385 
     | 
    
         
            +
                def all_event_update(*params)
         
     | 
| 
      
 386 
     | 
    
         
            +
                  @event_layers.each{|el| el.each{|event| event.update(self, el, *params) } }
         
     | 
| 
      
 387 
     | 
    
         
            +
                  self
         
     | 
| 
      
 388 
     | 
    
         
            +
                end
         
     | 
| 
      
 389 
     | 
    
         
            +
             
     | 
| 
      
 390 
     | 
    
         
            +
                #===指定のレイヤーのイベントに対してupdate2メソッドを呼び出す
         
     | 
| 
      
 391 
     | 
    
         
            +
                #イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す
         
     | 
| 
      
 392 
     | 
    
         
            +
                #_idx_:: 更新するイベントレイヤーの番号
         
     | 
| 
      
 393 
     | 
    
         
            +
                #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 394 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 395 
     | 
    
         
            +
                def event_update2(idx, *params)
         
     | 
| 
      
 396 
     | 
    
         
            +
                  @event_layers[idx].each{|event| event.update2(*params) }
         
     | 
| 
      
 397 
     | 
    
         
            +
                  self
         
     | 
| 
      
 398 
     | 
    
         
            +
                end
         
     | 
| 
      
 399 
     | 
    
         
            +
             
     | 
| 
      
 400 
     | 
    
         
            +
                #===全てのイベントに対してupdate2メソッドを呼び出す
         
     | 
| 
      
 401 
     | 
    
         
            +
                #全レイヤーのイベントを呼び出すことに注意
         
     | 
| 
      
 402 
     | 
    
         
            +
                #_params_:: イベントのupdate2メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 403 
     | 
    
         
            +
                def all_event_update2(*params)
         
     | 
| 
      
 404 
     | 
    
         
            +
                  @event_layers.each{|el| el.each{|event| event.update2(*params) } }
         
     | 
| 
      
 405 
     | 
    
         
            +
                  self
         
     | 
| 
      
 406 
     | 
    
         
            +
                end
         
     | 
| 
      
 407 
     | 
    
         
            +
             
     | 
| 
      
 408 
     | 
    
         
            +
                #===指定のレイヤーのイベントに対してmove!メソッドを呼び出す
         
     | 
| 
      
 409 
     | 
    
         
            +
                #イベントレイヤーidxの全てのイベントに対してmove!メソッドを呼び出す
         
     | 
| 
      
 410 
     | 
    
         
            +
                #_idx_:: 更新するイベントレイヤーの番号
         
     | 
| 
      
 411 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 412 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 413 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 414 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 415 
     | 
    
         
            +
                def event_move!(idx, dx, dy, *params)
         
     | 
| 
      
 416 
     | 
    
         
            +
                  @event_layers[idx].each{|event| event.move!(dx, dy, *params) }
         
     | 
| 
      
 417 
     | 
    
         
            +
                  self
         
     | 
| 
      
 418 
     | 
    
         
            +
                end
         
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
                #===全てのイベントに対してmove!メソッドを呼び出す
         
     | 
| 
      
 421 
     | 
    
         
            +
                #全レイヤーのイベントを呼び出すことに注意
         
     | 
| 
      
 422 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 423 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 424 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 425 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 426 
     | 
    
         
            +
                def all_event_move!(dx, dy, *params)
         
     | 
| 
      
 427 
     | 
    
         
            +
                  @event_layers.each{|el| el.each{|event| event.move!(dx, dy, *params) } }
         
     | 
| 
      
 428 
     | 
    
         
            +
                  self
         
     | 
| 
      
 429 
     | 
    
         
            +
                end
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
      
 431 
     | 
    
         
            +
                #===指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 432 
     | 
    
         
            +
                #イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 433 
     | 
    
         
            +
                #_idx_:: 更新するイベントレイヤーの番号
         
     | 
| 
      
 434 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 435 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 436 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 437 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 438 
     | 
    
         
            +
                def event_sprite_move!(idx, dx, dy, *params)
         
     | 
| 
      
 439 
     | 
    
         
            +
                  @event_layers[idx].each{|event| event.sprite_move!(dx, dy, *params) }
         
     | 
| 
      
 440 
     | 
    
         
            +
                  self
         
     | 
| 
      
 441 
     | 
    
         
            +
                end
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                #===全てのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 444 
     | 
    
         
            +
                #全レイヤーのイベントを呼び出すことに注意
         
     | 
| 
      
 445 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 446 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 447 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 448 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 449 
     | 
    
         
            +
                def all_event_sprite_move!(dx, dy, *params)
         
     | 
| 
      
 450 
     | 
    
         
            +
                  @event_layers.each{|el| el.each{|event| event.sprite_move!(dx, dy, *params) } }
         
     | 
| 
      
 451 
     | 
    
         
            +
                  self
         
     | 
| 
      
 452 
     | 
    
         
            +
                end
         
     | 
| 
      
 453 
     | 
    
         
            +
             
     | 
| 
      
 454 
     | 
    
         
            +
                #===指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 455 
     | 
    
         
            +
                #イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 456 
     | 
    
         
            +
                #_idx_:: 更新するイベントレイヤーの番号
         
     | 
| 
      
 457 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 458 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 459 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 460 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 461 
     | 
    
         
            +
                def event_pos_move!(idx, dx, dy, *params)
         
     | 
| 
      
 462 
     | 
    
         
            +
                  @event_layers[idx].each{|event| event.pos_move!(dx, dy, *params) }
         
     | 
| 
      
 463 
     | 
    
         
            +
                  self
         
     | 
| 
      
 464 
     | 
    
         
            +
                end
         
     | 
| 
      
 465 
     | 
    
         
            +
             
     | 
| 
      
 466 
     | 
    
         
            +
                #===全てのイベントに対してsprite_move!メソッドを呼び出す
         
     | 
| 
      
 467 
     | 
    
         
            +
                #全レイヤーのイベントを呼び出すことに注意
         
     | 
| 
      
 468 
     | 
    
         
            +
                #_dx_:: x座標の移動量
         
     | 
| 
      
 469 
     | 
    
         
            +
                #_dy_:: y座標の移動量
         
     | 
| 
      
 470 
     | 
    
         
            +
                #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
         
     | 
| 
      
 471 
     | 
    
         
            +
                #返却値:: レシーバ
         
     | 
| 
      
 472 
     | 
    
         
            +
                def all_event_pos_move!(dx, dy, *params)
         
     | 
| 
      
 473 
     | 
    
         
            +
                  @event_layers.each{|el| el.each{|event| event.pos_move!(dx, dy, *params) } }
         
     | 
| 
      
 474 
     | 
    
         
            +
                  self
         
     | 
| 
      
 475 
     | 
    
         
            +
                end
         
     | 
| 
      
 476 
     | 
    
         
            +
             
     | 
| 
       343 
477 
     | 
    
         
             
                def update_layout_position #:nodoc:
         
     | 
| 
       344 
478 
     | 
    
         
             
                  @map_layers.each{|ml| ml.pos.move_to!(*@layout.pos) }
         
     | 
| 
       345 
479 
     | 
    
         
             
                end
         
     | 
    
        data/lib/Miyako/API/font.rb
    CHANGED
    
    | 
         @@ -28,13 +28,16 @@ module Miyako 
     | 
|
| 
       28 
28 
     | 
    
         
             
            フォントは、等幅フォント奨励(プロポーショナルフォントを選ぶと、文字が正しく描画されない可能性あり)
         
     | 
| 
       29 
29 
     | 
    
         
             
            =end
         
     | 
| 
       30 
30 
     | 
    
         
             
              class Font
         
     | 
| 
      
 31 
     | 
    
         
            +
                include SpriteBase
         
     | 
| 
      
 32 
     | 
    
         
            +
                include Animation
         
     | 
| 
      
 33 
     | 
    
         
            +
                include Layout
         
     | 
| 
       31 
34 
     | 
    
         
             
                extend Forwardable
         
     | 
| 
       32 
35 
     | 
    
         | 
| 
       33 
36 
     | 
    
         
             
            #    OS_MAC_OS_X = "mac_osx"
         
     | 
| 
       34 
37 
     | 
    
         
             
            #    ORG_ENC = "UTF-8"
         
     | 
| 
       35 
38 
     | 
    
         
             
            #    NEW_ENC = "UTF-8-MAC"
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                attr_reader :size, :line_skip, :height, :ascent, :descent
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                attr_reader :size, :line_skip, :height, :ascent, :descent, :text
         
     | 
| 
       38 
41 
     | 
    
         
             
                attr_accessor :color, :use_shadow, :shadow_color, :shadow_margin, :vspace, :hspace
         
     | 
| 
       39 
42 
     | 
    
         | 
| 
       40 
43 
     | 
    
         
             
                @@font_cache = {}
         
     | 
| 
         @@ -132,6 +135,7 @@ module Miyako 
     | 
|
| 
       132 
135 
     | 
    
         
             
                #_size_:: フォントの大きさ。単位はピクセル。デフォルトは 16
         
     | 
| 
       133 
136 
     | 
    
         
             
                #返却値:: 生成されたインスタンスを返す
         
     | 
| 
       134 
137 
     | 
    
         
             
                def initialize(fname, size=16)
         
     | 
| 
      
 138 
     | 
    
         
            +
                  init_layout
         
     | 
| 
       135 
139 
     | 
    
         
             
                  @size = size
         
     | 
| 
       136 
140 
     | 
    
         
             
                  @color = [255, 255, 255]
         
     | 
| 
       137 
141 
     | 
    
         
             
                  @fname = fname
         
     | 
| 
         @@ -148,6 +152,9 @@ module Miyako 
     | 
|
| 
       148 
152 
     | 
    
         
             
                  @shadow_color = [128, 128, 128]
         
     | 
| 
       149 
153 
     | 
    
         
             
                  @shadow_margin = [2, 2]
         
     | 
| 
       150 
154 
     | 
    
         
             
                  @unit = SpriteUnitFactory.create
         
     | 
| 
      
 155 
     | 
    
         
            +
                  @text = ""
         
     | 
| 
      
 156 
     | 
    
         
            +
                  @visible = true
         
     | 
| 
      
 157 
     | 
    
         
            +
                  set_layout_size(*self.text_size(@text))
         
     | 
| 
       151 
158 
     | 
    
         
             
                end
         
     | 
| 
       152 
159 
     | 
    
         | 
| 
       153 
160 
     | 
    
         
             
                def initialize_copy(obj) #:nodoc:
         
     | 
| 
         @@ -157,6 +164,32 @@ module Miyako 
     | 
|
| 
       157 
164 
     | 
    
         
             
                  @shadow_color = @shadow_color.dup
         
     | 
| 
       158 
165 
     | 
    
         
             
                  @shadow_margin = @shadow_margin.dup
         
     | 
| 
       159 
166 
     | 
    
         
             
                  @unit = @unit.dup
         
     | 
| 
      
 167 
     | 
    
         
            +
                  @text = @text.dup
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                #===描画可能・不可状態を返す
         
     | 
| 
      
 171 
     | 
    
         
            +
                #描画可能の時はtrue、不可能なときはfalseを返す
         
     | 
| 
      
 172 
     | 
    
         
            +
                #返却値:: true/falseを返す
         
     | 
| 
      
 173 
     | 
    
         
            +
                def visible
         
     | 
| 
      
 174 
     | 
    
         
            +
                  return @visible
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                #===描画可能・不可状態を設定する
         
     | 
| 
      
 178 
     | 
    
         
            +
                #描画可能の時はtrue、不可能なときはfalseを渡す
         
     | 
| 
      
 179 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 180 
     | 
    
         
            +
                def visible=(v)
         
     | 
| 
      
 181 
     | 
    
         
            +
                  @visible = v
         
     | 
| 
      
 182 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                #===描画する文字列を変更する
         
     | 
| 
      
 186 
     | 
    
         
            +
                #_str_:: 描画する文字列。文字列以外でも、to_sメソッドで文字列、endocdeメソッドでUTF-8に変換する
         
     | 
| 
      
 187 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 188 
     | 
    
         
            +
                def text=(str)
         
     | 
| 
      
 189 
     | 
    
         
            +
                  @text = str.to_s
         
     | 
| 
      
 190 
     | 
    
         
            +
                  @text = @text.encode(Encoding::UTF_8)
         
     | 
| 
      
 191 
     | 
    
         
            +
                  set_layout_size(*self.text_size(@text))
         
     | 
| 
      
 192 
     | 
    
         
            +
                  return self
         
     | 
| 
       160 
193 
     | 
    
         
             
                end
         
     | 
| 
       161 
194 
     | 
    
         | 
| 
       162 
195 
     | 
    
         
             
                #===フォントの大きさを変更する
         
     | 
| 
         @@ -165,10 +198,11 @@ module Miyako 
     | 
|
| 
       165 
198 
     | 
    
         
             
                def size=(sz)
         
     | 
| 
       166 
199 
     | 
    
         
             
                  @size = sz
         
     | 
| 
       167 
200 
     | 
    
         
             
                  @font = Font.get_font_inner(@fname, @fpath, @size)
         
     | 
| 
       168 
     | 
    
         
            -
                  @font.style = (@bold ? SDL::TTF::STYLE_BOLD : 0) | 
     | 
| 
      
 201 
     | 
    
         
            +
                  @font.style = (@bold ? SDL::TTF::STYLE_BOLD : 0) |
         
     | 
| 
       169 
202 
     | 
    
         
             
                                (@italic ? SDL::TTF::STYLE_ITALIC : 0) |
         
     | 
| 
       170 
203 
     | 
    
         
             
                                (@under_line ? SDL::TTF::STYLE_UNDERLINE : 0)
         
     | 
| 
       171 
204 
     | 
    
         
             
                  init_height
         
     | 
| 
      
 205 
     | 
    
         
            +
                  set_layout_size(*self.text_size(@text))
         
     | 
| 
       172 
206 
     | 
    
         
             
                  return self
         
     | 
| 
       173 
207 
     | 
    
         
             
                end
         
     | 
| 
       174 
208 
     | 
    
         | 
| 
         @@ -218,9 +252,9 @@ module Miyako 
     | 
|
| 
       218 
252 
     | 
    
         
             
                def get_fit_size(size)
         
     | 
| 
       219 
253 
     | 
    
         
             
                  path = Font.findFontPath(@fname)
         
     | 
| 
       220 
254 
     | 
    
         
             
                  font = SDL::TTF.open(path, size)
         
     | 
| 
       221 
     | 
    
         
            -
                  return (size.to_f * (size.to_f / font.line_skip.to_f)).to_i 
     | 
| 
      
 255 
     | 
    
         
            +
                  return (size.to_f * (size.to_f / font.line_skip.to_f)).to_i
         
     | 
| 
       222 
256 
     | 
    
         
             
                end
         
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
       224 
258 
     | 
    
         
             
                #===フォントサイズ(yやjなどの下にはみ出る箇所も算出)を取得する
         
     | 
| 
       225 
259 
     | 
    
         
             
                #返却値:: 算出されたフォントサイズ
         
     | 
| 
       226 
260 
     | 
    
         
             
                def line_height
         
     | 
| 
         @@ -246,13 +280,13 @@ module Miyako 
     | 
|
| 
       246 
280 
     | 
    
         
             
                  end
         
     | 
| 
       247 
281 
     | 
    
         
             
                  return self
         
     | 
| 
       248 
282 
     | 
    
         
             
                end
         
     | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
      
 283 
     | 
    
         
            +
             
     | 
| 
       250 
284 
     | 
    
         
             
                #===フォントのbold属性の有無を返す
         
     | 
| 
       251 
285 
     | 
    
         
             
                #返却値:: bold属性かどうか(true/false)
         
     | 
| 
       252 
286 
     | 
    
         
             
                def bold?
         
     | 
| 
       253 
287 
     | 
    
         
             
                  return @bold
         
     | 
| 
       254 
288 
     | 
    
         
             
                end
         
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
       256 
290 
     | 
    
         
             
                #===フォントのbold属性を設定する
         
     | 
| 
       257 
291 
     | 
    
         
             
                #_f_:: bold属性かどうか(true/false)
         
     | 
| 
       258 
292 
     | 
    
         
             
                def bold=(f)
         
     | 
| 
         @@ -261,7 +295,7 @@ module Miyako 
     | 
|
| 
       261 
295 
     | 
    
         
             
                  @font.style -= SDL::TTF::STYLE_BOLD unless @bold
         
     | 
| 
       262 
296 
     | 
    
         
             
                  return self
         
     | 
| 
       263 
297 
     | 
    
         
             
                end
         
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
       265 
299 
     | 
    
         
             
                #===フォントの属性をitalic(斜め)に設定する
         
     | 
| 
       266 
300 
     | 
    
         
             
                #ブロックを渡したときは、ブロック評価中のみ斜体文字になる
         
     | 
| 
       267 
301 
     | 
    
         
             
                #文字が領域外にはみ出る場合があるので注意!
         
     | 
| 
         @@ -276,13 +310,13 @@ module Miyako 
     | 
|
| 
       276 
310 
     | 
    
         
             
                  end
         
     | 
| 
       277 
311 
     | 
    
         
             
                  return self
         
     | 
| 
       278 
312 
     | 
    
         
             
                end
         
     | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
       280 
314 
     | 
    
         
             
                #===フォントのitalic属性の有無を返す
         
     | 
| 
       281 
315 
     | 
    
         
             
                #返却値:: italic属性かどうか(true/false)
         
     | 
| 
       282 
316 
     | 
    
         
             
                def italic?
         
     | 
| 
       283 
317 
     | 
    
         
             
                  return @italic
         
     | 
| 
       284 
318 
     | 
    
         
             
                end
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
      
 319 
     | 
    
         
            +
             
     | 
| 
       286 
320 
     | 
    
         
             
                #===フォントのitalic属性を設定する
         
     | 
| 
       287 
321 
     | 
    
         
             
                #_f_:: italic属性かどうか(true/false)
         
     | 
| 
       288 
322 
     | 
    
         
             
                def italic=(f)
         
     | 
| 
         @@ -291,7 +325,7 @@ module Miyako 
     | 
|
| 
       291 
325 
     | 
    
         
             
                  @font.style -= SDL::TTF::STYLE_ITALIC unless @italic
         
     | 
| 
       292 
326 
     | 
    
         
             
                  return self
         
     | 
| 
       293 
327 
     | 
    
         
             
                end
         
     | 
| 
       294 
     | 
    
         
            -
             
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
       295 
329 
     | 
    
         
             
                #===フォントの属性をunder_line(下線)に設定する
         
     | 
| 
       296 
330 
     | 
    
         
             
                #ブロックを渡したときは、ブロック評価中のみ下線付き文字になる
         
     | 
| 
       297 
331 
     | 
    
         
             
                #返却値:: 自分自身
         
     | 
| 
         @@ -305,13 +339,13 @@ module Miyako 
     | 
|
| 
       305 
339 
     | 
    
         
             
                  end
         
     | 
| 
       306 
340 
     | 
    
         
             
                  return self
         
     | 
| 
       307 
341 
     | 
    
         
             
                end
         
     | 
| 
       308 
     | 
    
         
            -
             
     | 
| 
      
 342 
     | 
    
         
            +
             
     | 
| 
       309 
343 
     | 
    
         
             
                #===フォントのunder_line属性の有無を返す
         
     | 
| 
       310 
344 
     | 
    
         
             
                #返却値:: under_line属性かどうか(true/false)
         
     | 
| 
       311 
345 
     | 
    
         
             
                def under_line?
         
     | 
| 
       312 
346 
     | 
    
         
             
                  return @under_line
         
     | 
| 
       313 
347 
     | 
    
         
             
                end
         
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
       315 
349 
     | 
    
         
             
                #===フォントのunder_line属性を設定する
         
     | 
| 
       316 
350 
     | 
    
         
             
                #_f_:: under_line属性かどうか(true/false)
         
     | 
| 
       317 
351 
     | 
    
         
             
                def under_line=(f)
         
     | 
| 
         @@ -327,7 +361,7 @@ module Miyako 
     | 
|
| 
       327 
361 
     | 
    
         
             
                  @font.style = 0
         
     | 
| 
       328 
362 
     | 
    
         
             
                  return self
         
     | 
| 
       329 
363 
     | 
    
         
             
                end
         
     | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
       331 
365 
     | 
    
         
             
                #===文字列を描画する
         
     | 
| 
       332 
366 
     | 
    
         
             
                #対象のスプライトに文字列を描画する
         
     | 
| 
       333 
367 
     | 
    
         
             
                #_dst_:: 描画先スプライト
         
     | 
| 
         @@ -358,6 +392,65 @@ module Miyako 
     | 
|
| 
       358 
392 
     | 
    
         
             
                  return x
         
     | 
| 
       359 
393 
     | 
    
         
             
                end
         
     | 
| 
       360 
394 
     | 
    
         | 
| 
      
 395 
     | 
    
         
            +
                #===文字列を画面に描画する
         
     | 
| 
      
 396 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 397 
     | 
    
         
            +
                def render
         
     | 
| 
      
 398 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 399 
     | 
    
         
            +
                  draw_text(Screen, @text, @layout[:pos][0], @layout[:pos][1])
         
     | 
| 
      
 400 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 401 
     | 
    
         
            +
                end
         
     | 
| 
      
 402 
     | 
    
         
            +
             
     | 
| 
      
 403 
     | 
    
         
            +
                #===文字列をスプライトに描画する
         
     | 
| 
      
 404 
     | 
    
         
            +
                #_dst_:: 描画先スプライト
         
     | 
| 
      
 405 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 406 
     | 
    
         
            +
                def render_to(dst)
         
     | 
| 
      
 407 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 408 
     | 
    
         
            +
                  draw_text(dst, @text, @layout[:pos][0], @layout[:pos][1])
         
     | 
| 
      
 409 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 410 
     | 
    
         
            +
                end
         
     | 
| 
      
 411 
     | 
    
         
            +
             
     | 
| 
      
 412 
     | 
    
         
            +
                #===文字列を画面の指定の位置に描画する
         
     | 
| 
      
 413 
     | 
    
         
            +
                #_x_:: x方向位置
         
     | 
| 
      
 414 
     | 
    
         
            +
                #_y_:: y方向位置
         
     | 
| 
      
 415 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 416 
     | 
    
         
            +
                def render_xy(x, y)
         
     | 
| 
      
 417 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 418 
     | 
    
         
            +
                  draw_text(Screen, @text, x, y)
         
     | 
| 
      
 419 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 420 
     | 
    
         
            +
                end
         
     | 
| 
      
 421 
     | 
    
         
            +
             
     | 
| 
      
 422 
     | 
    
         
            +
                #===文字列をスプライトの指定の位置に描画する
         
     | 
| 
      
 423 
     | 
    
         
            +
                #_dst_:: 描画先スプライト
         
     | 
| 
      
 424 
     | 
    
         
            +
                #_x_:: x方向位置
         
     | 
| 
      
 425 
     | 
    
         
            +
                #_y_:: y方向位置
         
     | 
| 
      
 426 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 427 
     | 
    
         
            +
                def render_xy_to(dst, x, y)
         
     | 
| 
      
 428 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 429 
     | 
    
         
            +
                  draw_text(dst, @text, x, y)
         
     | 
| 
      
 430 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 431 
     | 
    
         
            +
                end
         
     | 
| 
      
 432 
     | 
    
         
            +
             
     | 
| 
      
 433 
     | 
    
         
            +
                #===文字列を画面に描画する
         
     | 
| 
      
 434 
     | 
    
         
            +
                #引数textは、内部でto_sメソッドを呼び出して文字列化している
         
     | 
| 
      
 435 
     | 
    
         
            +
                #_text_:: 描画対象の文字列
         
     | 
| 
      
 436 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 437 
     | 
    
         
            +
                def render_str(text)
         
     | 
| 
      
 438 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 439 
     | 
    
         
            +
                  draw_text(Screen, text.to_s, @layout[:pos][0], @layout[:pos][1])
         
     | 
| 
      
 440 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 441 
     | 
    
         
            +
                end
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                #===文字列をスプライトに描画する
         
     | 
| 
      
 444 
     | 
    
         
            +
                #引数textは、内部でto_sメソッドを呼び出して文字列化している
         
     | 
| 
      
 445 
     | 
    
         
            +
                #_dst_:: 描画先スプライト
         
     | 
| 
      
 446 
     | 
    
         
            +
                #_text_:: 描画対象の文字列
         
     | 
| 
      
 447 
     | 
    
         
            +
                #返却値:: 自分自身を返す
         
     | 
| 
      
 448 
     | 
    
         
            +
                def render_str_to(dst, text)
         
     | 
| 
      
 449 
     | 
    
         
            +
                  return self unless @visible
         
     | 
| 
      
 450 
     | 
    
         
            +
                  draw_text(dst, text.to_s, @layout[:pos][0], @layout[:pos][1])
         
     | 
| 
      
 451 
     | 
    
         
            +
                  return self
         
     | 
| 
      
 452 
     | 
    
         
            +
                end
         
     | 
| 
      
 453 
     | 
    
         
            +
             
     | 
| 
       361 
454 
     | 
    
         
             
                #===文字列描画したときの大きさを取得する
         
     | 
| 
       362 
455 
     | 
    
         
             
                #現在のフォントの設定で指定の文字列を描画したとき、予想される描画サイズを返す。実際に描画は行われない。
         
     | 
| 
       363 
456 
     | 
    
         
             
                #_txt_:: 算出したい文字列
         
     | 
| 
         @@ -365,7 +458,7 @@ module Miyako 
     | 
|
| 
       365 
458 
     | 
    
         
             
                def chr_size_inner(char)
         
     | 
| 
       366 
459 
     | 
    
         
             
                  return (char.bytesize == 1 ? @size >> 1 : @size) + (@use_shadow ? @shadow_margin[0] : 0) + @hspace
         
     | 
| 
       367 
460 
     | 
    
         
             
                end
         
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
       369 
462 
     | 
    
         
             
                private :chr_size_inner
         
     | 
| 
       370 
463 
     | 
    
         | 
| 
       371 
464 
     | 
    
         
             
                #===文字列描画したときの大きさを取得する
         
     | 
| 
         @@ -374,11 +467,11 @@ module Miyako 
     | 
|
| 
       374 
467 
     | 
    
         
             
                #返却値:: 文字列を描画したときの大きさ([w,h]の配列)
         
     | 
| 
       375 
468 
     | 
    
         
             
                def text_size(txt)
         
     | 
| 
       376 
469 
     | 
    
         
             
                  width = txt.chars.inject(0){|r, c|
         
     | 
| 
       377 
     | 
    
         
            -
                    r += (c.bytesize == 1 ? @size >> 1 : @size) } + 
     | 
| 
      
 470 
     | 
    
         
            +
                    r += (c.bytesize == 1 ? @size >> 1 : @size) } +
         
     | 
| 
       378 
471 
     | 
    
         
             
                         ((@use_shadow ? @shadow_margin[0] : 0) + @hspace) * (txt.chars.to_a.length - 1)
         
     | 
| 
       379 
472 
     | 
    
         
             
                  return [width, self.line_height]
         
     | 
| 
       380 
473 
     | 
    
         
             
                end
         
     | 
| 
       381 
     | 
    
         
            -
             
     | 
| 
      
 474 
     | 
    
         
            +
             
     | 
| 
       382 
475 
     | 
    
         
             
                #===指定した高さで描画する際のマージンを求める
         
     | 
| 
       383 
476 
     | 
    
         
             
                #現在のフォントの設定で指定の文字列を描画したとき、予想される描画サイズを返す。実際に描画は行われない。
         
     | 
| 
       384 
477 
     | 
    
         
             
                #第1引数に渡す"align"は、以下の3種類のシンボルのどれかを渡す
         
     | 
| 
         @@ -417,7 +510,7 @@ module Miyako 
     | 
|
| 
       417 
510 
     | 
    
         
             
                #返却値:: OSごとに設定されたフォントイン寸タンス(フォントサイズは16)
         
     | 
| 
       418 
511 
     | 
    
         
             
                def Font::sans_serif
         
     | 
| 
       419 
512 
     | 
    
         
             
                  filename = @@font_base_name[Miyako::getOSName].
         
     | 
| 
       420 
     | 
    
         
            -
                               detect{|base| 
     | 
| 
      
 513 
     | 
    
         
            +
                               detect{|base|
         
     | 
| 
       421 
514 
     | 
    
         
             
                                 Font.findFontPath(base[:sans_serif])
         
     | 
| 
       422 
515 
     | 
    
         
             
                               }[:sans_serif]
         
     | 
| 
       423 
516 
     | 
    
         
             
                  return Font.new(filename)
         
     |