noita-mapcap/files/libraries/noita-api
David Vogel 98dfb5fbb0 Cleanup, Refactoring and Fixes
- Remove unused util functions
- Put util stuff into its own namespace
- Move all initialization stuff into root init.lua
- Move progressBarString function into ui.lua
- Fix ffi.load error message
- Fix DebugAPI.BiomeMapGetFilename
- Move JSON lib into Noita API wrapper
- Move Vec2 lib into Noita API wrapper
- Move compatibility stuff into Noita API wrapper
- Emulate package tables if in restricted API mode
- Emulate require if in restricted API mode
- Use require instead of dofile_once everywhere
- Fix WrapID method to accept nil
- Add EmmyLua annotations for the default Noita API
- Add README.md to Noita API wrapper
2022-07-23 17:36:21 +02:00
..
annotations.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
camera.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
compatibility.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
component.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
debug.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
entity.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
json.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
README.md Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00
vec2.lua Cleanup, Refactoring and Fixes 2022-07-23 17:36:21 +02:00

Noita API wrapper

This wraps the Noita API and exposes it in a more dev friendly way. Entities and components are returned as objects. All entity and component related functions are now methods of the respective objects.

The library also comes with EmmyLua annotations, so code completion, type information and other hints will work in any IDE or editor that supports this. (Only tested with VSCode for now)

State

Working but incomplete. If something is missing, you need to add it!

It would be nice to have code generation to generate this library from the official files, but meh. But this would be too complex, as there are a lot of edge cases and stuff that has to be handled in a specific way.

Usage

  1. Copy this into your mod so you get the following file path: mods/your-mod/files/libraries/noita-api/README.md.

  2. Add the following at the beginning of your mod's init.lua:

    -- Emulate and override some functions and tables to make everything conform more to standard lua.
    -- This will make `require` work, even in sandboxes with restricted Noita API.
    local modFolder = "noita-mapcap"
    dofile("mods/" .. modFolder .. "/files/libraries/noita-api/compatibility.lua")(modFolder)
    

    You need to set modFolder to your mod's directory name.

After that you can import and use the library like this:

local EntityAPI = require("libraries.noita-api.entity")

local x, y, radius = 10, 10, 100

local entities = EntityAPI.GetInRadius(x, y, radius)
for _, entity in ipairs(entities) do
    print(entity:GetName())

    local components = entity:GetComponents("VelocityComponent")
    for _, component in ipairs(components) do
        entity:SetComponentsEnabled(component, false)
    end
end