Replace Listenable system by signals

Former-commit-id: 16fb0b3e703ca4b41ceb97fab938cebb05f677d4
This commit is contained in:
Lynix
2015-06-07 15:16:11 +02:00
parent 3e8d2e1e47
commit fe25249136
24 changed files with 182 additions and 348 deletions

View File

@@ -45,6 +45,7 @@ namespace Ndk
virtual void OnComponentAttached(BaseComponent& component);
virtual void OnComponentDetached(BaseComponent& component);
virtual void OnDetached();
void SetEntity(Entity* entity);
static bool Initialize();

View File

@@ -19,11 +19,12 @@ namespace Ndk
{
class Entity;
class NDK_API CameraComponent : public Component<CameraComponent>, public NzAbstractViewer, NzNode::Listener, NzRenderTarget::Listener
class NDK_API CameraComponent : public Component<CameraComponent>, public NzAbstractViewer
{
public:
CameraComponent();
~CameraComponent();
inline CameraComponent();
inline CameraComponent(const CameraComponent& camera);
~CameraComponent() = default;
void ApplyView() const override;
@@ -66,15 +67,19 @@ namespace Ndk
void OnComponentAttached(BaseComponent& component) override;
void OnComponentDetached(BaseComponent& component) override;
void OnDetached() override;
bool OnNodeInvalidated(const NzNode* node, void* userdata) override;
void OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata) override;
bool OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata) override;
void OnNodeInvalidated(const NzNode* node);
void OnRenderTargetRelease(const NzRenderTarget* renderTarget);
void OnRenderTargetSizeChange(const NzRenderTarget* renderTarget);
void UpdateFrustum() const;
void UpdateProjectionMatrix() const;
void UpdateViewMatrix() const;
void UpdateViewport() const;
NazaraSlot(NzNode, OnNodeInvalidation, m_nodeInvalidationSlot);
NazaraSlot(NzRenderTarget, OnRenderTargetRelease, m_targetReleaseSlot);
NazaraSlot(NzRenderTarget, OnRenderTargetSizeChange, m_targetResizeSlot);
mutable NzFrustumf m_frustum;
mutable NzMatrix4f m_projectionMatrix;
mutable NzMatrix4f m_viewMatrix;

View File

@@ -21,10 +21,22 @@ namespace Ndk
{
}
inline CameraComponent::~CameraComponent()
inline CameraComponent::CameraComponent(const CameraComponent& camera) :
Component(camera),
NzAbstractViewer(camera),
m_targetRegion(camera.m_targetRegion),
m_target(camera.m_target),
m_frustumUpdated(false),
m_projectionMatrixUpdated(false),
m_viewMatrixUpdated(false),
m_viewportUpdated(false),
m_aspectRatio(camera.m_aspectRatio),
m_fov(camera.m_fov),
m_zFar(camera.m_zFar),
m_zNear(camera.m_zNear),
m_layer(camera.m_layer)
{
if (m_target)
m_target->RemoveListener(this);
}
inline void CameraComponent::EnsureFrustumUpdate() const
@@ -126,12 +138,11 @@ namespace Ndk
inline void CameraComponent::SetTarget(const NzRenderTarget* renderTarget)
{
if (m_target)
m_target->RemoveListener(this);
m_target = renderTarget;
if (m_target)
m_target->AddListener(this);
m_targetReleaseSlot = NazaraConnect(*m_target, OnRenderTargetRelease, OnRenderTargetRelease);
else
NazaraDisconnect(m_targetReleaseSlot);
}
inline void CameraComponent::SetTargetRegion(const NzRectf& region)

View File

@@ -46,6 +46,9 @@ namespace Ndk
void CameraComponent::OnAttached()
{
if (m_entity->HasComponent<NodeComponent>())
m_nodeInvalidationSlot = NazaraConnect(m_entity->GetComponent<NodeComponent>(), OnNodeInvalidation, OnNodeInvalidated);
InvalidateViewMatrix();
}
@@ -54,7 +57,7 @@ namespace Ndk
if (IsComponent<NodeComponent>(component))
{
NodeComponent& nodeComponent = static_cast<NodeComponent&>(component);
nodeComponent.AddListener(this);
m_nodeInvalidationSlot = NazaraConnect(nodeComponent, OnNodeInvalidation, OnNodeInvalidated);
InvalidateViewMatrix();
}
@@ -65,7 +68,7 @@ namespace Ndk
if (IsComponent<NodeComponent>(component))
{
NodeComponent& nodeComponent = static_cast<NodeComponent&>(component);
nodeComponent.RemoveListener(this);
NazaraDisconnect(m_nodeInvalidationSlot);
InvalidateViewMatrix();
}
@@ -73,44 +76,33 @@ namespace Ndk
void CameraComponent::OnDetached()
{
NazaraDisconnect(m_nodeInvalidationSlot);
InvalidateViewMatrix();
}
bool CameraComponent::OnNodeInvalidated(const NzNode* node, void* userdata)
void CameraComponent::OnNodeInvalidated(const NzNode* node)
{
NazaraUnused(node);
NazaraUnused(userdata);
// Our view matrix depends on NodeComponent position/rotation
InvalidateViewMatrix();
return true;
}
void CameraComponent::OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata)
void CameraComponent::OnRenderTargetRelease(const NzRenderTarget* renderTarget)
{
NazaraUnused(userdata);
if (renderTarget == m_target)
m_target = nullptr;
else
NazaraInternalError("Not listening to " + NzString::Pointer(renderTarget));
}
bool CameraComponent::OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata)
void CameraComponent::OnRenderTargetSizeChange(const NzRenderTarget* renderTarget)
{
NazaraUnused(userdata);
if (renderTarget == m_target)
{
InvalidateViewport();
return true;
}
else
{
NazaraInternalError("Not listening to " + NzString::Pointer(renderTarget));
return false;
}
}
void CameraComponent::UpdateFrustum() const