diff --git a/SDK b/SDK index 473b732b2..a312877f7 160000 --- a/SDK +++ b/SDK @@ -1 +1 @@ -Subproject commit 473b732b2de159773b2e2908fd11aa99f07db284 +Subproject commit a312877f7a618e96104e087d9830ba1ebf1beafd diff --git a/Server/Components/Objects/objects_impl.hpp b/Server/Components/Objects/objects_impl.hpp index fb826a11b..76e2fe5dc 100644 --- a/Server/Components/Objects/objects_impl.hpp +++ b/Server/Components/Objects/objects_impl.hpp @@ -98,7 +98,7 @@ class ObjectComponent final : public IObjectsComponent, public CoreEventHandler, } IPlayerObjectData* data = queryExtension(peer); - if (data && data->editingObject()) + if (data && data->getEditingType() == ObjectEditingType::ObjectEditingType_Object) { if (onPlayerEditObjectRPC.Response == ObjectEditResponse_Cancel || onPlayerEditObjectRPC.Response == ObjectEditResponse_Final) @@ -164,7 +164,7 @@ class ObjectComponent final : public IObjectsComponent, public CoreEventHandler, } IPlayerObjectData* data = queryExtension(peer); - if (data && data->editingObject() && data->hasAttachedObject(onPlayerEditAttachedObjectRPC.Index)) + if (data && data->getEditingType() == ObjectEditingType::ObjectEditingType_AttachedObject && data->hasAttachedObject(onPlayerEditAttachedObjectRPC.Index)) { auto attachedObjectData = data->getAttachedObject(onPlayerEditAttachedObjectRPC.Index); @@ -482,7 +482,7 @@ class PlayerObjectData final : public IPlayerObjectData MarkedDynamicPoolStorage storage; FlatPtrHashSet attachedToPlayer_; bool inObjectSelection_; - bool inObjectEdit_; + ObjectEditingType objectEdit_; bool streamedGlobalObjects_; public: @@ -641,7 +641,7 @@ class PlayerObjectData final : public IPlayerObjectData void reset() override { - inObjectEdit_ = false; + objectEdit_ = ObjectEditingType::ObjectEditingType_None; inObjectSelection_ = false; streamedGlobalObjects_ = false; slotsOccupied_.reset(); @@ -651,7 +651,7 @@ class PlayerObjectData final : public IPlayerObjectData void beginSelecting() override { - inObjectEdit_ = false; + objectEdit_ = ObjectEditingType::ObjectEditingType_None; inObjectSelection_ = true; NetCode::RPC::PlayerBeginObjectSelect playerBeginObjectSelectRPC; PacketHelper::send(playerBeginObjectSelectRPC, player_); @@ -664,13 +664,13 @@ class PlayerObjectData final : public IPlayerObjectData bool editingObject() const override { - return inObjectEdit_; + return objectEdit_ != ObjectEditingType::ObjectEditingType_None; } void endEditing() override { inObjectSelection_ = false; - inObjectEdit_ = false; + objectEdit_ = ObjectEditingType::ObjectEditingType_None; NetCode::RPC::PlayerCancelObjectEdit playerCancelObjectEditRPC; PacketHelper::send(playerCancelObjectEditRPC, player_); } @@ -678,7 +678,7 @@ class PlayerObjectData final : public IPlayerObjectData void beginEditing(IObject& object) override { inObjectSelection_ = false; - inObjectEdit_ = true; + objectEdit_ = ObjectEditingType::ObjectEditingType_Object; NetCode::RPC::PlayerBeginObjectEdit playerBeginObjectEditRPC; playerBeginObjectEditRPC.PlayerObject = false; @@ -689,7 +689,7 @@ class PlayerObjectData final : public IPlayerObjectData void beginEditing(IPlayerObject& object) override { inObjectSelection_ = false; - inObjectEdit_ = true; + objectEdit_ = ObjectEditingType::ObjectEditingType_Object; NetCode::RPC::PlayerBeginObjectEdit playerBeginObjectEditRPC; playerBeginObjectEditRPC.PlayerObject = true; @@ -749,13 +749,18 @@ class PlayerObjectData final : public IPlayerObjectData } inObjectSelection_ = false; - inObjectEdit_ = true; + objectEdit_ = ObjectEditingType::ObjectEditingType_AttachedObject; NetCode::RPC::PlayerBeginAttachedObjectEdit playerBeginAttachedObjectEditRPC; playerBeginAttachedObjectEditRPC.Index = index; PacketHelper::send(playerBeginAttachedObjectEditRPC, player_); } + ObjectEditingType getEditingType() const override + { + return objectEdit_; + } + bool getStreamedGlobalObjects() const { return streamedGlobalObjects_; diff --git a/Server/Components/Pawn/Scripting/Object/PlayerNatives.cpp b/Server/Components/Pawn/Scripting/Object/PlayerNatives.cpp index 296a07b3a..541f1a1c8 100644 --- a/Server/Components/Pawn/Scripting/Object/PlayerNatives.cpp +++ b/Server/Components/Pawn/Scripting/Object/PlayerNatives.cpp @@ -146,6 +146,11 @@ SCRIPT_API(BeginPlayerObjectEditing, bool(IPlayerObjectData& data, IPlayerObject return true; } +SCRIPT_API(IsPlayerEditingObject, bool(IPlayerObjectData& data)) +{ + return data.editingObject() == ObjectEditingType::ObjectEditingType_Object; +} + SCRIPT_API(SetPlayerObjectMaterial, bool(IPlayer& player, IPlayerObject& object, int materialIndex, int modelId, const std::string& textureLibrary, const std::string& textureName, uint32_t materialColour)) { object.setMaterial(materialIndex, modelId, textureLibrary, textureName, Colour::FromARGB(materialColour)); diff --git a/Server/Components/Pawn/Scripting/Player/Natives.cpp b/Server/Components/Pawn/Scripting/Player/Natives.cpp index 437c678ea..385b64439 100644 --- a/Server/Components/Pawn/Scripting/Player/Natives.cpp +++ b/Server/Components/Pawn/Scripting/Player/Natives.cpp @@ -609,6 +609,11 @@ SCRIPT_API(EditAttachedObject, bool(IPlayerObjectData& data, int index)) return true; } +SCRIPT_API(IsPlayerEditingAttachedObject, bool(IPlayerObjectData& data)) +{ + return data.getEditingType() == ObjectEditingType::ObjectEditingType_AttachedObject; +} + SCRIPT_API(EnablePlayerCameraTarget, bool(IPlayer& player, bool enable)) { player.useCameraTargeting(enable);