Skip to content
Snippets Groups Projects
Commit d3adc8ca authored by dg's avatar dg
Browse files

Display item key when picking up

Fixed the EnterName dialog to release keyboard control when cancelled
Zone:getGenerator will check the generator exists


git-svn-id: http://svn.net-core.org/repos/t-engine4@992 51575b47-30f0-44d4-a5cc-537603b46e54
parent 2f160d34
No related branches found
No related tags found
No related merge requests found
......@@ -147,7 +147,7 @@ function _M:forAllStack(fct)
fct(self)
if not self.stacked then return end
for i, so in ipairs(self.stacked) do
fct(so)
if fct(so, i) then break end
end
end
......
......@@ -485,6 +485,8 @@ function _M:getLevel(game, lev, old_lev, no_close)
end
function _M:getGenerator(what, level, spots)
assert(level.data.generator[what], "requested zone generator of type "..tostring(what).." but it is not defined")
assert(level.data.generator[what].class, "requested zone generator of type "..tostring(what).." but it has no class field")
print("[GENERATOR] requiring", what, level.data.generator and level.data.generator[what] and level.data.generator[what].class)
return require(level.data.generator[what].class).new(
self,
......
......@@ -109,16 +109,33 @@ end
function _M:onAddObject(o)
end
--- Rerturns the position of an item in the given inventory, or nil
function _M:itemPosition(inven, o)
inven = self:getInven(inven)
for i, p in ipairs(inven) do
local found = nil
o:forAllStack(function(so)
if p.name == so.name then found = i return true end
end)
if found then return found end
end
return nil
end
--- Picks an object from the floor
function _M:pickupFloor(i, vocal)
function _M:pickupFloor(i, vocal, no_sort)
local o = game.level.map:getObject(self.x, self.y, i)
if o then
local prepickup = o:check("on_prepickup", self, i)
if not prepickup and self:addObject(self.INVEN_INVEN, o) then
game.level.map:removeObject(self.x, self.y, i)
if not no_sort then self:sortInven(self.INVEN_INVEN) end
o:check("on_pickup", self)
self:check("on_pickup_object", o)
if vocal then game.logSeen(self, "%s picks up: %s.", self.name:capitalize(), o:getName{do_color=true}) end
local letter = string.char(string.byte('a') + (self:itemPosition(self.INVEN_INVEN, o) - 1 or 0))
if vocal then game.logSeen(self, "%s picks up (%s.): %s.", self.name:capitalize(), letter, o:getName{do_color=true}) end
elseif not prepickup then
if vocal then game.logSeen(self, "%s has no room for: %s.", self.name:capitalize(), o:getName{do_color=true}) end
end
......@@ -337,6 +354,7 @@ end
--- Re-order inventory, sorting and stacking it
function _M:sortInven(inven)
if not inven then inven = self.inven[self.INVEN_INVEN] end
inven = self:getInven(inven)
-- Stack objects first, from bottom
for i = #inven, 1, -1 do
......
......@@ -24,8 +24,8 @@ local Dialog = require "engine.Dialog"
tiles = engine.Tiles.new(16, 16)
--- Handles player running
-- This should work for running inside tunnel, alongside walls, in open spaces.<br/>
--- Handles control Cursor
-- This should work for anything that has a surface and x,y,w,h,font properties.
module(..., package.seeall, class.make)
function _M:startCursor()
......
......@@ -84,7 +84,6 @@ function _M:move(x, y, force)
while obj do
if obj.auto_pickup then
self:pickupFloor(i, true)
self:sortInven()
else
nb = nb + 1
i = i + 1
......@@ -428,7 +427,6 @@ function _M:playerPickup()
local titleupdator = self:getEncumberTitleUpdator("Pickup")
local d d = self:showPickupFloor(titleupdator(), nil, function(o, item)
self:pickupFloor(item, true)
self:sortInven()
self.changed = true
d.title = titleupdator()
d:used()
......
......@@ -234,10 +234,15 @@ function _M:selectStepNew()
end
self:registerDialog(display_module)
self.step = ButtonList.new(self.mod_list, 10, 10, self.w * 0.24, (5 + 35) * #self.mod_list, nil, 5)
self.step = ButtonList.new(self.mod_list, 10, 10, self.w * 0.24, (5 + 35) * #self.mod_list, nil, 5)
self.step.dialog = display_module
self:bindKeysToStep()
end
function _M:bindKeysToStep()
self.step:setKeyHandling()
self.step:setMouseHandling()
self.step.key:addBind("EXIT", function() self:unregisterDialog(display_module) self:selectStepMain() end)
self.step.key:addBind("EXIT", function() self:unregisterDialog(self.step.dialog) self:selectStepMain() end)
end
function _M:selectStepLoad()
......
......@@ -75,6 +75,7 @@ function _M:init(runmod)
},{
EXIT = function()
game:unregisterDialog(self)
game:bindKeysToStep()
end
})
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment