Войти на сайт

Авторизация, ждите ...
×

ТЕМА: [VX Ace] Радиокнопки в списках

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95772

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоВетеранУчительПроект месяца 2 местоОрганизатор конкурсовПисатель 3 местоПроект месяца 1 место1 место в ГотвПрограммист Ruby
Радиокнопки в списках
de79 radio selectables

Информация:
Автор: DeadElf79
Версия: 1.2

Описание:
Позволяет использовать иконки для выбора вместо прямоугольника.
Раскрывающий суть скриншот: [ Нажмите, чтобы развернуть ]


Установка:
  1. ставим скрипт как обычно
  2. в модуле De79Radios ставим следующее:
    ICON_DRAW_RADIO = № иконки из иконсета, которая будет использоваться, когда элемент выделен
    ICON_THROW_RADIO = № иконки, которая будет использоваться, когда элемент не выделен.

Демо:
Скачать архив ZIP (1,31 МБ)

Скриншот:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Код:
# de79 radio selectables
# version: 1.2
module De79Radios
  # № иконки из иконсета, которая будет использоваться, когда элемент выделен
	ICON_DRAW_RADIO = 3
 
  # № иконки, которая будет использоваться, когда элемент не выделен
	ICON_THROW_RADIO = 2
end
 
class Window_Selectable
	alias de79radios_initialize initialize
	def initialize(x, y, width, height)
		de79radios_initialize(x, y, width, height)
		@last_index = @index
	end
 
	def radio_offset
		26
	end
 
  def draw_radio_icon
    De79Radios::ICON_DRAW_RADIO
  end
 
  def throw_radio_icon
    De79Radios::ICON_THROW_RADIO
  end
 
  alias de79radios_item_rect item_rect
  def item_rect(index)
    rect = de79radios_item_rect(index)
    rect.x += radio_offset
    rect
  end
 
	def update_cursor
		if @cursor_all
			draw_all_radios
			self.top_row = 0
		elsif @index < 0
			throw_all_radios
		else
			ensure_cursor_visible
			throw_radio( item_rect( @last_index ) )
			draw_radio( item_rect(@index) )
			@last_index = @index
		end
	end
 
	def draw_all_radios
		item_max.times do |index|
			draw_radio( item_rect( index ) )
		end
	end
 
	def throw_all_radios
		item_max.times do |index|
			throw_radio( item_rect( index ) )
		end
	end
 
  def clear_all_radios
    item_max.times do |index|
			clear_radio( item_rect( index ) )
		end
  end
 
	def draw_radio( rect )
		rx = rect.x - radio_offset
		ry = rect.y
 
		clear_rect = Rect.new( rx, ry, 24, 24 )
		contents.clear_rect( clear_rect )
 
		icon = draw_icon( draw_radio_icon, rx, ry )
	end
 
	def throw_radio( rect )
		rx = rect.x - radio_offset
		ry = rect.y
 
		clear_rect = Rect.new( rx, ry, 24, 24 )
		contents.clear_rect( clear_rect )
 
		icon = draw_icon( throw_radio_icon, rx, ry )
	end
 
  def clear_radio( rect )
    rx = rect.x - radio_offset
		ry = rect.y
 
		clear_rect = Rect.new( rx, ry, 24, 24 )
		contents.clear_rect( clear_rect )
  end
 
  alias de79radios_activate activate
  def activate
    refresh
    de79radios_activate
  end
 
  alias de79radios_deactivate deactivate
  def deactivate
    clear_all_radios
    de79radios_deactivate
  end
 
	alias de79radios_refresh refresh
	def refresh
		de79radios_refresh
		throw_all_radios
    update_cursor
	end
end
 
class Window_HorzCommand
  alias de79radios_horz_item_rect item_rect
  def item_rect(index)
    rect = de79radios_horz_item_rect(index)
    rect.x += radio_offset
    rect
  end
 
  def alignment
    return 0
  end
end
Последнее редактирование: 7 года 2 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, caveman, Демий, Amphilohiy, Paranoid

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95774

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 688
  • Спасибо получено: 350
В предметах и экипировке не видно первой иконки.

А в сохранениях все тот же прямоугольник.
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95775

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • ПаладинДаритель СтимкеяВетеранРазработчикОраторПрограммист RubyПроект месяца 3 место2 место Проект месяца 1 местоПрограммист JavaScript
Paranoid пишет:
В предметах и экипировке не видно первой иконки.

А в сохранениях все тот же прямоугольник.

Насколько я помню для предметов специальный класс Window_ItemList или как-то так и в нем своя прорисовка "команд". Наверное, тоже самое и с сохранениями.

P.S. Может мне такое же на мв замутить :laugh:

P.S.S. А, неправильно прочитал коммент. Если не видно только первой, то там скорее всего пустой предмет ?
Последнее редактирование: 7 года 3 мес. назад от DK.
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95788

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоВетеранУчительПроект месяца 2 местоОрганизатор конкурсовПисатель 3 местоПроект месяца 1 место1 место в ГотвПрограммист Ruby
В предметах и экипировке, насколько я помню, используются дети класса Window_HorzCommand, с которым как раз могут возникуть такие проблемы. Поправлю, когда доберусь.

В сохранениях вообще используется не список в одно окно, а десяток отдельных окон. Тут не буду править, потому что мало ли у кого какие скрипты на экран сохранения. С нестандартными должно работать на ура.

Дк, замути, реализация несложная, как видишь)
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95789

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • ПаладинДаритель СтимкеяВетеранРазработчикОраторПрограммист RubyПроект месяца 3 место2 место Проект месяца 1 местоПрограммист JavaScript
Точно не HorzCommand. HorzCommand для категорий используется. Это же горизонтальное непрокручивающееся окно
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95793

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоВетеранУчительПроект месяца 2 местоОрганизатор конкурсовПисатель 3 местоПроект месяца 1 место1 место в ГотвПрограммист Ruby
ДК, ты, кажись, запутался в классах и сценах ^_^ Еще раз перечитай посты.

Отвлекся от проекта, сделал обновление с исправлением ошибок, заодно демку сделал. Демку, скриншоты из нее и код сейчас добавлю в топик.
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95805

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 688
  • Спасибо получено: 350
Псс, Эльф. Сделай в самом коде объяснялку напротив нужных строк, а то можно и забыть.
Администратор запретил публиковать записи гостям.

[VX Ace] Радиокнопки в списках 7 года 3 мес. назад #95806

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоВетеранУчительПроект месяца 2 местоОрганизатор конкурсовПисатель 3 местоПроект месяца 1 место1 место в ГотвПрограммист Ruby
Готово, пара комментариев в модуль настроек добавлена.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Paranoid

[VX Ace] Радиокнопки в списках 7 года 2 мес. назад #96672

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 3 местоВетеранУчительПроект месяца 2 местоОрганизатор конкурсовПисатель 3 местоПроект месяца 1 место1 место в ГотвПрограммист Ruby
Сделал небольшое обновленьице, которое выносит настройки из модуля в настройки внутри окна. Теперь вы можете поменять номера иконок глобально для всех окон, но для некоторых окон взять и заменить номера иконок без необходимости писать алиасы под каждое окно, просто скопируйте нужный метод и вставьте свое число вместо De79Radios::ICON_*_RADIO. Не знаю, зачем вам это может быть нужно, но мало ли кто-то решит сделать индивидуальные иконки в каждом окне.

Код в топике и в демке обновлён.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.213 секунд