Ship 0.8 fog/freistellen and fix Windows CI for friends
Some checks are pending
Windows Release / windows-x86_64 (push) Waiting to run
Some checks are pending
Windows Release / windows-x86_64 (push) Waiting to run
Publish the portable zip to public Forgejo from the private GitHub builder, and force Ninja so MSVC 195 deps build without CMake 4.2.
This commit is contained in:
parent
97b136de3b
commit
1c1d63f376
46 changed files with 1748 additions and 156 deletions
|
|
@ -21,6 +21,7 @@
|
|||
#include <cereal/types/string.hpp>
|
||||
#include "DrawingProgramLayer.hpp"
|
||||
#include "../../World.hpp"
|
||||
#include "../../MainProgram.hpp"
|
||||
#include "SerializedBlendMode.hpp"
|
||||
|
||||
using namespace NetworkingObjects;
|
||||
|
|
@ -78,6 +79,8 @@ DrawingProgramLayerListItem::DrawingProgramLayerListItem(World& w, const Drawing
|
|||
displayData = w.netObjMan.make_obj<DisplayData>();
|
||||
displayData->alpha = initData.metaInfo.alpha;
|
||||
displayData->blendMode = initData.metaInfo.blendMode;
|
||||
displayData->playerLocked = initData.metaInfo.playerLocked;
|
||||
displayData->fogLayer = initData.metaInfo.fogLayer;
|
||||
}
|
||||
|
||||
DrawingProgramLayerListItemUndoData DrawingProgramLayerListItem::get_undo_data(WorldUndoManager& u) const {
|
||||
|
|
@ -85,6 +88,8 @@ DrawingProgramLayerListItemUndoData DrawingProgramLayerListItem::get_undo_data(W
|
|||
toRet.metaInfo.name = nameData->name;
|
||||
toRet.metaInfo.blendMode = displayData->blendMode;
|
||||
toRet.metaInfo.alpha = displayData->alpha;
|
||||
toRet.metaInfo.playerLocked = displayData->playerLocked;
|
||||
toRet.metaInfo.fogLayer = displayData->fogLayer;
|
||||
if(folderData) {
|
||||
toRet.containerUndoID = u.get_undoid_from_netid(folderData->folderList.get_net_id());
|
||||
toRet.folderData = std::vector<DrawingProgramLayerListItemUndoData>();
|
||||
|
|
@ -178,11 +183,24 @@ void DrawingProgramLayerListItem::load_file(cereal::PortableBinaryInputArchive&
|
|||
a(*nameData);
|
||||
|
||||
displayData = layerMan.drawP.world.netObjMan.make_obj<DisplayData>();
|
||||
a(*displayData);
|
||||
if(version >= VersionNumber(0, 8, 0)) {
|
||||
a(*displayData);
|
||||
// Normalize cereal bools (non-0/1 bytes must not stick as "true" forever).
|
||||
displayData->visible = displayData->visible ? true : false;
|
||||
displayData->playerLocked = displayData->playerLocked ? true : false;
|
||||
displayData->fogLayer = displayData->fogLayer ? true : false;
|
||||
}
|
||||
else {
|
||||
a(displayData->alpha, displayData->visible, displayData->blendMode);
|
||||
displayData->visible = displayData->visible ? true : false;
|
||||
displayData->playerLocked = false;
|
||||
displayData->fogLayer = false;
|
||||
}
|
||||
|
||||
bool isFolder;
|
||||
a(isFolder);
|
||||
if(isFolder) {
|
||||
displayData->fogLayer = false;
|
||||
folderData = std::make_unique<DrawingProgramLayerFolder>();
|
||||
folderData->load_file(a, version, layerMan);
|
||||
}
|
||||
|
|
@ -275,20 +293,84 @@ SerializedBlendMode DrawingProgramLayerListItem::get_blend_mode() const {
|
|||
return displayData->blendMode;
|
||||
}
|
||||
|
||||
void DrawingProgramLayerListItem::set_player_locked(DrawingProgramLayerManager& layerMan, bool locked) const {
|
||||
if(!displayData)
|
||||
return;
|
||||
bool newLocked = locked || displayData->fogLayer;
|
||||
if(displayData->playerLocked != newLocked) {
|
||||
displayData->playerLocked = newLocked;
|
||||
layerMan.drawP.drawCache.clear_own_cached_surfaces();
|
||||
layerMan.drawP.world.delayedUpdateObjectManager.send_update_to_all<DisplayData>(displayData, false);
|
||||
layerMan.refresh_fog_client_projection();
|
||||
}
|
||||
}
|
||||
|
||||
bool DrawingProgramLayerListItem::get_player_locked() const {
|
||||
return displayData && displayData->playerLocked;
|
||||
}
|
||||
|
||||
void DrawingProgramLayerListItem::set_fog_layer(DrawingProgramLayerManager& layerMan, bool fog) const {
|
||||
if(!displayData || displayData->fogLayer == fog || is_folder())
|
||||
return;
|
||||
displayData->fogLayer = fog;
|
||||
if(fog)
|
||||
displayData->playerLocked = true;
|
||||
layerMan.drawP.drawCache.clear_own_cached_surfaces();
|
||||
layerMan.drawP.world.delayedUpdateObjectManager.send_update_to_all<DisplayData>(displayData, false);
|
||||
layerMan.refresh_fog_client_projection();
|
||||
}
|
||||
|
||||
bool DrawingProgramLayerListItem::is_fog_layer() const {
|
||||
return displayData && displayData->fogLayer;
|
||||
}
|
||||
|
||||
bool DrawingProgramLayerListItem::is_player_edit_blocked() const {
|
||||
return is_fog_layer() || get_player_locked();
|
||||
}
|
||||
|
||||
void DrawingProgramLayerListItem::set_metainfo(DrawingProgramLayerManager& layerMan, const DrawingProgramLayerListItemMetaInfo& metaInfo) {
|
||||
set_blend_mode(layerMan, metaInfo.blendMode);
|
||||
set_alpha(layerMan, metaInfo.alpha);
|
||||
set_name(layerMan.drawP.world.delayedUpdateObjectManager, metaInfo.name);
|
||||
set_fog_layer(layerMan, metaInfo.fogLayer);
|
||||
set_player_locked(layerMan, metaInfo.playerLocked || metaInfo.fogLayer);
|
||||
}
|
||||
|
||||
DrawingProgramLayerListItemMetaInfo DrawingProgramLayerListItem::get_metainfo() const {
|
||||
return DrawingProgramLayerListItemMetaInfo{
|
||||
.name = get_name(),
|
||||
.alpha = get_alpha(),
|
||||
.blendMode = get_blend_mode()
|
||||
.blendMode = get_blend_mode(),
|
||||
.playerLocked = get_player_locked(),
|
||||
.fogLayer = is_fog_layer()
|
||||
};
|
||||
}
|
||||
|
||||
void DrawingProgramLayerListItem::write_stripped_constructor(cereal::PortableBinaryOutputArchive& a, const std::unordered_set<NetworkingObjects::NetObjID>& hiddenComponentIds) const {
|
||||
a(static_cast<bool>(folderData));
|
||||
if(folderData) {
|
||||
a(folderData->folderList.get_net_id());
|
||||
a(static_cast<uint32_t>(folderData->folderList->size()));
|
||||
for(auto& child : *folderData->folderList) {
|
||||
a(child.obj.get_net_id());
|
||||
child.obj->write_stripped_constructor(a, hiddenComponentIds);
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::vector<NetworkingObjects::NetObjTemporaryPtr<CanvasComponentContainer>> keep;
|
||||
for(auto& c : *layerData->components) {
|
||||
if(!hiddenComponentIds.contains(c.obj.get_net_id()))
|
||||
keep.emplace_back(c.obj);
|
||||
}
|
||||
a(layerData->components.get_net_id());
|
||||
a(static_cast<uint32_t>(keep.size()));
|
||||
for(auto& c : keep)
|
||||
c.write_create_message(a);
|
||||
}
|
||||
nameData.write_create_message(a);
|
||||
displayData.write_create_message(a);
|
||||
}
|
||||
|
||||
void DrawingProgramLayerListItem::erase_invalid_components() {
|
||||
if(folderData)
|
||||
folderData->erase_invalid_components();
|
||||
|
|
@ -312,7 +394,9 @@ void DrawingProgramLayerListItem::register_class(World& w) {
|
|||
});
|
||||
w.delayedUpdateObjectManager.register_class<DisplayData>(w.netObjMan, NetworkingObjects::DelayUpdateSerializedClassManager::CustomConstructors<DisplayData>{
|
||||
.postUpdateFunc = [&](DisplayData& o) {
|
||||
(void)o;
|
||||
w.drawProg.drawCache.clear_own_cached_surfaces();
|
||||
w.drawProg.layerMan.ensure_editing_layer_is_editable();
|
||||
w.set_to_layout_gui_if_focus();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue