Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/scripting/StarWorldLuaBindings.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/scripting/StarWorldLuaBindings.hpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/game/scripting/StarWorldLuaBindings.hpp')
-rw-r--r--source/game/scripting/StarWorldLuaBindings.hpp182
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