Add WorldServer script contexts
This commit is contained in:
parent
5fa97741e5
commit
d93b026829
12
assets/opensb/scripts/opensb/worldserver/test.lua
Normal file
12
assets/opensb/scripts/opensb/worldserver/test.lua
Normal file
@ -0,0 +1,12 @@
|
||||
local module = {}
|
||||
modules.test = module
|
||||
|
||||
function module.init()
|
||||
message.setHandler("type", function()
|
||||
return world.type()
|
||||
end)
|
||||
end
|
||||
|
||||
function module.update()
|
||||
|
||||
end
|
2
assets/opensb/scripts/opensb/worldserver/worldserver.lua
Normal file
2
assets/opensb/scripts/opensb/worldserver/worldserver.lua
Normal file
@ -0,0 +1,2 @@
|
||||
require "/scripts/opensb/util/modules.lua"
|
||||
modules("/scripts/opensb/worldserver/", {"test"})
|
3
assets/opensb/worldserver.config.patch
Normal file
3
assets/opensb/worldserver.config.patch
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"scriptContexts" : { "OpenStarbound" : ["/scripts/opensb/worldserver/worldserver.lua"] }
|
||||
}
|
@ -18,6 +18,7 @@
|
||||
#include "StarSky.hpp"
|
||||
#include "StarAiDatabase.hpp"
|
||||
#include "StarBiomeDatabase.hpp"
|
||||
#include "StarUniverseServerLuaBindings.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
@ -1946,6 +1947,8 @@ Maybe<WorkerPoolPromise<WorldServerThreadPtr>> UniverseServer::shipWorldPromise(
|
||||
else
|
||||
shipWorld->setOrbitalSky(celestialSkyParameters(clientContext->shipCoordinate()));
|
||||
|
||||
shipWorld->initLua(this);
|
||||
|
||||
auto shipWorldThread = make_shared<WorldServerThread>(shipWorld, ClientShipWorldId(clientShipWorldId));
|
||||
shipWorldThread->setPause(m_pause);
|
||||
clientContext->updateShipChunks(shipWorldThread->readChunks());
|
||||
@ -1986,6 +1989,8 @@ Maybe<WorkerPoolPromise<WorldServerThreadPtr>> UniverseServer::celestialWorldPro
|
||||
|
||||
worldServer->setUniverseSettings(m_universeSettings);
|
||||
worldServer->setReferenceClock(universeClock);
|
||||
worldServer->initLua(this);
|
||||
|
||||
auto worldThread = make_shared<WorldServerThread>(worldServer, celestialWorldId);
|
||||
worldThread->setPause(m_pause);
|
||||
worldThread->start();
|
||||
@ -2105,6 +2110,8 @@ Maybe<WorkerPoolPromise<WorldServerThreadPtr>> UniverseServer::instanceWorldProm
|
||||
}
|
||||
}
|
||||
|
||||
worldServer->initLua(this);
|
||||
|
||||
auto worldThread = make_shared<WorldServerThread>(worldServer, instanceWorldId);
|
||||
worldThread->setPause(m_pause);
|
||||
worldThread->start();
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "StarFallingBlocksAgent.hpp"
|
||||
#include "StarWarpTargetEntity.hpp"
|
||||
#include "StarUniverseSettings.hpp"
|
||||
#include "StarUniverseServerLuaBindings.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
@ -71,6 +72,10 @@ WorldServer::WorldServer(WorldChunks const& chunks) {
|
||||
}
|
||||
|
||||
WorldServer::~WorldServer() {
|
||||
for (auto& p : m_scriptContexts)
|
||||
p.second->uninit();
|
||||
|
||||
m_scriptContexts.clear();
|
||||
m_spawner.uninit();
|
||||
writeMetadata();
|
||||
m_worldStorage->unloadAll(true);
|
||||
@ -97,6 +102,18 @@ void WorldServer::setReferenceClock(ClockPtr clock) {
|
||||
m_sky->setReferenceClock(clock);
|
||||
}
|
||||
|
||||
void WorldServer::initLua(UniverseServer* universe) {
|
||||
auto assets = Root::singleton().assets();
|
||||
for (auto& p : assets->json("/worldserver.config:scriptContexts").toObject()) {
|
||||
auto scriptComponent = make_shared<ScriptComponent>();
|
||||
scriptComponent->setScripts(jsonToStringList(p.second.toArray()));
|
||||
scriptComponent->addCallbacks("universe", LuaBindings::makeUniverseServerCallbacks(universe));
|
||||
|
||||
m_scriptContexts.set(p.first, scriptComponent);
|
||||
scriptComponent->init(this);
|
||||
}
|
||||
}
|
||||
|
||||
WorldStructure WorldServer::setCentralStructure(WorldStructure centralStructure) {
|
||||
removeCentralStructure();
|
||||
|
||||
@ -516,7 +533,12 @@ List<PacketPtr> WorldServer::getOutgoingPackets(ConnectionId clientId) {
|
||||
}
|
||||
|
||||
Maybe<Json> WorldServer::receiveMessage(ConnectionId fromConnection, String const& message, JsonArray const& args) {
|
||||
return "what a wonderful world";
|
||||
Maybe<Json> result;
|
||||
for (auto& p : m_scriptContexts) {
|
||||
if (result = p.second->handleMessage(message, fromConnection == ServerConnectionId, args))
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
WorldServerFidelity WorldServer::fidelity() const {
|
||||
@ -582,6 +604,9 @@ void WorldServer::update(float dt) {
|
||||
return a->entityType() < b->entityType();
|
||||
});
|
||||
|
||||
for (auto& pair : m_scriptContexts)
|
||||
pair.second->update(pair.second->updateDt(dt));
|
||||
|
||||
updateDamage(dt);
|
||||
if (shouldRunThisStep("wiringUpdate"))
|
||||
m_wireProcessor->process();
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "StarInterpolationTracker.hpp"
|
||||
#include "StarWorldStructure.hpp"
|
||||
#include "StarLuaRoot.hpp"
|
||||
#include "StarLuaComponents.hpp"
|
||||
#include "StarWorldRenderData.hpp"
|
||||
#include "StarWarping.hpp"
|
||||
#include "StarRpcThreadPromise.hpp"
|
||||
@ -31,6 +32,7 @@ STAR_CLASS(DungeonDefinition);
|
||||
STAR_CLASS(WorldServer);
|
||||
STAR_CLASS(TileEntity);
|
||||
STAR_CLASS(UniverseSettings);
|
||||
STAR_CLASS(UniverseServer);
|
||||
|
||||
STAR_EXCEPTION(WorldServerException, StarException);
|
||||
|
||||
@ -66,6 +68,8 @@ public:
|
||||
|
||||
void setReferenceClock(ClockPtr clock);
|
||||
|
||||
void initLua(UniverseServer* universe);
|
||||
|
||||
// Give this world a central structure. If there is a previous central
|
||||
// structure it is removed first. Returns the structure with transformed
|
||||
// coordinates.
|
||||
@ -346,6 +350,10 @@ private:
|
||||
WireProcessorPtr m_wireProcessor;
|
||||
LuaRootPtr m_luaRoot;
|
||||
|
||||
typedef LuaMessageHandlingComponent<LuaUpdatableComponent<LuaWorldComponent<LuaBaseComponent>>> ScriptComponent;
|
||||
typedef shared_ptr<ScriptComponent> ScriptComponentPtr;
|
||||
StringMap<ScriptComponentPtr> m_scriptContexts;
|
||||
|
||||
WorldGeometry m_geometry;
|
||||
uint64_t m_currentStep;
|
||||
mutable CellularLightIntensityCalculator m_lightIntensityCalculator;
|
||||
|
Loading…
Reference in New Issue
Block a user