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