2025-12-18 17:01:42 +03:00
|
|
|
#include "BookmarkListItem.hpp"
|
|
|
|
|
#include <cereal/types/string.hpp>
|
2025-12-20 16:38:51 +03:00
|
|
|
#include "../World.hpp"
|
2025-12-18 17:01:42 +03:00
|
|
|
|
|
|
|
|
using namespace NetworkingObjects;
|
|
|
|
|
|
2025-12-23 17:17:33 +03:00
|
|
|
void BookmarkData::jump_to(World& world) const {
|
2025-12-20 16:38:51 +03:00
|
|
|
world.drawData.cam.smooth_move_to(world, coords, windowSize.cast<float>());
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-18 17:01:42 +03:00
|
|
|
BookmarkListItem::BookmarkListItem() {}
|
|
|
|
|
|
|
|
|
|
BookmarkListItem::BookmarkListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder, const BookmarkData& initBookmarkData) {
|
|
|
|
|
name = initName;
|
2025-12-20 16:38:51 +03:00
|
|
|
if(isFolder) {
|
|
|
|
|
folderData = std::make_unique<BookmarkFolderData>();
|
|
|
|
|
folderData->folderList = netObjMan.make_obj<NetworkingObjects::NetObjOrderedList<BookmarkListItem>>();
|
|
|
|
|
}
|
2025-12-18 17:01:42 +03:00
|
|
|
else
|
|
|
|
|
bookmarkData = std::make_unique<BookmarkData>(initBookmarkData);
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-22 11:13:50 +03:00
|
|
|
void BookmarkListItem::reassign_netobj_ids_call() {
|
|
|
|
|
if(folderData)
|
|
|
|
|
folderData->folderList.reassign_ids();
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-18 17:01:42 +03:00
|
|
|
bool BookmarkListItem::is_folder() const {
|
2025-12-20 16:38:51 +03:00
|
|
|
return folderData != nullptr;
|
2025-12-18 17:01:42 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const BookmarkData& BookmarkListItem::get_bookmark_data() const {
|
|
|
|
|
return *bookmarkData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const NetObjOwnerPtr<NetObjOrderedList<BookmarkListItem>>& BookmarkListItem::get_folder_list() const {
|
2025-12-20 16:38:51 +03:00
|
|
|
return folderData->folderList;
|
2025-12-18 17:01:42 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const std::string& BookmarkListItem::get_name() const {
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-20 16:38:51 +03:00
|
|
|
bool BookmarkListItem::is_folder_open() const {
|
|
|
|
|
return folderData->isFolderOpen;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkListItem::set_folder_open(bool newIsFolderOpen) {
|
|
|
|
|
folderData->isFolderOpen = newIsFolderOpen;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-18 17:01:42 +03:00
|
|
|
void BookmarkListItem::set_name(const NetworkingObjects::NetObjTemporaryPtr<BookmarkListItem>& o, const std::string& newName) {
|
|
|
|
|
o->name = newName;
|
|
|
|
|
o.send_update_to_all(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryOutputArchive& a) {
|
|
|
|
|
a(o->name);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkListItem::register_class(NetObjManager& netObjMan) {
|
|
|
|
|
netObjMan.register_class<BookmarkListItem, BookmarkListItem, BookmarkListItem, BookmarkListItem>({
|
|
|
|
|
.writeConstructorFuncClient = write_constructor_data,
|
|
|
|
|
.readConstructorFuncClient = read_constructor_data,
|
|
|
|
|
.readUpdateFuncClient = [](const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>&) {
|
|
|
|
|
a(o->name);
|
|
|
|
|
},
|
|
|
|
|
.writeConstructorFuncServer = write_constructor_data,
|
|
|
|
|
.readConstructorFuncServer = read_constructor_data,
|
|
|
|
|
.readUpdateFuncServer = [](const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>&) {
|
|
|
|
|
a(o->name);
|
|
|
|
|
o.send_server_update_to_all_clients(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryOutputArchive& a) {
|
|
|
|
|
a(o->name);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkListItem::write_constructor_data(const NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryOutputArchive& a) {
|
|
|
|
|
a(o->name, o->is_folder());
|
|
|
|
|
if(o->is_folder())
|
2025-12-20 16:38:51 +03:00
|
|
|
o->folderData->folderList.write_create_message(a);
|
2025-12-18 17:01:42 +03:00
|
|
|
else
|
|
|
|
|
a(*o->bookmarkData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkListItem::read_constructor_data(const NetworkingObjects::NetObjTemporaryPtr<BookmarkListItem>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& c) {
|
|
|
|
|
a(o->name);
|
|
|
|
|
bool isFolder;
|
|
|
|
|
a(isFolder);
|
2025-12-20 16:38:51 +03:00
|
|
|
if(isFolder) {
|
|
|
|
|
o->folderData = std::make_unique<BookmarkFolderData>();
|
|
|
|
|
o->folderData->folderList = o.get_obj_man()->read_create_message<NetworkingObjects::NetObjOrderedList<BookmarkListItem>>(a, c);
|
|
|
|
|
}
|
2025-12-18 17:01:42 +03:00
|
|
|
else {
|
|
|
|
|
o->bookmarkData = std::make_unique<BookmarkData>();
|
|
|
|
|
a(*o->bookmarkData);
|
|
|
|
|
}
|
|
|
|
|
}
|