1 (edited by kerber 2014-02-08 21:11:01)

Topic: Инвентарь с горизонтальной прокруткой

Наваял горизонтальную прокрутку горизонтального инвентаря для казуалок типа "Hidden objects" и графических квестов:

casual_inventory.lua

-- графический инвентарь с горизонтальной прокруткой

global{
-- настраиваемые параметры инвентаря --
global_size_gameinv = 7; -- количество отображаемых элементов инвентаря
inv_right_button = {x = 748, y = 466, w = 47,h = 116};-- правая кнопка прокрутки инвентаря
inv_left_button = {x = 6, y = 466, w = 47,h = 116}; -- левая кнопка прокрутки инвентаря
-- настраиваемые параметры инвентаря --

global_current_shift_inv = 0; -- текущий сдвиг элементов инвентаря относительно начала отображаемого инвентаря
global_current_size_inv = 0;-- текущий размер инвентаря
global_my_casual_inv = {}; -- таблица для инвентаря
};
-- game.gui.hinv_delim = ''; -- настройка отображения разделителя в инвентаре

function casual_inv(x,y)
if(x > inv_left_button.x and x < inv_left_button.x + inv_left_button.w and y > inv_left_button.y and y < inv_left_button.y + inv_left_button.h) then
p ('');
if (global_size_gameinv + global_current_shift_inv < #global_my_casual_inv) then
inv():zap();
global_current_shift_inv = global_current_shift_inv + 1; 
for iter = 1, global_size_gameinv do
plase = iter + global_current_shift_inv;
taketo(global_my_casual_inv[plase],iter);
end;
end;
end;
if(x > inv_right_button.x and x < inv_right_button.x + inv_right_button.w and y > inv_right_button.y and y < inv_right_button.y + inv_right_button.h) then 
p ('');
if (#inv() <= #global_my_casual_inv and global_current_shift_inv >= 1) then
inv():zap();
global_current_shift_inv = global_current_shift_inv - 1; 
for iter = 1, global_size_gameinv do
plase = iter + global_current_shift_inv;
taketo(global_my_casual_inv[plase],iter);
end;
end;
end;
end

function add_to_casual_inv(s)
    table.insert(global_my_casual_inv,s);
    if #global_my_casual_inv <= global_size_gameinv then
        take(s);
    else
        remove(s);
    end;
end

function rem_to_casual_inv(s)
remove(s,inv());
for iter = 0, #global_my_casual_inv do
if global_my_casual_inv[iter] == s then
table.remove(global_my_casual_inv, iter);
end;
end;
if #inv() < global_size_gameinv and  #global_my_casual_inv >= global_current_shift_inv + global_size_gameinv then
inv():zap();
for iter = 1, global_size_gameinv do
plase = iter + global_current_shift_inv;
taketo(global_my_casual_inv[plase],iter);
end;
elseif #inv() < global_size_gameinv and #global_my_casual_inv < global_current_shift_inv + global_size_gameinv and global_current_shift_inv > 0 then
global_current_shift_inv = global_current_shift_inv - 1;
inv():zap();
for iter = 1, global_size_gameinv do
plase = iter + global_current_shift_inv;
taketo(global_my_casual_inv[plase],iter);
end;
end;
end

Пример использования:

apple = obj {
        nam = ''..img('appe.png');
        dsc = '{'.l.img('appe.png')..'}';
    disp = ''..img('theme/lian_chu.png');
    act = function(s)
        add_to_casual_inv(s)
    end;
    use = function(s)
        rem_to_casual_inv(s);
    end;
}

2 (edited by kerber 2014-02-24 18:48:46)

Re: Инвентарь с горизонтальной прокруткой

Собственно инвентарь выглядит примерно так:

Post's attachments

Attachment icon inv.jpg 58.01 kb, 119 downloads since 2014-02-24