Sha256: 36b5966236245c8e1faaf1891f5ec4369d3839168fdb1871abe24b9c2180ab5a

Contents?: true

Size: 1019 Bytes

Versions: 1

Compression:

Stored size: 1019 Bytes

Contents

require 'curses'

require 'falling/view'

module Falling
  class MapView < View
    def initialize(universe:)
      Falling.logger.info "Initializing MapView."
      @universe = universe
      super()
    end

    # FIXME: Add smart camera centering.
    def refresh
      active_area.
        to_a[0, height].
        each_with_index do |row_string, row_index|
          window.setpos row_offset + row_index, column_offset
          window.addstr row_string[0, width]
        end

      super
    end

    private

    attr_reader :universe

    def active_area
      universe.active_area
    end

    def column_offset
      if active_area.width <= width
        (width - active_area.width) / 2
      else
        0
      end
    end

    def row_offset
      if active_area.height <= height
        (height - active_area.height) / 2
      else
        0
      end
    end

    def calculate_geometry!
      @width = Curses.cols * 3 / 5
      @height = Curses.lines
      @row = 0
      @column = 0
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
falling-0.0.1 lib/falling/map_view.rb