require 'ruby2d' require_relative 'ui-tools' require_relative 'math_plus' module UI def self.load UI::Main.load UI::Popup.load end module Main class < tilesetaspect # make height match or less totalheight = @tileset.height * @tileset.rows if @tileset.width <= @tileset.height MathPlus.divisors_of(@tileset.width).sort.each do |divisor| if divisor == @tileset.width # exausted search of even divisor and failed, just use exact uneven match instead use_divisor = (@tileset.width * @tileset.columns) / maxinnerwidth.to_f break end puts "(#{totalheight} / #{divisor}) + #{@tileset.rows} < #{maxinnerheight}" if (totalheight / divisor) + @tileset.rows < maxinnerheight # use divisor use_divisor = divisor.to_f break end end else MathPlus.divisors_of(@tileset.height).sort.each do |divisor| if (totalheight / divisor) + @tileset.rows < maxinnerheight # use divisor use_divisor = divisor.to_f break end end end else # make width match or less end @tiles = [] (0...@tileset.rows).each do |row| (0...@tileset.columns).each do |column| @tiles.push @tileset.create_image(column: column, row: row, x: Window.width - (@menubox.x + 48 + (@tileset.width * @tileset.columns) / use_divisor) + (column * ((@tileset.width / use_divisor) + 1)), y: Window.height - (@menubox.y + 36 + 120 + (@tileset.height * @tileset.rows) / use_divisor) + (row * ((@tileset.height / use_divisor) + 1)), width: @tileset.width / use_divisor, height: @tileset.height / use_divisor, z: 101) @objects.push @tiles.last @tiles.last.remove end end @menubox.x = @tiles[0].x - 24 @menubox.y = @tiles[0].y - 24 @menubox.width = 48 + ((@tileset.width * @tileset.columns) / use_divisor) + @tileset.columns - 1 @menubox.height = 48 + ((@tileset.height * @tileset.rows) / use_divisor) + @tileset.rows - 1 end def self.showing_menu @showing_menu ||= false end def self.showing_menu=(show) if show @menubox.add else @menubox.remove end @showing_menu = show end end end