116 lines
1.7 KiB
C++
116 lines
1.7 KiB
C++
#include "..\e2dmodule.h"
|
|
#include "..\e2dobject.h"
|
|
|
|
e2d::Scene::Scene()
|
|
: root_(nullptr)
|
|
, border_visible_(false)
|
|
, collider_visible_(false)
|
|
, transform_(D2D1::Matrix3x2F::Identity())
|
|
{
|
|
}
|
|
|
|
e2d::Scene::Scene(Node * root)
|
|
: root_(nullptr)
|
|
, border_visible_(false)
|
|
, collider_visible_(false)
|
|
, transform_(D2D1::Matrix3x2F::Identity())
|
|
{
|
|
this->SetRoot(root);
|
|
}
|
|
|
|
e2d::Scene::~Scene()
|
|
{
|
|
if (root_)
|
|
{
|
|
root_->SetParentScene(nullptr);
|
|
root_->Release();
|
|
}
|
|
}
|
|
|
|
void e2d::Scene::SetRoot(Node * root)
|
|
{
|
|
if (root_ == root)
|
|
return;
|
|
|
|
if (root_)
|
|
{
|
|
root_->SetParentScene(nullptr);
|
|
root_->Release();
|
|
}
|
|
|
|
if (root)
|
|
{
|
|
root->Retain();
|
|
root->SetParentScene(this);
|
|
}
|
|
|
|
root_ = root;
|
|
}
|
|
|
|
e2d::Node * e2d::Scene::GetRoot() const
|
|
{
|
|
return root_;
|
|
}
|
|
|
|
void e2d::Scene::ShowBorder(bool visible)
|
|
{
|
|
border_visible_ = visible;
|
|
}
|
|
|
|
void e2d::Scene::ShowCollider(bool visible)
|
|
{
|
|
collider_visible_ = visible;
|
|
}
|
|
|
|
void e2d::Scene::Draw()
|
|
{
|
|
if (root_)
|
|
{
|
|
root_->Visit();
|
|
|
|
if (border_visible_)
|
|
{
|
|
Renderer::GetInstance()->GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
|
Renderer::GetInstance()->GetSolidBrush()->SetOpacity(1.f);
|
|
root_->DrawBorder();
|
|
}
|
|
|
|
if (collider_visible_)
|
|
{
|
|
Renderer::GetInstance()->GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
|
root_->DrawCollider();
|
|
}
|
|
}
|
|
}
|
|
|
|
void e2d::Scene::Dispatch(const MouseEvent & e)
|
|
{
|
|
if (root_)
|
|
{
|
|
root_->Dispatch(e, false);
|
|
}
|
|
}
|
|
|
|
void e2d::Scene::Dispatch(const KeyEvent & e)
|
|
{
|
|
if (root_)
|
|
{
|
|
root_->Dispatch(e, false);
|
|
}
|
|
}
|
|
|
|
void e2d::Scene::SetTransform(const D2D1::Matrix3x2F& matrix)
|
|
{
|
|
transform_ = matrix;
|
|
|
|
if (root_)
|
|
{
|
|
root_->dirty_transform_ = true;
|
|
}
|
|
}
|
|
|
|
const D2D1::Matrix3x2F & e2d::Scene::GetTransform() const
|
|
{
|
|
return transform_;
|
|
}
|