Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions src/Effects/World/ZInvisibleWorldGeometryEffect.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include "ZInvisibleWorldGeometryEffect.h"

#include <Logging.h>

#include "Registry.h"

#define TAG "[ZInvisibleWorldGeometryEffect] "

void ZInvisibleWorldGeometryEffect::OnEnterScene()
{
m_aRooms.clear();
m_aCurrentlyHiddenRooms.clear();

const auto s_aRooms = Utils::ZEntityFinder()
.EntityType("ZRoomEntity")
.Find();

for (auto& s_rRoom : s_aRooms)
{
m_aRooms.emplace_back(SZRoomEntityBinding(s_rRoom));
}

Logger::Debug(TAG "Found {} room entities!", m_aRooms.size());
}

void ZInvisibleWorldGeometryEffect::OnClearScene()
{
m_aRooms.clear();
m_aCurrentlyHiddenRooms.clear();
}

bool ZInvisibleWorldGeometryEffect::Available() const
{
return IChaosEffect::Available() && !m_aRooms.empty();
}

void ZInvisibleWorldGeometryEffect::Start()
{
if (!m_aCurrentlyHiddenRooms.empty())
{
Stop();
}

for (auto& s_Room : m_aRooms)
{
// only apply to currently visible rooms, as Stop() would otherwise make by-default invisible rooms visible.
if (auto s_boVisible = s_Room.m_bVisible; s_boVisible.has_value())
{
if (!s_boVisible.value())
{
continue;
}
}

s_Room.MakeInvisible();
m_aCurrentlyHiddenRooms.emplace_back(s_Room);
}
}

void ZInvisibleWorldGeometryEffect::Stop()
{
for (auto& s_Room : m_aCurrentlyHiddenRooms)
{
s_Room.MakeVisible();
}
m_aCurrentlyHiddenRooms.clear();
}

REGISTER_CHAOS_EFFECT(ZInvisibleWorldGeometryEffect)
31 changes: 31 additions & 0 deletions src/Effects/World/ZInvisibleWorldGeometryEffect.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#pragma once
#include "IChaosEffect.h"

#include <vector>

#include "Entity/Bindings/SZRoomEntityBinding.h"

class ZInvisibleWorldGeometryEffect : public IChaosEffect
{
public:
void OnEnterScene() override;
void OnClearScene() override;
bool Available() const override;

void Start() override;
void Stop() override;

std::string GetDisplayName(const bool p_bVoting) const override
{
return "Where did Everything go?";
}

EDuration GetDuration() const override
{
return EDuration::Short;
}

private:
std::vector<SZRoomEntityBinding> m_aRooms;
std::vector<SZRoomEntityBinding> m_aCurrentlyHiddenRooms;
};
22 changes: 22 additions & 0 deletions src/Entity/Bindings/SZRoomEntityBinding.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once
#include "Entity/Bindings/EntityBinding.h"

// [modules:/zroomentity.class].pc_entitytype (partial)
struct SZRoomEntityBinding : public SEntityBinding
{
using SEntityBinding::SEntityBinding;

PROPERTY(bool, m_bVisible);
PROPERTY(bool, m_bForceVisible);
PROPERTY(bool, m_bIsPrivate);
PROPERTY(bool, m_bVisibleInBoxReflection);

PROPERTY(ZEntityRef, m_eidParent);

PROPERTY(bool, m_bOutside);
PROPERTY(bool, m_bOutsideMaster);

INPUT_PIN(MakeVisible);
INPUT_PIN(MakeInvisible);
INPUT_PIN(Detach);
};
Loading