Sha256: b453f5e9488e2299d4585ff1841c14151ac002d5c2dc93cf9eb6eedd19f6f654

Contents?: true

Size: 1.6 KB

Versions: 17

Compression:

Stored size: 1.6 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 :model
      
      before_body do
        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)
            rescue => e
              Glimmer::Config.logger.debug { "Error encountered on drop of a card to a foundation pile: #{e.full_message}" }
              drop_event.doit = false
            end
          end
        }
      }
    end
    
  end
  
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
glimmer-dsl-swt-4.30.1.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.30.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.29.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.28.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.27.0.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.27.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.26.0.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.26.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.25.0.2 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.25.0.1 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.25.0.0 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.8 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.7 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.6 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.5 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.4 samples/elaborate/klondike_solitaire/view/foundation_pile.rb
glimmer-dsl-swt-4.24.4.3 samples/elaborate/klondike_solitaire/view/foundation_pile.rb