infinipaint/src/BookmarkManager.hpp

48 lines
1.4 KiB
C++
Raw Normal View History

2025-07-06 20:43:53 +03:00
#pragma once
#include <Helpers/Serializers.hpp>
#include <cereal/types/string.hpp>
#include <Helpers/NetworkingObjects/NetObjOrderedList.hpp>
2025-07-06 20:43:53 +03:00
#include "SharedTypes.hpp"
#include "CoordSpaceHelper.hpp"
struct Bookmark {
std::string name;
2025-07-06 20:43:53 +03:00
CoordSpaceHelper coords;
Vector<int32_t, 2> windowSize;
template <class Archive> void serialize(Archive& a) {
a(name, coords, windowSize);
2025-07-06 20:43:53 +03:00
}
2025-09-30 16:36:09 +03:00
void scale_up(const WorldScalar& scaleUpAmount);
2025-07-06 20:43:53 +03:00
};
class World;
class BookmarkManager {
public:
BookmarkManager(World& w);
2025-12-10 17:23:05 +03:00
void init();
2025-07-06 20:43:53 +03:00
void add_bookmark(const std::string& name);
void remove_bookmark(uint32_t bookmarkIndex);
void jump_to_bookmark(uint32_t bookmarkIndex);
void scale_up(const WorldScalar& scaleUpAmount);
template <typename Archive> void save(Archive& a) const {
a(bookmarks->size());
for(uint32_t i = 0; i < bookmarks->size(); i++)
a(*bookmarks->at(i));
2025-07-06 20:43:53 +03:00
}
template <typename Archive> void load(Archive& a) {
uint32_t newSize = bookmarks->size();
for(uint32_t i = 0; i < newSize; i++) {
Bookmark b;
a(b);
bookmarks->emplace_back_direct(bookmarks, b);
}
}
NetworkingObjects::NetObjOwnerPtr<NetworkingObjects::NetObjOrderedList<Bookmark>> bookmarks;
2025-07-06 20:43:53 +03:00
private:
World& world;
};