Extending Editor API

If we have a set of operations that we would like to add to the core editor API, then we can create a new file in the editor /api root folder, named properly. The layout of the file will need to follow this pattern (example some decal editing API):

lua/ge/extensions/editor/api/myspecial.lua:

-- we declare the editor local table reference local editor
local editor

-- some function, note the local
local function selectDecalTemplate(name)
  -- code here
end
local function createDecalTemplate(decal)
  -- code here
end
local  function  deleteDecalTemplate(name)
  -- code here
end
-- this function is called in the main editor init function,
-- the argument is a reference to the main editor table where
-- you can add your functions
local function initialize(editorInstance)
  -- we keep a ref for ourselves to use it in our local functions
  editor = editorInstance
  -- add our functions to the main editor table
  editor.selectDecalTemplate = selectDecalTemplate
  editor.createDecalTemplate = createDecalTemplate
  editor.deleteDecalTemplate = deleteDecalTemplate
end

-- return this simple table which contains only the initialize function
local M = {}
M.initialize = initialize

return M

After we have written this file, we need to add it to the main editor initialize function. For this, open for edit the /lua/ge/extensions/editor/main.lua and add the proper lines in the initialize function:

-- this will create a table instance with your module
M.mySpecialModule = require("editor/api/myspecial")

-- this will call the module's initialize function with
-- the M argument which is the actual editor table
M.mySpecialModule.initialize(M)

So, from now on your functions can be called from anywhere, as editor.selectDecalTemplate(...)

The core logic of the tools are kept as these modules, no GUI code inside them, just pure operations over the data. The tools GUI found in the ge/extensions/editor/ are using the various APIs found in these modules to operate over the game data.

Last modified: 7 December 2021, at 14:30

Any further questions?

Join our discord