Magic_Game/core/Common/Scene.cpp

105 lines
1.8 KiB
C++
Raw Normal View History

2018-04-21 21:24:46 +08:00
#include "..\e2dbase.h"
#include "..\e2dnode.h"
#include "..\e2dmanager.h"
2017-09-10 23:56:52 +08:00
e2d::Scene::Scene()
: _autoUpdate(true)
2018-05-15 23:59:58 +08:00
, _root(nullptr)
2017-10-14 18:43:32 +08:00
{
_root = new (e2d::autorelease) Node();
2018-07-22 21:22:27 +08:00
_root->retain();
2018-07-06 00:47:50 +08:00
_root->_setParentScene(this);
2017-10-14 18:43:32 +08:00
}
2017-09-10 23:56:52 +08:00
e2d::Scene::~Scene()
2017-09-10 23:56:52 +08:00
{
2018-07-22 21:22:27 +08:00
GC::getInstance()->safeRelease(_root);
2017-09-10 23:56:52 +08:00
}
2018-07-07 19:05:39 +08:00
void e2d::Scene::render()
2017-09-10 23:56:52 +08:00
{
_root->_render();
2017-10-29 23:48:32 +08:00
2018-07-24 12:49:32 +08:00
if (Game::getInstance()->getConfig().isOutlineVisible())
2018-07-07 18:04:18 +08:00
{
auto brush = Renderer::getInstance()->getSolidColorBrush();
brush->SetColor(D2D1::ColorF(D2D1::ColorF::Red, 0.6f));
brush->SetOpacity(1.f);
2018-07-07 18:04:18 +08:00
_root->_renderOutline();
}
2018-07-24 12:49:32 +08:00
if (Game::getInstance()->getConfig().isColliderVisible())
2017-10-29 23:48:32 +08:00
{
Renderer::getInstance()->getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
_root->_renderCollider();
2017-10-29 23:48:32 +08:00
}
2017-09-10 23:56:52 +08:00
}
2018-07-07 19:05:39 +08:00
void e2d::Scene::update()
2018-01-30 16:45:38 +08:00
{
if (_autoUpdate)
2018-02-03 22:04:43 +08:00
{
2018-07-28 22:22:58 +08:00
onUpdate();
2018-02-03 22:04:43 +08:00
}
_root->_update();
2018-01-30 16:45:38 +08:00
}
void e2d::Scene::dispatch(const MouseEvent & e)
{
2018-07-28 22:22:58 +08:00
if (onMouseEvent(e))
{
_root->dispatch(e);
}
}
void e2d::Scene::dispatch(const KeyEvent & e)
{
2018-07-28 22:22:58 +08:00
if (onKeyEvent(e))
{
_root->dispatch(e);
}
}
void e2d::Scene::setAutoUpdate(bool bAutoUpdate)
2018-02-03 22:04:43 +08:00
{
_autoUpdate = bAutoUpdate;
2018-02-03 22:04:43 +08:00
}
2018-03-03 11:46:57 +08:00
void e2d::Scene::add(Node * child, int order /* = 0 */)
2017-09-10 23:56:52 +08:00
{
_root->addChild(child, order);
2017-09-10 23:56:52 +08:00
}
void e2d::Scene::add(const std::vector<Node*>& nodes, int order)
2018-04-01 00:04:33 +08:00
{
for (auto node : nodes)
2018-04-01 00:04:33 +08:00
{
this->add(node, order);
}
}
bool e2d::Scene::remove(Node * child)
2017-09-10 23:56:52 +08:00
{
return _root->removeChild(child);
2017-10-17 21:22:25 +08:00
}
2017-09-10 23:56:52 +08:00
2018-07-07 19:05:39 +08:00
std::vector<e2d::Node*> e2d::Scene::getChildren(const String& name) const
2018-04-24 13:28:21 +08:00
{
return _root->getChildren(name);
2018-04-24 13:28:21 +08:00
}
2018-07-07 19:05:39 +08:00
e2d::Node * e2d::Scene::getChild(const String& name) const
2018-04-24 13:28:21 +08:00
{
return _root->getChild(name);
2018-04-24 13:28:21 +08:00
}
2018-07-07 19:05:39 +08:00
const std::vector<e2d::Node*>& e2d::Scene::getAllChildren() const
2018-04-24 13:28:21 +08:00
{
return _root->getAllChildren();
2018-04-24 13:28:21 +08:00
}
e2d::Node * e2d::Scene::getRoot() const
{
return _root;
}