root/lang/ruby/starframe/lib/starframe/sprite/collection.rb @ 27855

Revision 27855, 3.0 kB (checked in by isaisstillalive, 4 years ago)
  • CollectionをUpdatableではなくした
Line 
1require "starframe/eventable"
2require "starframe/updatable"
3
4module StarFrame #:nodoc:
5  class Sprite
6    # = コレクション所属モジュール
7    # コレクションに所属できるようにするモジュール。
8    #
9    # Sprite::Collectionをロードした場合、Spriteに自動的にインクルードされる。
10    module Collectable
11      # 現在所属しているコレクション。
12      attr_reader :collection
13      # 新たなコレクションに所属させる。
14      #
15      # 所属していたコレクションからは自動的に削除される。
16      def collection= collection
17        collection.add self
18      end
19     
20      # 所属しているコレクションから自分を削除する。
21      def vanish
22        return unless @collection
23        @collection.delete self
24        @collection = nil
25      ensure
26        return self
27      end
28    end
29    include Collectable
30   
31    # = コレクション
32    # 複数のスプライトをまとめて管理することができるようになるコレクションクラス。
33    #
34    # このクラスをロードした場合、SpriteクラスにSprite::Collectableが自動的にインクルードされる。
35    class Collection
36      include Enumerable
37      include Eventable
38     
39      #:stopdoc:
40      protected
41      attr_reader :sprites
42     
43      def initialize #:nodoc:
44        @sprites = []
45      end
46      #:startdoc:
47     
48      public
49      # スプライトを所属させる。
50      #
51      # そのスプライトが所属していたコレクションからは自動的に削除される。
52      def add sprite
53        defect_collection = sprite.collection
54        defect_collection.sprites.delete sprite if defect_collection
55       
56        @sprites << sprite
57        sprite.instance_variable_set :@collection, self
58        self
59      end
60      alias << add
61     
62      # スプライトを所属から外す。
63      def delete sprite
64        @sprites.delete sprite
65        sprite.instance_variable_set :@collection, nil
66        self
67      end
68     
69      # 所属している全てのスプライトに対してブロックを評価する。
70      def each &block
71        @sprites.each &block
72        self
73      end
74     
75      # 所属しているスプライトの数を取得する。
76      def size
77        @sprites.size
78      end
79     
80      # 所属している全てのスプライトの更新時イベントをコールする。
81      def update
82        @sprites.each &:update
83        self
84      end
85      # 所属している全てのスプライトの更新時イベントをコールする。
86      def render
87        @sprites.each &:call_render
88        self
89      end
90     
91      # 所属している全てのスプライトをtextureに描画する。
92      def render_to texture
93        @sprites.each{ |sprite| sprite.render_to texture }
94        self
95      end
96    end
97  end
98end
Note: See TracBrowser for help on using the browser.