Magic_Game/core/Common/Scene.cpp

98 lines
1.5 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()
2018-05-08 17:40:36 +08:00
: _bWillSave(true)
, _bAutoUpdate(true)
, _bSortNeeded(false)
, _bColliderVisiable(false)
, _pRoot(new Node())
2017-10-14 18:43:32 +08:00
{
2018-05-08 17:40:36 +08:00
_pRoot->retain();
_pRoot->_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
{
}
void e2d::Scene::_render()
2017-09-10 23:56:52 +08:00
{
2018-05-08 17:40:36 +08:00
_pRoot->_render();
2017-10-29 23:48:32 +08:00
2018-05-08 17:40:36 +08:00
if (_bColliderVisiable)
2017-10-29 23:48:32 +08:00
{
2017-12-16 15:49:48 +08:00
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
Renderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
2017-12-16 15:49:48 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>ͼ<EFBFBD><CDBC>
2018-05-08 17:40:36 +08:00
_pRoot->_drawCollider();
2017-10-29 23:48:32 +08:00
}
2017-09-10 23:56:52 +08:00
}
void e2d::Scene::_update()
2018-01-30 16:45:38 +08:00
{
2018-02-06 21:11:54 +08:00
// ִ<><D6B4> onUpdate <20><><EFBFBD><EFBFBD>
2018-05-08 17:40:36 +08:00
if (_bAutoUpdate)
2018-02-03 22:04:43 +08:00
{
2018-02-06 21:11:54 +08:00
this->onUpdate();
2018-02-03 22:04:43 +08:00
}
2018-02-06 21:11:54 +08:00
// <20><><EFBFBD>¸<EFBFBD><C2B8>ڵ<EFBFBD>
2018-05-08 17:40:36 +08:00
_pRoot->_update();
2018-01-30 16:45:38 +08:00
}
void e2d::Scene::setAutoUpdate(bool bAutoUpdate)
2018-02-03 22:04:43 +08:00
{
2018-05-08 17:40:36 +08:00
_bAutoUpdate = 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
{
2018-05-08 17:40:36 +08:00
_pRoot->addChild(child, order);
2017-09-10 23:56:52 +08:00
}
2018-04-24 20:22:41 +08:00
#ifdef HIGHER_THAN_VS2012
2018-05-08 11:37:11 +08:00
void e2d::Scene::add(const std::initializer_list<Node*>& vNodes, int order)
2018-04-01 00:04:33 +08:00
{
for (const auto &node : vNodes)
{
this->add(node, order);
}
}
2018-04-01 13:16:07 +08:00
#endif
2018-04-01 00:04:33 +08:00
bool e2d::Scene::remove(Node * child)
2017-09-10 23:56:52 +08:00
{
2018-05-08 17:40:36 +08:00
return _pRoot->removeChild(child);
2017-10-17 21:22:25 +08:00
}
2017-09-10 23:56:52 +08:00
std::vector<e2d::Node*> e2d::Scene::get(const String& name) const
2018-04-24 13:28:21 +08:00
{
2018-05-08 17:40:36 +08:00
return _pRoot->getChildren(name);
2018-04-24 13:28:21 +08:00
}
e2d::Node * e2d::Scene::getOne(const String& name) const
2018-04-24 13:28:21 +08:00
{
2018-05-08 17:40:36 +08:00
return _pRoot->getChild(name);
2018-04-24 13:28:21 +08:00
}
std::vector<e2d::Node*> e2d::Scene::getAll() const
{
2018-05-08 17:40:36 +08:00
return _pRoot->getAllChildren();
2018-04-24 13:28:21 +08:00
}
e2d::Node * e2d::Scene::getRoot() const
{
2018-05-08 17:40:36 +08:00
return _pRoot;
}
void e2d::Scene::showCollider(bool visiable)
2017-10-29 23:48:32 +08:00
{
2018-05-08 17:40:36 +08:00
_bColliderVisiable = visiable;
2017-10-29 23:48:32 +08:00
}
void e2d::Scene::onDestroy()
{
2018-05-08 17:40:36 +08:00
SafeRelease(&_pRoot);
}