From 32f16ed7c1a3b2bcceedd4a072c202f36a121891 Mon Sep 17 00:00:00 2001
From: realweezerfan93 <22036195+rwf93@users.noreply.github.com>
Date: Wed, 21 Jun 2023 14:18:51 -0700
Subject: [PATCH] micro optimizations
---
.vscode/settings.json | 74 ++++++++-
README.md | 3 +-
source/CMakeLists.txt | 2 +-
source/game/StarCommandProcessor.cpp | 161 ++++++--------------
source/game/StarCommandProcessor.hpp | 2 +
source/game/StarNetPackets.cpp | 215 ++++++++++-----------------
6 files changed, 200 insertions(+), 257 deletions(-)
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 821f4bc..07de81f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,5 +1,77 @@
{
"files.associations": {
- "type_traits": "cpp"
+ "*.lua": "glua",
+ "type_traits": "cpp",
+ "utility": "cpp",
+ "algorithm": "cpp",
+ "array": "cpp",
+ "atomic": "cpp",
+ "bit": "cpp",
+ "bitset": "cpp",
+ "cctype": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "compare": "cpp",
+ "concepts": "cpp",
+ "cstddef": "cpp",
+ "cstdint": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "deque": "cpp",
+ "exception": "cpp",
+ "fstream": "cpp",
+ "functional": "cpp",
+ "initializer_list": "cpp",
+ "iomanip": "cpp",
+ "ios": "cpp",
+ "iosfwd": "cpp",
+ "iostream": "cpp",
+ "istream": "cpp",
+ "iterator": "cpp",
+ "limits": "cpp",
+ "list": "cpp",
+ "locale": "cpp",
+ "map": "cpp",
+ "memory": "cpp",
+ "new": "cpp",
+ "numeric": "cpp",
+ "optional": "cpp",
+ "ostream": "cpp",
+ "queue": "cpp",
+ "random": "cpp",
+ "ranges": "cpp",
+ "regex": "cpp",
+ "set": "cpp",
+ "span": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "streambuf": "cpp",
+ "string": "cpp",
+ "system_error": "cpp",
+ "tuple": "cpp",
+ "typeindex": "cpp",
+ "typeinfo": "cpp",
+ "unordered_map": "cpp",
+ "unordered_set": "cpp",
+ "vector": "cpp",
+ "xfacet": "cpp",
+ "xhash": "cpp",
+ "xiosbase": "cpp",
+ "xlocale": "cpp",
+ "xlocbuf": "cpp",
+ "xlocinfo": "cpp",
+ "xlocmes": "cpp",
+ "xlocmon": "cpp",
+ "xlocnum": "cpp",
+ "xloctime": "cpp",
+ "xmemory": "cpp",
+ "xstddef": "cpp",
+ "xstring": "cpp",
+ "xtr1common": "cpp",
+ "xtree": "cpp",
+ "xutility": "cpp"
}
}
\ No newline at end of file
diff --git a/README.md b/README.md
index 83ff6f4..ac5691d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
Starbound
-A somewhat comprehensive guide on how to build the game from source.
+A somewhat comprehensive guide on how to build the game from source.
+This might contain modifications to the source code that make it not interoperable with the base game.
## Build Instructions:
### Windows x86_64
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index cf507c6..7aee822 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -1,6 +1,6 @@
PROJECT (starbound)
-CMAKE_MINIMUM_REQUIRED (VERSION 3.0)
+CMAKE_MINIMUM_REQUIRED (VERSION 3.25.1)
SET (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake)
SET (CMAKE_CONFIGURATION_TYPES Debug RelWithAsserts RelWithDebInfo Release)
diff --git a/source/game/StarCommandProcessor.cpp b/source/game/StarCommandProcessor.cpp
index ae7a913..c2b8451 100644
--- a/source/game/StarCommandProcessor.cpp
+++ b/source/game/StarCommandProcessor.cpp
@@ -867,123 +867,56 @@ Maybe CommandProcessor::playerCidFromCommand(String const& player,
}
String CommandProcessor::handleCommand(ConnectionId connectionId, String const& command, String const& argumentString) {
- if (command == "admin") {
- return admin(connectionId, argumentString);
-
- } else if (command == "timewarp") {
- return timewarp(connectionId, argumentString);
-
- } else if (command == "settileprotection") {
- return setTileProtection(connectionId, argumentString);
-
- } else if (command == "setdungeonid") {
- return setDungeonId(connectionId, argumentString);
-
- } else if (command == "setspawnpoint") {
- return setPlayerStart(connectionId, argumentString);
-
- } else if (command == "spawnitem") {
- return spawnItem(connectionId, argumentString);
-
- } else if (command == "spawntreasure") {
- return spawnTreasure(connectionId, argumentString);
-
- } else if (command == "spawnmonster") {
- return spawnMonster(connectionId, argumentString);
-
- } else if (command == "spawnnpc") {
- return spawnNpc(connectionId, argumentString);
-
- } else if (command == "spawnstagehand") {
- return spawnStagehand(connectionId, argumentString);
-
- } else if (command == "clearstagehand") {
- return clearStagehand(connectionId, argumentString);
-
- } else if (command == "spawnvehicle") {
- return spawnVehicle(connectionId, argumentString);
-
- } else if (command == "spawnliquid") {
- return spawnLiquid(connectionId, argumentString);
-
- } else if (command == "pvp") {
- return pvp(connectionId, argumentString);
-
- } else if (command == "serverwhoami") {
- return whoami(connectionId, argumentString);
-
- } else if (command == "kick") {
- return kick(connectionId, argumentString);
-
- } else if (command == "ban") {
- return ban(connectionId, argumentString);
-
- } else if (command == "unbanip") {
- return unbanIp(connectionId, argumentString);
-
- } else if (command == "unbanuuid") {
- return unbanUuid(connectionId, argumentString);
-
- } else if (command == "list") {
- return list(connectionId, argumentString);
-
- } else if (command == "help") {
- return help(connectionId, argumentString);
-
- } else if (command == "warp") {
- return warp(connectionId, argumentString);
-
- } else if (command == "warprandom") {
- return warpRandom(connectionId, argumentString);
-
- } else if (command == "whereami") {
- return clientCoordinate(connectionId, argumentString);
-
- } else if (command == "whereis") {
- return clientCoordinate(connectionId, argumentString);
-
- } else if (command == "serverreload") {
- return serverReload(connectionId, argumentString);
-
- } else if (command == "eval") {
- return eval(connectionId, argumentString);
-
- } else if (command == "entityeval") {
- return entityEval(connectionId, argumentString);
-
- } else if (command == "enablespawning") {
- return enableSpawning(connectionId, argumentString);
-
- } else if (command == "disablespawning") {
- return disableSpawning(connectionId, argumentString);
-
- } else if (command == "placedungeon") {
- return placeDungeon(connectionId, argumentString);
-
- } else if (command == "setuniverseflag") {
- return setUniverseFlag(connectionId, argumentString);
-
- } else if (command == "resetuniverseflags") {
- return resetUniverseFlags(connectionId, argumentString);
-
- } else if (command == "addbiomeregion") {
- return addBiomeRegion(connectionId, argumentString);
-
- } else if (command == "expandbiomeregion") {
- return expandBiomeRegion(connectionId, argumentString);
-
- } else if (command == "updateplanettype") {
- return updatePlanetType(connectionId, argumentString);
-
- } else if (command == "setenvironmentbiome") {
- return setEnvironmentBiome(connectionId, argumentString);
+ std::map> functionMap = {
+ {"admin", {true, &CommandProcessor::admin}},
+ {"timewarp", {true, &CommandProcessor::timewarp}},
+ {"settileprotection", {true, &CommandProcessor::setTileProtection}},
+ {"setdungeonid", {true, &CommandProcessor::setDungeonId}},
+ {"setspawnpoint", {true, &CommandProcessor::setPlayerStart}},
+ {"spawnitem", {true, &CommandProcessor::spawnItem}},
+ {"spawntreasure", {true, &CommandProcessor::spawnTreasure}},
+ {"spawnmonster", {true, &CommandProcessor::spawnMonster}},
+ {"spawnnpc", {true, &CommandProcessor::spawnNpc}},
+ {"spawnstagehand", {true, &CommandProcessor::spawnStagehand}},
+ {"clearstagehand", {true, &CommandProcessor::clearStagehand}},
+ {"spawnvehicle", {true, &CommandProcessor::spawnVehicle}},
+ {"spawnliquid", {true, &CommandProcessor::spawnLiquid}},
+ {"pvp", {true, &CommandProcessor::pvp}},
+ {"serverwhoami", {true, &CommandProcessor::whoami}},
+ {"kick", {true, &CommandProcessor::kick}},
+ {"ban", {true, &CommandProcessor::ban}},
+ {"unbanip", {true, &CommandProcessor::unbanIp}},
+ {"unbanuuid", {true, &CommandProcessor::unbanUuid}},
+ {"list", {true, &CommandProcessor::list}},
+ {"help", {true, &CommandProcessor::help}},
+ {"warp", {true, &CommandProcessor::warp}},
+ {"warprandom", {true, &CommandProcessor::warpRandom}},
+ {"whereami", {true, &CommandProcessor::clientCoordinate}},
+ {"whereis", {true, &CommandProcessor::clientCoordinate}},
+ {"serverreload", {true, &CommandProcessor::serverReload}},
+ {"eval", {true, &CommandProcessor::eval}},
+ {"entityeval", {true, &CommandProcessor::entityEval}},
+ {"enablespawning", {true, &CommandProcessor::enableSpawning}},
+ {"disablespawning", {true, &CommandProcessor::disableSpawning}},
+ {"placedungeon", {true, &CommandProcessor::placeDungeon}},
+ {"setuniverseflag", {true, &CommandProcessor::setUniverseFlag}},
+ {"resetuniverseflags", {true, &CommandProcessor::resetUniverseFlags}},
+ {"addbiomeregion", {true, &CommandProcessor::addBiomeRegion}},
+ {"expandbiomeregion", {true, &CommandProcessor::expandBiomeRegion}},
+ {"updateplanettype", {true, &CommandProcessor::updatePlanetType}},
+ {"setenvironmentbiome", {true, &CommandProcessor::setEnvironmentBiome}}
+ };
+
+ // yucky little function pointer hack
+ if(functionMap[command].first) {
+ return (this->*functionMap[command].second)(connectionId, argumentString);
+ }
- } else if (auto res = m_scriptComponent.invoke("command", command, connectionId, jsonFromStringList(m_parser.tokenizeToStringList(argumentString)))) {
+ if(auto res = m_scriptComponent.invoke("command", command, connectionId, jsonFromStringList(m_parser.tokenizeToStringList(argumentString)))) {
return toString(*res);
-
- } else {
- return strf("No such command %s", command);
}
+
+ return strf("No such command %s", command);
}
Maybe CommandProcessor::adminCheck(ConnectionId connectionId, String const& commandDescription) const {
diff --git a/source/game/StarCommandProcessor.hpp b/source/game/StarCommandProcessor.hpp
index 49af16a..1e809fb 100644
--- a/source/game/StarCommandProcessor.hpp
+++ b/source/game/StarCommandProcessor.hpp
@@ -19,6 +19,8 @@ public:
String userCommand(ConnectionId clientId, String const& command, String const& argumentString);
private:
+ typedef String(CommandProcessor::*commandFunctionPointer)(ConnectionId connectionId, String const&);
+
static Maybe playerCidFromCommand(String const& player, UniverseServer* universe);
String help(ConnectionId connectionId, String const& argumentString);
diff --git a/source/game/StarNetPackets.cpp b/source/game/StarNetPackets.cpp
index 11944f5..e6db17a 100644
--- a/source/game/StarNetPackets.cpp
+++ b/source/game/StarNetPackets.cpp
@@ -80,146 +80,81 @@ EnumMap const PacketTypeNames{
Packet::~Packet() {}
PacketPtr createPacket(PacketType type) {
- if (type == PacketType::ProtocolRequest)
- return make_shared();
- else if (type == PacketType::ProtocolResponse)
- return make_shared();
- else if (type == PacketType::ServerDisconnect)
- return make_shared();
- else if (type == PacketType::ConnectSuccess)
- return make_shared();
- else if (type == PacketType::ConnectFailure)
- return make_shared();
- else if (type == PacketType::HandshakeChallenge)
- return make_shared();
- else if (type == PacketType::ChatReceive)
- return make_shared();
- else if (type == PacketType::UniverseTimeUpdate)
- return make_shared();
- else if (type == PacketType::CelestialResponse)
- return make_shared();
- else if (type == PacketType::PlayerWarpResult)
- return make_shared();
- else if (type == PacketType::PlanetTypeUpdate)
- return make_shared();
- else if (type == PacketType::Pause)
- return make_shared();
- else if (type == PacketType::ServerInfo)
- return make_shared();
- else if (type == PacketType::ClientConnect)
- return make_shared();
- else if (type == PacketType::ClientDisconnectRequest)
- return make_shared();
- else if (type == PacketType::HandshakeResponse)
- return make_shared();
- else if (type == PacketType::PlayerWarp)
- return make_shared();
- else if (type == PacketType::FlyShip)
- return make_shared();
- else if (type == PacketType::ChatSend)
- return make_shared();
- else if (type == PacketType::CelestialRequest)
- return make_shared();
- else if (type == PacketType::ClientContextUpdate)
- return make_shared();
- else if (type == PacketType::WorldStart)
- return make_shared();
- else if (type == PacketType::WorldStop)
- return make_shared();
- else if (type == PacketType::WorldLayoutUpdate)
- return make_shared();
- else if (type == PacketType::WorldParametersUpdate)
- return make_shared();
- else if (type == PacketType::CentralStructureUpdate)
- return make_shared();
- else if (type == PacketType::TileArrayUpdate)
- return make_shared();
- else if (type == PacketType::TileUpdate)
- return make_shared();
- else if (type == PacketType::TileLiquidUpdate)
- return make_shared();
- else if (type == PacketType::TileDamageUpdate)
- return make_shared();
- else if (type == PacketType::TileModificationFailure)
- return make_shared();
- else if (type == PacketType::GiveItem)
- return make_shared();
- else if (type == PacketType::EnvironmentUpdate)
- return make_shared();
- else if (type == PacketType::ModifyTileList)
- return make_shared();
- else if (type == PacketType::DamageTileGroup)
- return make_shared();
- else if (type == PacketType::CollectLiquid)
- return make_shared();
- else if (type == PacketType::RequestDrop)
- return make_shared();
- else if (type == PacketType::SpawnEntity)
- return make_shared();
- else if (type == PacketType::EntityInteract)
- return make_shared();
- else if (type == PacketType::EntityInteractResult)
- return make_shared();
- else if (type == PacketType::UpdateTileProtection)
- return make_shared();
- else if (type == PacketType::SetDungeonGravity)
- return make_shared();
- else if (type == PacketType::SetDungeonBreathable)
- return make_shared();
- else if (type == PacketType::SetPlayerStart)
- return make_shared();
- else if (type == PacketType::FindUniqueEntityResponse)
- return make_shared();
- else if (type == PacketType::Pong)
- return make_shared();
- else if (type == PacketType::ConnectWire)
- return make_shared();
- else if (type == PacketType::DisconnectAllWires)
- return make_shared();
- else if (type == PacketType::WorldClientStateUpdate)
- return make_shared();
- else if (type == PacketType::FindUniqueEntity)
- return make_shared();
- else if (type == PacketType::WorldStartAcknowledge)
- return make_shared();
- else if (type == PacketType::Ping)
- return make_shared();
- else if (type == PacketType::EntityCreate)
- return make_shared();
- else if (type == PacketType::EntityUpdateSet)
- return make_shared();
- else if (type == PacketType::EntityDestroy)
- return make_shared();
- else if (type == PacketType::HitRequest)
- return make_shared();
- else if (type == PacketType::DamageRequest)
- return make_shared();
- else if (type == PacketType::DamageNotification)
- return make_shared();
- else if (type == PacketType::EntityMessage)
- return make_shared();
- else if (type == PacketType::EntityMessageResponse)
- return make_shared();
- else if (type == PacketType::UpdateWorldProperties)
- return make_shared();
- else if (type == PacketType::StepUpdate)
- return make_shared();
- else if (type == PacketType::SystemWorldStart)
- return make_shared();
- else if (type == PacketType::SystemWorldUpdate)
- return make_shared();
- else if (type == PacketType::SystemObjectCreate)
- return make_shared();
- else if (type == PacketType::SystemObjectDestroy)
- return make_shared();
- else if (type == PacketType::SystemShipCreate)
- return make_shared();
- else if (type == PacketType::SystemShipDestroy)
- return make_shared();
- else if (type == PacketType::SystemObjectSpawn)
- return make_shared();
- else
- throw StarPacketException(strf("Unrecognized packet type %s", (unsigned)type));
+ // not as good really any better, but at least it's somewhat easier to expand.
+ switch(type) {
+ case PacketType::ProtocolRequest: return make_shared();
+ case PacketType::ProtocolResponse: return make_shared();
+ case PacketType::ServerDisconnect: return make_shared();
+ case PacketType::ConnectSuccess: return make_shared();
+ case PacketType::ConnectFailure: return make_shared();
+ case PacketType::HandshakeChallenge: return make_shared();
+ case PacketType::ChatReceive: return make_shared();
+ case PacketType::UniverseTimeUpdate: return make_shared();
+ case PacketType::CelestialResponse: return make_shared();
+ case PacketType::PlayerWarpResult: return make_shared();
+ case PacketType::PlanetTypeUpdate: return make_shared();
+ case PacketType::Pause: return make_shared();
+ case PacketType::ServerInfo: return make_shared();
+ case PacketType::ClientConnect: return make_shared();
+ case PacketType::ClientDisconnectRequest: return make_shared();
+ case PacketType::HandshakeResponse: return make_shared();
+ case PacketType::PlayerWarp: return make_shared();
+ case PacketType::FlyShip: return make_shared();
+ case PacketType::ChatSend: return make_shared();
+ case PacketType::CelestialRequest: return make_shared();
+ case PacketType::ClientContextUpdate: return make_shared();
+ case PacketType::WorldStart: return make_shared();
+ case PacketType::WorldStop: return make_shared();
+ case PacketType::WorldLayoutUpdate: return make_shared();
+ case PacketType::WorldParametersUpdate: return make_shared();
+ case PacketType::CentralStructureUpdate: return make_shared();
+ case PacketType::TileArrayUpdate: return make_shared();
+ case PacketType::TileUpdate: return make_shared();
+ case PacketType::TileLiquidUpdate: return make_shared();
+ case PacketType::TileDamageUpdate: return make_shared();
+ case PacketType::TileModificationFailure: return make_shared();
+ case PacketType::GiveItem: return make_shared();
+ case PacketType::EnvironmentUpdate: return make_shared();
+ case PacketType::ModifyTileList: return make_shared();
+ case PacketType::DamageTileGroup: return make_shared();
+ case PacketType::CollectLiquid: return make_shared();
+ case PacketType::RequestDrop: return make_shared();
+ case PacketType::SpawnEntity: return make_shared();
+ case PacketType::EntityInteract: return make_shared();
+ case PacketType::EntityInteractResult: return make_shared();
+ case PacketType::UpdateTileProtection: return make_shared();
+ case PacketType::SetDungeonGravity: return make_shared();
+ case PacketType::SetDungeonBreathable: return make_shared();
+ case PacketType::SetPlayerStart: return make_shared();
+ case PacketType::FindUniqueEntityResponse: return make_shared();
+ case PacketType::Pong: return make_shared();
+ case PacketType::ConnectWire: return make_shared();
+ case PacketType::DisconnectAllWires: return make_shared();
+ case PacketType::WorldClientStateUpdate: return make_shared();
+ case PacketType::FindUniqueEntity: return make_shared();
+ case PacketType::WorldStartAcknowledge: return make_shared();
+ case PacketType::Ping: return make_shared();
+ case PacketType::EntityCreate: return make_shared();
+ case PacketType::EntityUpdateSet: return make_shared();
+ case PacketType::EntityDestroy: return make_shared();
+ case PacketType::HitRequest: return make_shared();
+ case PacketType::DamageRequest: return make_shared();
+ case PacketType::DamageNotification: return make_shared();
+ case PacketType::EntityMessage: return make_shared();
+ case PacketType::EntityMessageResponse: return make_shared();
+ case PacketType::UpdateWorldProperties: return make_shared();
+ case PacketType::StepUpdate: return make_shared();
+ case PacketType::SystemWorldStart: return make_shared();
+ case PacketType::SystemWorldUpdate: return make_shared();
+ case PacketType::SystemObjectCreate: return make_shared();
+ case PacketType::SystemObjectDestroy: return make_shared();
+ case PacketType::SystemShipCreate: return make_shared();
+ case PacketType::SystemShipDestroy: return make_shared();
+ case PacketType::SystemObjectSpawn: return make_shared();
+ default: throw StarPacketException(strf("Unrecognized packet type %s", (unsigned)type));
+ }
+
+ return nullptr;
}
ProtocolRequestPacket::ProtocolRequestPacket()