From 4404fe8c427fc6b0437ae368a12acac048d82d0f Mon Sep 17 00:00:00 2001 From: "p.kosyh" Date: Wed, 30 Jun 2010 07:27:36 +0000 Subject: [PATCH] object.lua updated --- stead/object.lua | 66 ++++++++++++++++++++++++++++++++++++++++++++++-- stead/stead.lua | 7 +---- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/stead/object.lua b/stead/object.lua index 6d023e8..46e89bb 100644 --- a/stead/object.lua +++ b/stead/object.lua @@ -44,8 +44,6 @@ function player_use(self, what, onwhat, ...) return stead.par(' ', v, vv); end -pl.use = player_use; - function vobj_save(self, name, h, need) local w = deref(self.where) local dsc = self.dsc @@ -113,3 +111,67 @@ end function isVobject(v) return (type(v) == 'table') and (v.vobject_type) end + +function list_check(self, name) -- force using of objects, instead refs + local i, v, ii; + for i,v,ii in opairs(self) do + local o = ref(v); + if not o then -- isObject(o) then -- compat + error ("No object: "..tostring(v)) + return false + end + if isObject(deref(v)) then-- no named object! + local n = stead.string.format("%s[%d]", name, ii); + v = allocator:new(n); + self[ii] = v; + for_each(v, n, check_list, isList, deref(v)); + else + self[ii] = o; + end + end + return true; +end + +function list_add(self, name, pos) + local nam + nam = ref(name); + if self:look(nam) then + return nil + end + self.__modified__ = true; + if tonumber(pos) then + stead.table.insert(self, tonumber(pos), nam); + self[tonumber(pos)] = nam; -- for spare lists + else + stead.table.insert(self, nam); + end + return true +end + +function list_set(self, name, pos) + local nam + local i = tonumber(pos); + if not i then + return nil + end + nam = ref(name); + self.__modified__ = true; + self[i] = nam; -- for spare lists + return true +end + +function list_concat(self, other, pos) + local n,o,ii + for n,o,ii in opairs(other) do + o = ref(o); + if pos == nil then + self:add(o); + else + self:add(o, pos); + pos = pos + 1; + end + end +end + +game.lifes = list(game.lifes) +stead:init(); -- reinit diff --git a/stead/stead.lua b/stead/stead.lua index c2b5eab..97b92f9 100644 --- a/stead/stead.lua +++ b/stead/stead.lua @@ -496,12 +496,7 @@ function list_check(self, name) error ("No object: "..tostring(v)) return false end - if isObject(deref(v)) then-- no named object! - local n = stead.string.format("%s[%d]", name, ii); - v = allocator:new(n); - self[ii] = v; -- deref(v) - for_each(v, n, check_list, isList, deref(v)); - else + if deref(v) then self[ii] = deref(v); end end