EKLib(Addons) - Double Window v.1.0b
Предисловие:
От мелких классовых изменений, плавно переходим к созданию классов... Баги ловились, ловятся, но имеют все шансы ловиться и в будущем. Найдете - высылайте. Грохну. Вот...
Описание:
Данный класс представляет собой два совмещенных окна, позволяющих сделать видимость произвольного отступа содержимого окна от рамки, вместо стандартных 16.
В следующих версиях планирую:
- Грохнуть все, что вы нароете
- Реализовать все, что вы предложите
Установка:
- В редакторе скриптов создайте чистую страницу над "Main" и скопируйте туда данный скрипт.
Требования:
Совместимость с другими версиями библиотеки не гарантируется!
Скрипт:
Код:
#==============================================================================
# EKLib(Addons) - Double Window v.1.0b
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
# Created on: 05.01.2009 22:44:39
# Отдельное спасибо: insider, Snaiper, Рольф, Dr. Nick To, Steck, BuBlicK
# А так же: rpgmaker.sk6.ru, rpg-maker.info, gdsa.rpgmaker.ru,
# otvety.google.ru
# Были заимствованы идеия из скриптов следующих авторов: insider, ripp3r
#==============================================================================
# Описание: Данный класс представляет собой два совмещенных окна, позволяющих сделать
# видимость произвольного отступа содержимого окна от рамки, вместо
# стандартных 16.
#------------------------------------------------------------------------------
# Особенности:
# 1. После изменения любого параметра окна, необходимо обязательно
# вызвать метод "update"
# 2. При задании параметра contents_opacity, не использовать сокращенные методы,
# такие как: +=, -=, *=, /=, %=
#------------------------------------------------------------------------------
# Установка: В редакторе скриптов создайте чистую страницу над "Main" и
# скопируйте туда данный скрипт.
#------------------------------------------------------------------------------
# Требования: Наличие библиотеки EK Lib v2.1
# Совместимость с другими версиями библиотеки не гарантируется!
#------------------------------------------------------------------------------
# Примечание: В описании скриптов используются следующие сокращения:
# [](array) - массив; i(integer) - целое число; f(float) - дробное число
# b(boolean) - true/false; s(string) - строка
# В круглых () скобках указаны рекомедуемые значения параметров
# В фигурных {} скобках указаны допустимые значения параметров
#==============================================================================
class Window_Double < Window_Base
#----------------------------------------------------------------------------
# Инициализация нового окна
# x :integer - координата X окна
# y :integer - координата Y окна
# width :integer - ширина окна
# height :integer - высота окна
# x_space :integer (4~16) - отступ от рамки по горизонтали
# y_space :integer (0~16) - отступ от рамки по вертикали
#----------------------------------------------------------------------------
attr_reader :x_space
attr_reader :y_space
#----------------------------------------------------------------------------
def initialize(x, y, width, height, x_space = 8, y_space = 4)
super(x, y, width, height)
@x_space = x_space
@y_space = y_space
x2 = x - (16 - x_space)
y2 = y - (16 - y_space)
width2 = width + 32 - x_space
height2 = height + 32 - y_space
self.back_opacity = 0
@window_invisible = Window_Base.new(x2, y2, width2, height2)
@window_invisible.contents = Bitmap.new(self.width - x_space * 2, self.height - y_space * 2)
@window_invisible.opacity = 0
@window_invisible.active = false
end
#----------------------------------------------------------------------------
# Уничтожение окна
#----------------------------------------------------------------------------
def dispose
@window_invisible.dispose
super
end
#----------------------------------------------------------------------------
# Обновление окна
#----------------------------------------------------------------------------
def update
if self.x - @window_invisible.x != 16 - @x_space
@window_invisible.x = self.x + @x_space - 16
resize = true
end
if self.y - @window_invisible.y != 16 - @y_space
@window_invisible.y = self.y + @y_space - 16
resize = true
end
if @window_invisible.width - self.width != 32 - @x_space
@window_invisible.width = self.width - @x_space * 2 + 32
@window_invisible
resize = true
end
if @window_invisible.height - self.height != 32 - @y_space
@window_invisible.height = self.height - @y_space * 2 + 32
resize = true
end
if resize
@window_invisible.contents = @window_invisible.contents.resize(
self.width - @x_space * 2, self.height - @y_space * 2,
false, nil)
resize = false
end
@window_invisible.update
super
end
#----------------------------------------------------------------------------
# Метод устанавливает новую шкурку для окна
# bitmap :bitmap - рисунок, который будет использован в качестве "шкурки"
#----------------------------------------------------------------------------
def windowskin=(bitmap)
@window_invisible.windowskin = bitmap unless @window_invisible == nil || @window_invisible.disposed?
super(bitmap)
end
#----------------------------------------------------------------------------
# Метод возвращает рисунок (bitmap), используемый, как содержимое окна
#----------------------------------------------------------------------------
def contents
return @window_invisible.contents unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
# Метод устанавливает новый рисунок, используемый, как содержимое окна
# bitmap :bitmap - рисунок
#----------------------------------------------------------------------------
def contents=(bitmap)
@window_invisible.contents = bitmap unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
# Метод устанавливает новое значение для параметра "видимости" окна
# boolean :boolean - флаг "видимости"; если true - окно видимо
#----------------------------------------------------------------------------
def visible=(boolean)
@window_invisible.visible = boolean unless @window_invisible == nil || @window_invisible.disposed?
super(boolean)
end
#----------------------------------------------------------------------------
# Метод возвращает true если обои растягиваются; false - если нет.
#----------------------------------------------------------------------------
def stretch
return @window_invisible.stretch unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
# Метод устанавливает новое значение параметра отображения обоев
# boolean :boolean - флаг отображения обоев; если true - растягиваются; false - нет
#----------------------------------------------------------------------------
def stretch=(boolean)
@window_invisible.stretch = boolean unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
# Метод возвращает значение непрозрачности содержимого окна
#----------------------------------------------------------------------------
def contents_opacity
return @window_invisible.contents_opacity unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
# Метод устанавливает новое значение непрозрачности содержимого окна
# int :integer - непрозрачность
# Примечание: не использовать сокращенные методы, такие как: +=, -=, *=, /=, %=
#----------------------------------------------------------------------------
def contents_opacity=(int)
@window_invisible.contents_opacity = int unless @window_invisible == nil || @window_invisible.disposed?
end
#----------------------------------------------------------------------------
end
#==============================================================================
Социальные закладки