Sha256: 0d132258ced55f2ab882b710f433d1e033ba1ee9a083643296058872757fee3d

Contents?: true

Size: 1.61 KB

Versions: 25

Compression:

Stored size: 1.61 KB

Contents

require_relative '../model/playing_card'
require_relative '../model/foundation_pile'

class KlondikeSolitaire
  module View
    class FoundationPile
      include Glimmer::UI::CustomShape
      
      options :pile_x, :pile_y, :game, :suit
      
      attr_accessor :current_image, :model
      
      before_body do
        self.current_image = image(50, 80) {empty_playing_card(suit: suit)}
        self.model = game.foundation_piles[Model::PlayingCard::SUITS.index(suit)]
      end
  
      after_body do
        observe(model, 'playing_cards.last') do |last_card|
          if last_card
            body_root.content {
              playing_card(model: last_card)
            }
          else
            body_root.clear_shapes
            body_root.content {
              empty_playing_card(suit: suit)
            }
          end
        end
      end
      
      body {
        shape(pile_x, pile_y) {
          empty_playing_card(suit: suit)
          
          on_drop do |drop_event|
            begin
              card_shape = drop_event.dragged_shape.get_data('custom_shape')
              card = card_shape.model
              card_parent_pile = card_shape.parent_pile
              card_source_model = card_parent_pile.model
              raise 'Cannot accept multiple cards' if card_source_model.playing_cards.index(card) != (card_source_model.playing_cards.size - 1)
              model.add!(card)
              card_source_model.remove!(card)
              drop_event.dragged_shape.dispose
            rescue => e
              drop_event.doit = false
            end
          end
        }
      }
    end
    
  end
  
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
glimmer-dsl-swt-4.22.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.16.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.5 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.4 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.3 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.2 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.2.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.1.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.1.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.0.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.21.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.5 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.4 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.3 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.2 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.15.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.14.2 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.20.14.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb