diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/scripting/StarWorldLuaBindings.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/scripting/StarWorldLuaBindings.hpp')
-rw-r--r-- | source/game/scripting/StarWorldLuaBindings.hpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/source/game/scripting/StarWorldLuaBindings.hpp b/source/game/scripting/StarWorldLuaBindings.hpp new file mode 100644 index 0000000..87a0367 --- /dev/null +++ b/source/game/scripting/StarWorldLuaBindings.hpp @@ -0,0 +1,182 @@ +#ifndef STAR_LUA_BINDINGS_HPP +#define STAR_LUA_BINDINGS_HPP + +#include "StarBiMap.hpp" +#include "StarRect.hpp" +#include "StarPoly.hpp" +#include "StarColor.hpp" +#include "StarGameTypes.hpp" +#include "StarCollisionBlock.hpp" +#include "StarLua.hpp" +#include "StarPlatformerAStar.hpp" + +namespace Star { + +STAR_CLASS(World); +STAR_CLASS(WorldServer); +STAR_CLASS(WorldClient); +STAR_CLASS(Item); +STAR_CLASS(ScriptedEntity); + +namespace LuaBindings { + typedef function<Json(ScriptedEntityPtr const& entity, String const& functionName, JsonArray const& args)> CallEntityScriptFunction; + + LuaCallbacks makeWorldCallbacks(World* world); + + void addWorldDebugCallbacks(LuaCallbacks& callbacks); + void addWorldEntityCallbacks(LuaCallbacks& callbacks, World* world); + void addWorldEnvironmentCallbacks(LuaCallbacks& callbacks, World* world); + + namespace WorldCallbacks { + float magnitude(World* world, Vec2F pos1, Maybe<Vec2F> pos2); + Vec2F distance(World* world, Vec2F const& arg1, Vec2F const& arg2); + bool polyContains(World* world, PolyF const& poly, Vec2F const& pos); + LuaValue xwrap(World* world, LuaEngine& engine, LuaValue const& positionOrX); + LuaValue nearestTo(World* world, LuaEngine& engine, Variant<Vec2F, float> const& sourcePositionOrX, Variant<Vec2F, float> const& targetPositionOrX); + bool rectCollision(World* world, RectF const& arg1, Maybe<CollisionSet> const& arg2); + bool pointTileCollision(World* world, Vec2F const& arg1, Maybe<CollisionSet> const& arg2); + bool lineTileCollision(World* world, Vec2F const& arg1, Vec2F const& arg2, Maybe<CollisionSet> const& arg3); + Maybe<pair<Vec2F, Vec2I>> lineTileCollisionPoint(World* world, Vec2F const& start, Vec2F const& end, Maybe<CollisionSet> const& maybeCollisionSet); + bool rectTileCollision(World* world, RectF const& arg1, Maybe<CollisionSet> const& arg2); + bool pointCollision(World* world, Vec2F const& point, Maybe<CollisionSet> const& collisionSet); + LuaTupleReturn<Maybe<Vec2F>, Maybe<Vec2F>> lineCollision(World* world, Vec2F const& start, Vec2F const& end, Maybe<CollisionSet> const& maybeCollisionSet); + bool polyCollision(World* world, PolyF const& arg1, Maybe<Vec2F> const& arg2, Maybe<CollisionSet> const& arg3); + List<Vec2I> collisionBlocksAlongLine(World* world, Vec2F const& arg1, Vec2F const& arg2, Maybe<CollisionSet> const& arg3, Maybe<int> const& arg4); + List<pair<Vec2I, LiquidLevel>> liquidAlongLine(World* world, Vec2F const& start, Vec2F const& end); + Maybe<Vec2F> resolvePolyCollision(World* world, PolyF poly, Vec2F const& position, float maximumCorrection, Maybe<CollisionSet> const& collisionSet); + bool tileIsOccupied(World* world, Vec2I const& arg1, Maybe<bool> const& arg2, Maybe<bool> const& arg3); + bool placeObject(World* world, String const& arg1, Vec2I const& arg2, Maybe<int> const& arg3, Json const& arg4); + Maybe<EntityId> spawnItem(World* world, Json const& itemType, Vec2F const& worldPosition, Maybe<size_t> const& inputCount, Json const& inputParameters, Maybe<Vec2F> const& initialVelocity, Maybe<float> const& intangibleTime); + List<EntityId> spawnTreasure(World* world, Vec2F const& position, String const& pool, float level, Maybe<uint64_t> seed); + Maybe<EntityId> spawnMonster(World* world, String const& arg1, Vec2F const& arg2, Maybe<JsonObject> const& arg3); + Maybe<EntityId> spawnNpc(World* world, Vec2F const& arg1, String const& arg2, String const& arg3, float arg4, Maybe<uint64_t> arg5, Json const& arg6); + Maybe<EntityId> spawnStagehand(World* world, Vec2F const& spawnPosition, String const& typeName, Json const& overrides); + Maybe<EntityId> spawnProjectile(World* world, String const& arg1, Vec2F const& arg2, Maybe<EntityId> const& arg3, Maybe<Vec2F> const& arg4, bool arg5, Json const& arg6); + Maybe<EntityId> spawnVehicle(World* world, String const& vehicleName, Vec2F const& pos, Json const& extraConfig); + double time(World* world); + uint64_t day(World* world); + double timeOfDay(World* world); + float dayLength(World* world); + Json getProperty(World* world, String const& arg1, Json const& arg2); + void setProperty(World* world, String const& arg1, Json const& arg2); + Maybe<LiquidLevel> liquidAt(World* world, Variant<RectF, Vec2I> boundBoxOrPoint); + float gravity(World* world, Vec2F const& arg1); + bool spawnLiquid(World* world, Vec2F const& arg1, LiquidId arg2, float arg3); + Maybe<LiquidLevel> destroyLiquid(World* world, Vec2F const& position); + bool isTileProtected(World* world, Vec2F const& position); + Maybe<PlatformerAStar::Path> findPlatformerPath(World* world, Vec2F const& start, Vec2F const& end, ActorMovementParameters actorMovementParameters, PlatformerAStar::Parameters searchParameters); + PlatformerAStar::PathFinder platformerPathStart(World* world, Vec2F const& start, Vec2F const& end, ActorMovementParameters actorMovementParameters, PlatformerAStar::Parameters searchParameters); + } + + namespace ClientWorldCallbacks { + RectI clientWindow(WorldClient* world); + } + + namespace ServerWorldCallbacks { + bool breakObject(WorldServer* world, EntityId arg1, bool arg2); + bool isVisibleToPlayer(WorldServer* world, RectF const& arg1); + bool loadRegion(WorldServer* world, RectF const& arg1); + bool regionActive(WorldServer* world, RectF const& arg1); + void setTileProtection(WorldServer* world, DungeonId arg1, bool arg2); + bool isPlayerModified(WorldServer* world, RectI const& region); + Maybe<LiquidLevel> forceDestroyLiquid(WorldServer* world, Vec2F const& position); + EntityId loadUniqueEntity(WorldServer* world, String const& uniqueId); + void setUniqueId(WorldServer* world, EntityId entityId, Maybe<String> const& uniqueId); + Json takeItemDrop(World* world, EntityId entityId, Maybe<EntityId> const& takenBy); + void setPlayerStart(World* world, Vec2F const& playerStart, Maybe<bool> respawnInWorld); + List<EntityId> players(World* world); + LuaString fidelity(World* world, LuaEngine& engine); + } + + namespace WorldDebugCallbacks { + void debugPoint(Vec2F const& arg1, Color const& arg2); + void debugLine(Vec2F const& arg1, Vec2F const& arg2, Color const& arg3); + void debugPoly(PolyF const& poly, Color const& color); + void debugText(LuaEngine& engine, LuaVariadic<LuaValue> const& args); + } + + namespace WorldEntityCallbacks { + LuaTable entityQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable monsterQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable npcQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable objectQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable itemDropQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable playerQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable loungeableQuery(World* world, LuaEngine& engine, Vec2F const& pos1, LuaValue const& pos2, Maybe<LuaTable> options); + LuaTable entityLineQuery(World* world, LuaEngine& engine, Vec2F const& pos1, Vec2F const& pos2, Maybe<LuaTable> options); + LuaTable objectLineQuery(World* world, LuaEngine& engine, Vec2F const& pos1, Vec2F const& pos2, Maybe<LuaTable> options); + LuaTable npcLineQuery(World* world, LuaEngine& engine, Vec2F const& pos1, Vec2F const& pos2, Maybe<LuaTable> options); + bool entityExists(World* world, EntityId entityId); + bool entityCanDamage(World* world, EntityId sourceId, EntityId targetId); + Json entityDamageTeam(World* world, EntityId entityId); + bool entityAggressive(World* world, EntityId entityId); + Maybe<LuaString> entityType(World* world, LuaEngine& engine, EntityId entityId); + Maybe<Vec2F> entityPosition(World* world, EntityId entityId); + Maybe<Vec2F> entityVelocity(World* world, EntityId entityId); + Maybe<RectF> entityMetaBoundBox(World* world, EntityId entityId); + Maybe<uint64_t> entityCurrency(World* world, EntityId entityId, String const& currencyType); + Maybe<uint64_t> entityHasCountOfItem(World* world, EntityId entityId, Json descriptor, Maybe<bool> exactMatch); + Maybe<Vec2F> entityHealth(World* world, EntityId entityId); + Maybe<String> entitySpecies(World* world, EntityId entityId); + Maybe<String> entityGender(World* world, EntityId entityId); + Maybe<String> entityName(World* world, EntityId entityId); + Maybe<String> entityDescription(World* world, EntityId entityId, Maybe<String> const& species); + Maybe<JsonArray> entityPortrait(World* world, EntityId entityId, String const& portraitMode); + Maybe<String> entityHandItem(World* world, EntityId entityId, String const& handName); + Json entityHandItemDescriptor(World* world, EntityId entityId, String const& handName); + Maybe<String> entityUniqueId(World* world, EntityId entityId); + Json getObjectParameter(World* world, EntityId entityId, String const& parameterName, Maybe<Json> const& defaultValue); + Json getNpcScriptParameter(World* world, EntityId entityId, String const& parameterName, Maybe<Json> const& defaultValue); + List<Vec2I> objectSpaces(World* world, EntityId entityId); + Maybe<int> farmableStage(World* world, EntityId entityId); + Maybe<int> containerSize(World* world, EntityId entityId); + bool containerClose(World* world, EntityId entityId); + bool containerOpen(World* world, EntityId entityId); + Json containerItems(World* world, EntityId entityId); + Json containerItemAt(World* world, EntityId entityId, size_t offset); + Maybe<bool> containerConsume(World* world, EntityId entityId, Json const& items); + Maybe<bool> containerConsumeAt(World* world, EntityId entityId, size_t offset, int count); + Maybe<size_t> containerAvailable(World* world, EntityId entityId, Json const& items); + Json containerTakeAll(World* world, EntityId entityId); + Json containerTakeAt(World* world, EntityId entityId, size_t offset); + Json containerTakeNumItemsAt(World* world, EntityId entityId, size_t offset, int const& count); + Maybe<size_t> containerItemsCanFit(World* world, EntityId entityId, Json const& items); + Json containerItemsFitWhere(World* world, EntityId entityId, Json const& items); + Json containerAddItems(World* world, EntityId entityId, Json const& items); + Json containerStackItems(World* world, EntityId entityId, Json const& items); + Json containerPutItemsAt(World* world, EntityId entityId, Json const& items, size_t offset); + Json containerSwapItems(World* world, EntityId entityId, Json const& items, size_t offset); + Json containerSwapItemsNoCombine(World* world, EntityId entityId, Json const& items, size_t offset); + Json containerItemApply(World* world, EntityId entityId, Json const& items, size_t offset); + Maybe<LuaValue> callScriptedEntity(World* world, EntityId entityId, String const& function, LuaVariadic<LuaValue> const& args); + RpcPromise<Vec2F> findUniqueEntity(World* world, String const& uniqueId); + RpcPromise<Json> sendEntityMessage(World* world, LuaEngine& engine, LuaValue entityId, String const& message, LuaVariadic<Json> args); + Maybe<bool> loungeableOccupied(World* world, EntityId entityId); + bool isMonster(World* world, EntityId entityId, Maybe<bool> const& aggressive); + Maybe<String> monsterType(World* world, EntityId entityId); + Maybe<String> npcType(World* world, EntityId entityId); + Maybe<String> stagehandType(World* world, EntityId entityId); + bool isNpc(World* world, EntityId entityId, Maybe<int> const& damageTeam); + } + + namespace WorldEnvironmentCallbacks { + float lightLevel(World* world, Vec2F const& position); + float windLevel(World* world, Vec2F const& position); + bool breathable(World* world, Vec2F const& position); + bool underground(World* world, Vec2F const& position); + LuaValue material(World* world, LuaEngine& engine, Vec2F const& position, String const& layerName); + LuaValue mod(World* world, LuaEngine& engine, Vec2F const& position, String const& layerName); + float materialHueShift(World* world, Vec2F const& position, String const& layerName); + float modHueShift(World* world, Vec2F const& position, String const& layerName); + MaterialColorVariant materialColor(World* world, Vec2F const& position, String const& layerName); + void setMaterialColor(World* world, Vec2F const& position, String const& layerName, MaterialColorVariant color); + bool damageTiles(World* world, List<Vec2I> const& arg1, String const& arg2, Vec2F const& arg3, String const& arg4, float arg5, Maybe<unsigned> const& arg6, Maybe<EntityId> sourceEntity); + bool damageTileArea(World* world, Vec2F center, float radius, String layer, Vec2F sourcePosition, String damageType, float damage, Maybe<unsigned> const& harvestLevel, Maybe<EntityId> sourceEntity); + bool placeMaterial(World* world, Vec2I const& arg1, String const& arg2, String const& arg3, Maybe<int> const& arg4, bool arg5); + bool placeMod(World* world, Vec2I const& arg1, String const& arg2, String const& arg3, Maybe<int> const& arg4, bool arg5); + } +} + +} + +#endif |