class Win3
Класс окна с реализацией всех возможностей, доступных при помощи Cigui.<br> Реализация выполнена для RGSS3.
In Files
- cigui.rb
Parent
Window_Selectable
Attributes
Прозрачность фона окна. Может принимать значения от 0 до 255
Метка окна. Строка, по которой происходит поиск экземпляра в массиве CIGUI.windows при выборе окна по метке (select by label)
Прозрачность окна. Может принимать значения от 0 до 255
Скорость перемещения
Public Class Methods
Создает окно. По умолчанию задается размер 192х64 и помещается в координаты 0, 0
# File cigui.rb, line 107 def initialize(x=0,y=0,w=192,h=64) super x,y,w,h @old_x, @old_y = x,y @label=nil @items=[] @texts=[] @speed=:auto end
Public Instance Methods
Этот метод добавляет команду во внутренний массив items. Команды используются для отображения кнопок.<br>
-
command - отображаемый текст кнопки
-
procname - название вызываемого метода (String или Symbol)
По умолчанию значение enable равно true, что значит, что кнопка включена и может быть нажата.
# File cigui.rb, line 154 def add_item(command,procname,enabled=true, text_only=false) @items+=[ { :command=>command, :procname=>procname, :enabled=>enabled, :x=>:auto, :y=>:auto, :width=>:auto, :height=>:auto, :text_only=>text_only } ] end
Этот метод позволяет добавить текст в окно.<br> Принимает в качестве параметра значение класса Text
# File cigui.rb, line 143 def add_text(text) add_item(text, "text_#{@index.last}".to_sym, false, true) end
Метод удаляет команду из внутреннего массива items.<br> В качестве аргумента принимаются:
-
индекс команды
-
имя команды
-
имя вызываемой процедуры
-
регулярное выражение для продвинутого поиска по именам команд и процедур
# File cigui.rb, line 176 def delete_item(indexORcomORproc) i=indexORcomORproc case i.class when Fixnum @items-=[@items[i.to_i]] when String # Довольно ненадёжный поиск, но я пока не придумал, # как его улучшить. Может, стоит добавить # возможность поиска регулярных выражений? @items.each{ |item| # try to find by commands @items-=[item] if item[:command]==i # try to find by procnames @items-=[item] if item[:procname]==i } # И впрямь, почему бы и нет? when Regexp @items.each{ |item| @items-=[item] if item[:command].match(/#{ i }/) @items-=[item] if item[:procname].match(/#{ i }/) } end end
Выключает кнопку.<br> В параметр commandORindex помещается либо строковое значение, являющееся названием кнопки, либо целое число - индекс кнопки во внутреннем массиве items.
disable_item(0) # => @items[0].enabled set 'false' disable_item('New game') # => @items[0].enabled set 'false'
Выключение происходит только если кнопка не имеет тип text_only (устанавливается при добавлении с помощью метода add_text).
# File cigui.rb, line 243 def disable_item(commandORindex) case commandORindex.class when Integer, Float @items[commandORindex.to_i][:enabled]=false if (0...@items.size).include? commandORindex.to_i @items[commandORindex.to_i][:enabled]=false if @items[commandORindex.to_i][:text_only] when String @items.each{|index| if index[:command]==commandORindex||index[:procname]==commandORindex index[:enabled]=false index[:enabled]=false if index[:text_only] end } when Regexp @items.each{|index| if index[:command].match(/#{commandORindex}/)||index[:procname].match(/#{commandORindex}/) index[:enabled]=false index[:enabled]=false if index[:text_only] end } else raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{string}" end end
Удаляет окно и все связанные с ним ресурсы
# File cigui.rb, line 302 def dispose super end
С помощью этого метода производится полная отрисовка всех элементов из массива items.<br> Параметр ignore_disabled отвечает за отображение выключенных команд из массива items. Если его значение равно true, то отрисовка выключенных команд производиться не будет.
# File cigui.rb, line 273 def draw_items(ignore_disabled=false) @items.each{|item| _draw_item item } end
Включает кнопку.<br> В параметр commandORindex помещается либо строковое значение, являющееся названием кнопки, либо целое число - индекс кнопки во внутреннем массиве items.
@items.clear add_item('New game',:new_game,false) enable_item(0) # => @items[0].enabled set 'true' enable_item('New game') # => @items[0].enabled set 'true' enable_item(/[Nn][Ee][Ww][\s_]*[Gg][Aa][Mm][Ee]/) # @items[0].enabled set 'true'
Включение происходит только если кнопка не имеет тип text_only (устанавливается при добавлении с помощью метода add_text).
# File cigui.rb, line 211 def enable_item(commandORindex) case commandORindex.class when Fixnum @items[commandORindex.to_i][:enabled]=true if (0...@items.size).include? commandORindex.to_i @items[commandORindex.to_i][:enabled]=false if @items[commandORindex.to_i][:text_only] when String @items.each{|index| if index[:command]==commandORindex||index[:procname]==commandORindex index[:enabled]=true index[:enabled]=false if index[:text_only] end } when Regexp @items.each{|index| if index[:command].match(/#{commandORindex}/)||index[:procname].match(/#{commandORindex}/) index[:enabled]=true index[:enabled]=false if index[:text_only] end } else raise "#{CIGUIERR::CantReadNumber}\n\tcurrent line of $do: #{string}" end end
Возврашает полную информацию обо всех параметрах в формате строки
# File cigui.rb, line 309 def inspect "<#{self.class}:"+ " @back_opacity=#{back_opacity},"+ " @contents_opacity=#{contents_opacity}"+ " @height=#{height},"+ " @opacity=#{opacity},"+ " @speed=#{@speed},"+ " @width=#{width},"+ " @x=#{x},"+ " @y=#{y}>" end
Задает метку окну, проверяя ее на правильность перед этим:
-
удаляет круглые и квадратгые скобки
-
удаляет кавычки
-
заменяет пробелы и табуляцию на символы подчеркивания
-
заменяет символы “больше” и “меньше” на символы подчеркивания
# File cigui.rb, line 133 def label=(string) # make right label string.gsub!(/[\[\]\(\)\\"]/){''} string.gsub!(/[ \t\<\>]/){'_'} # then label it @label = string end
Обновляет окно. В отличие от update, влияет только на содержимое окна (производит повторную отрисовку).
# File cigui.rb, line 124 def refresh self.contents.clear end
Устанавливает новые размеры окна дополнительно изменяя также и размеры содержимого (contents).<br> Все части содержимого, которые не помещаются в новые размер, удаляются безвозратно.
# File cigui.rb, line 284 def resize(new_width, new_height) temp=Sprite.new temp.bitmap=self.contents self.contents.dispose src_rect(0,0,temp.width,temp.height) self.contents=Bitmap.new( width - padding * 2, height - padding * 2 ) self.contents.bit(0,0,temp.bitmap,src_rect,255) temp.bitmap.dispose temp.dispose width=new_width height=new_height end
Обновляет окно. Влияет только на положение курсора (параметр cursor_rect), прозрачность и цветовой тон окна.
# File cigui.rb, line 118 def update _movement end