go and newgo
This commit is contained in:
parent
86b6b5b73d
commit
59ac861cb4
122
stead/stead.lua
122
stead/stead.lua
|
@ -1082,7 +1082,6 @@ end
|
|||
function go(self, where, back)
|
||||
local was = self.where;
|
||||
local need_scene = false;
|
||||
|
||||
local ret
|
||||
|
||||
if not stead.in_goto_call then
|
||||
|
@ -1118,6 +1117,7 @@ function go(self, where, back)
|
|||
end
|
||||
|
||||
local res = v;
|
||||
|
||||
v = nil;
|
||||
if not back or not isDialog(ref(self.where)) or isDialog(ref(where)) then
|
||||
v, r = call(ref(where), 'enter', self.where);
|
||||
|
@ -1131,23 +1131,123 @@ function go(self, where, back)
|
|||
end
|
||||
end
|
||||
res = par('^^',res,v);
|
||||
|
||||
if not back then
|
||||
ref(where).__from__ = deref(self.where);
|
||||
end
|
||||
|
||||
stead.in_onexit_call = true
|
||||
v = call(ref(was), 'onexit', deref(where));
|
||||
stead.in_onexit_call = false
|
||||
res = par('^^',res,v);
|
||||
|
||||
self.where = deref(where);
|
||||
stead.in_entered_call = true
|
||||
v = call(ref(where), 'entered', deref(was));
|
||||
stead.in_entered_call = false
|
||||
|
||||
res = par('^^',res,v);
|
||||
|
||||
ret();
|
||||
|
||||
if not stead.in_goto_call then
|
||||
local to = self.where
|
||||
self.where = was
|
||||
|
||||
stead.in_onexit_call = true
|
||||
v = call(ref(was), 'left', deref(to));
|
||||
stead.in_onexit_call = false
|
||||
res = par('^^',res,v);
|
||||
|
||||
self.where = deref(to)
|
||||
|
||||
stead.in_entered_call = true
|
||||
v = call(ref(to), 'entered', deref(was));
|
||||
stead.in_entered_call = false
|
||||
res = par('^^',res,v);
|
||||
end
|
||||
|
||||
if need_scene then -- or isForcedsc(ref(where)) then -- i'am not sure...
|
||||
return par('^^',res,ref(where):scene());
|
||||
end
|
||||
return res;
|
||||
end
|
||||
|
||||
function newgo(self, where, back)
|
||||
local was = self.where;
|
||||
local need_scene = false;
|
||||
local ret
|
||||
|
||||
if not stead.in_goto_call then
|
||||
ret = function(rc) stead.in_goto_call = false return nil end
|
||||
else
|
||||
ret = function(rc) return rc end
|
||||
end
|
||||
|
||||
stead.in_goto_call = true
|
||||
|
||||
if where == nil then
|
||||
return nil, ret(false)
|
||||
end
|
||||
|
||||
if not isRoom(ref(where)) then
|
||||
error ("Trying to go nowhere: "..where);
|
||||
end
|
||||
|
||||
if not isRoom(ref(self.where)) then
|
||||
error ("Trying to go from nowhere: "..self.where);
|
||||
end
|
||||
|
||||
if stead.in_entered_call or stead.in_onexit_call then
|
||||
error ("Do not use goto from left/entered action! Use exit/enter action instead:" .. self.where);
|
||||
end
|
||||
|
||||
local v, r;
|
||||
|
||||
if not isVroom(ref(where)) and not stead.in_exit_call then
|
||||
stead.in_exit_call = true -- to break recurse
|
||||
v,r = call(ref(self.where), 'exit', where);
|
||||
stead.in_exit_call = nil
|
||||
if r == false then
|
||||
return v, ret(r)
|
||||
end
|
||||
end
|
||||
|
||||
local res = v;
|
||||
v = nil;
|
||||
|
||||
if not isVroom(ref(where)) then
|
||||
self.where = deref(where);
|
||||
end
|
||||
|
||||
if not back or not isDialog(ref(self.where)) or isDialog(ref(where)) then
|
||||
v, r = call(ref(where), 'enter', deref(was));
|
||||
if r == false then
|
||||
self.where = was;
|
||||
return par('^^', res, v), ret(r)
|
||||
end
|
||||
need_scene = true;
|
||||
if ref(where) ~= ref(self.where) then -- jump !!!
|
||||
need_scene = false;
|
||||
end
|
||||
end
|
||||
res = par('^^',res,v);
|
||||
|
||||
if not back then
|
||||
ref(where).__from__ = deref(was);
|
||||
end
|
||||
|
||||
|
||||
ret()
|
||||
|
||||
if not stead.in_goto_call then
|
||||
local to = self.where
|
||||
self.where = was
|
||||
|
||||
stead.in_onexit_call = true
|
||||
v = call(ref(was), 'left', deref(to));
|
||||
stead.in_onexit_call = false
|
||||
res = par('^^',res,v);
|
||||
|
||||
self.where = deref(to)
|
||||
|
||||
stead.in_entered_call = true
|
||||
v = call(ref(to), 'entered', deref(was));
|
||||
stead.in_entered_call = false
|
||||
res = par('^^',res,v);
|
||||
end
|
||||
|
||||
|
||||
if need_scene then -- or isForcedsc(ref(where)) then -- i'am not sure...
|
||||
return par('^^',res,ref(where):scene());
|
||||
end
|
||||
|
|
2344
stead/stead.lua.new
2344
stead/stead.lua.new
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue