Register a new developer action.
Register a new developer action.
1 table data
the data.
2 string inherit
optional. Another developerAction to inherit.
--taken from game/developer/actions.lua local useWaterDispenser = {} useWaterDispenser.id = "use_water_dispenser" useWaterDispenser.targetObjectClass = "water_dispenser" useWaterDispenser.interactTime = 1 useWaterDispenser.validObjects = {} function useWaterDispenser:reset() table.clearArray(self.validObjects) self.done = false end function useWaterDispenser:init(target) self.employee = target self.done = false events:addFunctionReceiver(self, useWaterDispenser.handleObjectSell, studio.expansion.EVENTS.REMOVED_OBJECT) end function useWaterDispenser:finish() useWaterDispenser.baseClass.finish(self) self:removeEventHandler() end function useWaterDispenser:removeEventHandler() events:removeFunctionReceiver(self, studio.expansion.EVENTS.REMOVED_OBJECT) end function useWaterDispenser:handleObjectSell(object) if object == self.targetObject then self.employee:abortCurrentAction() end end function useWaterDispenser:isEligible(officeObject) table.clearArray(self.validObjects) local list = officeObject:getObjectsByClass(self.targetObjectClass) if list then for key, object in ipairs(list) do if object:isPartOfValidRoom() and object:isValidForInteraction() and not object:getInteractionTarget() then self.validObjects[#self.validObjects + 1] = object end end end return #self.validObjects > 0 end function useWaterDispenser:canPick(target) return target:isThirsty() end function useWaterDispenser:begin(target) local randomIndex = math.random(1, #self.validObjects) local randomObject = self.validObjects[randomIndex] self.employee = target self.employeeAvatar = target:getAvatar() self.targetObject = randomObject randomObject:setInteractionTarget(target) table.clearArray(self.validObjects) end function useWaterDispenser:isDone() return self.done end function useWaterDispenser:abort(target) useWaterDispenser.baseClass.abort(self, target) self.employee:setWalkPath(nil) self.employee = nil self.targetObject:setInteractionTarget(nil) self.targetObject = nil self:removeEventHandler() end function useWaterDispenser:onPathInvalidated() return self.targetObject:isValidForInteraction() -- make sure the object is still valid for interaction end function useWaterDispenser:update(dt) if not self.path then local path, result = studio:getPathToObjectEntrance(self.employee, self.targetObject) -- if result is nil it means it's not yet done trying to find a path, if it's false it means it failed if result == false then -- pathfinding failed, don't do anything self.done = true self:abort() elseif result == true then self.path = path -- we got a path, apply it to the employee and let him do the rest self.employee:setWalkPath(path) end else if not self.employee:getWalkPath() and not self.employee.requiresPathRecomputation then if not self.facing then self.facing = true self.employee:faceObject(self.targetObject) else if self.employee:getAvatar():isAnimQueueEmpty() then self.path = nil self.done = true -- the employee has walked up to the toilet and taken a piss, end here self.targetObject:setInteractionTarget(nil) end end end end end developerActions.registerNew(useWaterDispenser)