From 6a96fc448dd024be206ccc8073c6c83b6457e8c3 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 19 Nov 2018 00:14:07 +0000 Subject: [PATCH] Add callbacks for area operations --- api.lua | 19 ++++++++++++++++++- api.md | 5 ++++- internal.lua | 15 ++++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/api.lua b/api.lua index 730e96d..8103b84 100644 --- a/api.lua +++ b/api.lua @@ -1,5 +1,23 @@ local hudHandlers = {} + +areas.registered_on_adds = {} +areas.registered_on_removes = {} +areas.registered_on_moves = {} + +function areas:registerOnAdd(func) + table.insert(areas.registered_on_adds, func) +end + +function areas:registerOnRemove(func) + table.insert(areas.registered_on_removes, func) +end + +function areas:registerOnMove(func) + table.insert(areas.registered_on_moves, func) +end + + --- Adds a function as a HUD handler, it will be able to add items to the Areas HUD element. function areas:registerHudHandler(handler) table.insert(hudHandlers, handler) @@ -141,4 +159,3 @@ function areas:canInteractInArea(pos1, pos2, name, allow_open) -- intersecting areas and they are all owned by the player. return true end - diff --git a/api.md b/api.md index c74b4c7..e942353 100644 --- a/api.md +++ b/api.md @@ -4,7 +4,10 @@ Areas mod API API list --- - * `areas.registerHudHandler(handler)` - Registers a handler to add items to the Areas HUD. See [HUD](#hud). + * `areas:registerHudHandler(handler)` - Registers a handler to add items to the Areas HUD. See [HUD](#hud). + * `areas:registerOnAdd(func(owner, name, pos1, pos2, parent))` + * `areas:registerOnRemove(func(id))` + * `areas:registerOnMove(func(id, area, pos1, pos2))` HUD diff --git a/internal.lua b/internal.lua index bf7e92c..9f5a764 100644 --- a/internal.lua +++ b/internal.lua @@ -86,6 +86,11 @@ function areas:add(owner, name, pos1, pos2, parent) owner = owner, parent = parent } + + for i=1, #areas.registered_on_adds do + areas.registered_on_adds[i](owner, name, pos1, pos2, parent) + end + -- Add to AreaStore if self.store then local sid = self.store:insert_area(pos1, pos2, tostring(id)) @@ -118,6 +123,10 @@ function areas:remove(id, recurse) end end + for i=1, #areas.registered_on_removes do + areas.registered_on_removes[i](id) + end + -- Remove main entry self.areas[id] = nil @@ -133,6 +142,11 @@ function areas:move(id, area, pos1, pos2) area.pos1 = pos1 area.pos2 = pos2 + + for i=1, #areas.registered_on_moves do + areas.registered_on_moves[i](id, area, pos1, pos2) + end + if self.store then self.store:remove_area(areas.store_ids[id]) local sid = self.store:insert_area(pos1, pos2, tostring(id)) @@ -282,4 +296,3 @@ function areas:isAreaOwner(id, name) end return false end -