135 lines
3.6 KiB
Plaintext
135 lines
3.6 KiB
Plaintext
|
-- Bundled by luabundle {"version":"1.6.0"}
|
||
|
local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (function(superRequire)
|
||
|
local loadingPlaceholder = {[{}] = true}
|
||
|
|
||
|
local register
|
||
|
local modules = {}
|
||
|
|
||
|
local require
|
||
|
local loaded = {}
|
||
|
|
||
|
register = function(name, body)
|
||
|
if not modules[name] then
|
||
|
modules[name] = body
|
||
|
end
|
||
|
end
|
||
|
|
||
|
require = function(name)
|
||
|
local loadedModule = loaded[name]
|
||
|
|
||
|
if loadedModule then
|
||
|
if loadedModule == loadingPlaceholder then
|
||
|
return nil
|
||
|
end
|
||
|
else
|
||
|
if not modules[name] then
|
||
|
if not superRequire then
|
||
|
local identifier = type(name) == 'string' and '\"' .. name .. '\"' or tostring(name)
|
||
|
error('Tried to require ' .. identifier .. ', but no such module has been registered')
|
||
|
else
|
||
|
return superRequire(name)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
loaded[name] = loadingPlaceholder
|
||
|
loadedModule = modules[name](require, loaded, register, modules)
|
||
|
loaded[name] = loadedModule
|
||
|
end
|
||
|
|
||
|
return loadedModule
|
||
|
end
|
||
|
|
||
|
return require, loaded, register, modules
|
||
|
end)(nil)
|
||
|
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
|
||
|
require("playermat/ClueCounter")
|
||
|
end)
|
||
|
__bundle_register("playermat/ClueCounter", function(require, _LOADED, __bundle_register, __bundle_modules)
|
||
|
-- Table of items which can be counted in this Bowl
|
||
|
-- Each entry has 2 things to enter
|
||
|
-- a name (what is in the name field of that object)
|
||
|
-- a value (how much it is worth)
|
||
|
-- a number in the items description will override the number entry in this table
|
||
|
local validCountItemList = {
|
||
|
["Clue"] = 1,
|
||
|
[""] = 1
|
||
|
}
|
||
|
local trashGUID = "70b9f6"
|
||
|
exposedValue = 0
|
||
|
|
||
|
function onLoad()
|
||
|
self.createButton({
|
||
|
label = "",
|
||
|
click_function = "removeAllClues",
|
||
|
function_owner = self,
|
||
|
position = { 0, 0.1, 0 },
|
||
|
height = 0,
|
||
|
width = 0,
|
||
|
font_color = { 0, 0, 0 },
|
||
|
font_size = 2000
|
||
|
})
|
||
|
loopID = Wait.time(countItems, 1, -1)
|
||
|
end
|
||
|
|
||
|
-- Activated once per second, counts items in bowls
|
||
|
function countItems()
|
||
|
local totalValue = 0
|
||
|
local countableItems = findValidItemsInSphere()
|
||
|
for _, entry in ipairs(countableItems) do
|
||
|
local descValue = tonumber(entry.hit_object.getDescription())
|
||
|
local stackMult = math.abs(entry.hit_object.getQuantity())
|
||
|
-- Use value in description if available
|
||
|
if descValue ~= nil then
|
||
|
totalValue = totalValue + descValue * stackMult
|
||
|
else
|
||
|
-- Otherwise use the value in validCountItemList
|
||
|
totalValue = totalValue + validCountItemList[entry.hit_object.getName()] * stackMult
|
||
|
end
|
||
|
end
|
||
|
exposedValue = totalValue
|
||
|
self.editButton({ index = 0, label = totalValue })
|
||
|
end
|
||
|
|
||
|
function findValidItemsInSphere()
|
||
|
local items = Physics.cast({
|
||
|
origin = self.getPosition(),
|
||
|
direction = { 0, 1, 0 },
|
||
|
type = 2,
|
||
|
max_distance = 0,
|
||
|
size = { 2, 2, 2 },
|
||
|
--debug=true
|
||
|
})
|
||
|
|
||
|
retval = {}
|
||
|
for _, entry in ipairs(items) do
|
||
|
--Ignore the bowl
|
||
|
if entry.hit_object ~= self then
|
||
|
--Ignore if not in validCountItemList
|
||
|
local tableEntry = validCountItemList[entry.hit_object.getName()]
|
||
|
if tableEntry ~= nil then
|
||
|
table.insert(retval, entry)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
return retval
|
||
|
end
|
||
|
|
||
|
function removeAllClues()
|
||
|
startLuaCoroutine(self, "clueRemovalCoroutine")
|
||
|
end
|
||
|
|
||
|
function clueRemovalCoroutine()
|
||
|
for _, entry in ipairs(findValidItemsInSphere()) do
|
||
|
-- Do not put the table in the garbage
|
||
|
if entry.hit_object.getGUID() ~= "4ee1f2" then
|
||
|
-- delay for animation purposes
|
||
|
for k = 1, 10 do
|
||
|
coroutine.yield(0)
|
||
|
end
|
||
|
getObjectFromGUID(trashGUID).putObject(entry.hit_object)
|
||
|
end
|
||
|
end
|
||
|
return 1
|
||
|
end
|
||
|
end)
|
||
|
return __bundle_require("__root")
|