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()