std.prog: INSTEAD программирование

From: Peter (harbor:club.syscall.ru) 10.04.17 10:36 UTC
To: All
Subject: Создание контейнера в STEAD3
Класс объектов

Конструкторы объектов широко использовались в STEAD2. В STEAD3 obj/dlg/room реализованы как классы объектов. Класс объектов удобно создавать для тех случаев, когда поведение создаваемого объекта не укладывается в стандартные объекты obj/room/dlg и вы хотите поменять методы класса. Изменив метод класса, например, вы можете вообще изменить то, как выглядит предмет в сцене. В качестве примера, рассмотрим создание класса "контейнер". Контейнер может хранить в себе другие объекты, быть закрытым и открытым.

====
-- create own class container
cont = std.class({ -- создаем класс cont
    display = function(s) -- переопределяем метод показа предмета
	local d = std.obj.display(s)
	if s:closed() or #s.obj == 0 then
	    return d
	end
	local c = s.cont or 'Внутри: ' -- описатель содержимого
	local empty = true
	for i = 1, #s.obj do
	    local o = s.obj[i]
	    if o:visible() then
		empty = false
		if i > 1 then c = c .. ', ' end
		c = c..'{'..std.nameof(o)..'|'..std.dispof(o)..'}'
	    end
	end
	if empty then
	    return d
	end
	c = c .. '.'
	return std.par(std.space_delim, d, c)
    end;
}, std.obj) -- мы наследуемся от стандартного объекта
====

После этого, вы можете создавать контейнеры так:

====
cont {
    nam = 'ящик';
    dsc = [[Тут есть {ящик}.]];
    cont = 'В ящике: ';
}: with {
    'яблоко', 'груша';
}
====

Когда контейнер будет открыт, вы увидите описание ящика, а также содержимое ящика в виде строки ссылок: В ящике: яблоко, груша. dsc объектов яблоко и груша будут скрыты.

К сожалению, подробное описание классов выходит за рамки данного руководства, эти вещи будут описаны в другом руководстве для разработчиков модулей. А пока, для вашей первой игры, вам не стоит писать свои классы объектов.
[1 / 110]