Files @ 6e7519136e47
Branch filter:

Location: games/Awakening/utils.lua - annotation

Silverwing
Project state at 03.10.15
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
fda22c203ad5
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
77aa01170934
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
77aa01170934
77aa01170934
77aa01170934
6e7519136e47
6e7519136e47
77aa01170934
77aa01170934
77aa01170934
77aa01170934
6e7519136e47
77aa01170934
77aa01170934
77aa01170934
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
6e7519136e47
77aa01170934
--[[
	Общие утилиты для игр на Instead. Скорее всего будут повторно использоваться в следующих играх, если таковые будут.
]]

--[[
]]
ArrayUtils = {
	indexOf = function(array, item)
		for i = 1, #array do
			if (array[i] == item) then
				return i;
			end;
		end;
		return 0;
	end;
};

--[[
	
]]
PartyUtils = {
	addToParty = function(object)
		if (object.home) then 
			if (ArrayUtils.indexOf(pl.party, object.nam) == 0) then
				move(object, object.home);
				table.insert(pl.party, object.nam);
			end;
		end;
	end;
};

--[[
	functions, design to simplify some typical actions while developing Instead game
]]
EngineUtils = {
	getValue = function(source, param)
		local value = "";
		if (type(source) == "function") then
			value = source(param);
		else
			value = source;
		end;
		
		return value;
	end;
};

--[[
	internal space
]]
_kh = {
	vroom_enter = function(s)  
		walk(EngineUtils.getValue(s.where));
	end;
	vroom_save = function(s)
		if need then
			local t = stead.string.format("%s = kh_vroom(%s, %q, %s);\n",
				name, stead.tostring(self.disp), 
					stead.deref(self.where), stead.deref(self.nam));
			h:write(t);
		end
		stead.savemembers(h, self, name,false);
	end;
};

function kh_vway(disp, dsc, target, seen_level)
	local temp = vway(disp, dsc, target);
	temp.seen_level = seen_level;
	return temp;
end;

--[[
	vroom with additional functionality
]]
function kh_vroom(disp, target, seen_level)
	return room {
		nam = disp;
		disp = disp;
		where = target;
		enter = _kh.vroom_enter;
		seen_level = seen_level;
		--enter = _kh.vroom_enter;
		--save = _kh.vroom_save;
	};
end;

obj = inherit(obj, function(v)
	v.disable_implicit = hook(v.disable, function(f, s, ...)
		s._disabled_implicit = true;
		return f(s, unpack(arg));
	end);

	v.disable = hook(v.disable, function(f, s, ...)
		s._disabled_explicit = true;
		return f(s, unpack(arg));
	end);
	
	v.enable_implicit = hook(v.enable, function(f, s, ...)
		s._disabled_implicit = false;
		if (s._disabled_explicit) then
			return s; --mimic original enable() behavior
		else
			return f(s, unpack(arg));
		end;
	end);
	
	v.enable = hook(v.enable, function(f, s, ...)
		s._disabled_explicit = false;
		if (s._disabled_implicit) then
			return s; --mimic original enable() behavior
		else
			return f(s, unpack(arg));
		end;
	end);
	
	return v;
end);

--[[
	character object
	represents character, with whom you can interact
]]
function character(tab)
	if (not tab.act) then
		tab.act = function(s)
			if (s.dlg) then
				walkin(s.dlg);
			else
				return s.phrases[rnd(#s.phrases)];
			end;
		end;
	end;
	
	return obj(tab);
end;

function darkroom(tab)
	local life;
	local entered;
	local left;
	if (not tab.has_light) then
		tab.has_light = false;
	end;
	if (tab.life) then
		life = tab.life;
	end;
	if (tab.entered) then
		entered = tab.entered;
	end;
	if (tab.left) then
		left = tab.left;
	end;
	tab.entered = function(s)
		lifeon(s);
		if (entered) then
			entered(s);
		end;
	end;
	tab.left = function(s)
		lifeoff(s);
		if (left) then
			left(s);
		end;
	end;
	tab.life = function(s)
		if (s.has_light) then
			-- show all objects that were not explicitly disabled(any seen_level)
			for i = 1, #objs(s) do
				objs(s)[i]:enable_implicit();
			end;
			for i = 1, #ways(s) do
				ways(s)[i]:enable_implicit();
			end;
		elseif (pl.has_light) then
			-- show all objects that were not explicitly disabled and marked as seen in halflight (seen_level = 1 or higher)
			for i = 1, #objs(s) do
				if (type(objs(s)[i].seen_level) == "number" and objs(s)[i].seen_level >= 1) then
					objs(s)[i]:enable_implicit();
				else
					objs(s)[i]:disable_implicit();
				end;
			end;
			for i = 1, #ways(s) do
				if (type(ways(s)[i].seen_level) == "number" and ways(s)[i].seen_level >= 1) then
					ways(s)[i]:enable_implicit();
				else
					ways(s)[i]:disable_implicit();
				end;
			end;
		else
			-- show all objects that were not explicitly disabled and marked as seen in darkness (seen_level = 2 or higher)
			for i = 1, #objs(s) do
				if (type(objs(s)[i].seen_level) == "number" and objs(s)[i].seen_level >= 2) then
					objs(s)[i]:enable_implicit();
				else
					objs(s)[i]:disable_implicit();
				end;
			end;
			for i = 1, #ways(s) do
				if (type(ways(s)[i].seen_level) == "number" and ways(s)[i].seen_level >= 2) then
					ways(s)[i]:enable_implicit();
				else
					ways(s)[i]:disable_implicit();
				end;
			end;
		end;
		
		
		if (life) then
			life(s);
		end;
	end;
	if (not tab.dsc) then
		tab.dsc = function(s)
			if (s.has_light) then
				return s.dsc_lit;
			elseif (pl.has_light) then
				return s.dsc_halflit;
			else
				return s.dsc_dark;
			end;
		end;
	end;
	
	return room(tab);
end;