Incremental Engine  1.0.6
A 2D Game Engine to create Idle Games
IncrementalEngine::SceneManager Class Reference

#include <Scene.h>

Inheritance diagram for IncrementalEngine::SceneManager:
IncrementalEngine::Drawable

Classes

struct  SceneItem
 

Public Member Functions

 SceneManager (RenderWindow *renderWindow, ShaderManager *shaderManager, ID3D11Device *device)
 
virtual ~SceneManager ()
 
void Destroy (Actor *actor)
 
void Update (float dt)
 
virtual HRESULT Draw (ID3D11DeviceContext *deviceContext) override
 
template<typename T >
std::enable_if< std::is_base_of< Actor, T >::value, T * >::type Create (Actor *parent=nullptr)
 T must inherit from Actor. More...
 

Private Attributes

vector< SceneItem_items
 
bool _destroyInUpdate
 

Additional Inherited Members

- Protected Member Functions inherited from IncrementalEngine::Drawable
void CopyParameters (Drawable *drawable)
 
- Protected Attributes inherited from IncrementalEngine::Drawable
RenderWindow_renderWindow
 
ShaderManager_shaderManager
 
ID3D11Device * _device
 

Detailed Description

Definition at line 9 of file Scene.h.

Constructor & Destructor Documentation

◆ SceneManager()

IncrementalEngine::SceneManager::SceneManager ( RenderWindow renderWindow,
ShaderManager shaderManager,
ID3D11Device *  device 
)

Definition at line 8 of file Scene.cpp.

13  {
14  _renderWindow = renderWindow;
15  _shaderManager = shaderManager;
16  _device = device;
17  }

◆ ~SceneManager()

IncrementalEngine::SceneManager::~SceneManager ( )
virtual

Definition at line 19 of file Scene.cpp.

20  {
21  bool clear = false;
22  while (!clear)
23  {
24  clear = true;
25  for (int i = 0; i < _items.size(); i++)
26  {
27  if (_items[i].Destroy) continue;
28 
29  if (IS_ROOT(_items[i].Actor))
30  {
31  CHECKED_DELETE(_items[i].Actor);
32  _items[i].Destroy = true;
33  clear = false;
34  }
35  }
36  }
37 
38  _items.clear();
39  }

Member Function Documentation

◆ Create()

template<typename T >
std::enable_if<std::is_base_of<Actor, T>::value, T*>::type IncrementalEngine::SceneManager::Create ( Actor parent = nullptr)
inline

T must inherit from Actor.

Definition at line 39 of file Scene.h.

40  {
41  T* actor = new T();
42  CopyParameters(actor);
43 
44  actor->SetActive(true);
45  actor->Init();
46  actor->SetParent(parent);
47 
48  auto newItem = SceneItem();
49  newItem.Actor = actor;
50 
51  _items.push_back(newItem);
52  return actor;
53  }

◆ Destroy()

void IncrementalEngine::SceneManager::Destroy ( Actor actor)

Definition at line 41 of file Scene.cpp.

42  {
43  for (int i = 0; i < _items.size(); i++)
44  {
45  if (_items[i].Actor == actor)
46  {
47  _items[i].Destroy = true;
48  break;
49  }
50  }
51 
52  _destroyInUpdate = true;
53  }

◆ Draw()

HRESULT IncrementalEngine::SceneManager::Draw ( ID3D11DeviceContext *  deviceContext)
overridevirtual

Implements IncrementalEngine::Drawable.

Definition at line 90 of file Scene.cpp.

91  {
92  HRESULT result;
93 
94  for (int i = 0; i < _items.size(); i++)
95  {
96  if (IS_ROOT(_items[i].Actor))
97  {
98  result = _items[i].Actor->DrawRecursive(deviceContext);
99 
100  if (FAILED(result))
101  {
102  return CO_E_ERRORINAPP;
103  }
104  }
105  }
106 
107  return S_OK;
108  }

◆ Update()

void IncrementalEngine::SceneManager::Update ( float  dt)

Definition at line 55 of file Scene.cpp.

56  {
57  if (_destroyInUpdate)
58  {
59  for (int i = 0; i < _items.size(); i++)
60  {
61  if (_items[i].Destroy)
62  {
63  CHECKED_DELETE(_items[i].Actor);
64  }
65  }
66 
67  _items.erase(
68  remove_if(
69  _items.begin(),
70  _items.end(),
71  [](const SceneItem& item) {
72  return item.Destroy;
73  }
74  ),
75  _items.end()
76  );
77 
78  _destroyInUpdate = false;
79  }
80 
81  for (int i = 0; i < _items.size(); i++)
82  {
83  if (IS_ROOT(_items[i].Actor))
84  {
85  _items[i].Actor->UpdateRecursive(dt);
86  }
87  }
88  }

Member Data Documentation

◆ _destroyInUpdate

bool IncrementalEngine::SceneManager::_destroyInUpdate
private

Definition at line 34 of file Scene.h.

◆ _items

vector<SceneItem> IncrementalEngine::SceneManager::_items
private

Definition at line 33 of file Scene.h.

IncrementalEngine::Drawable::_device
ID3D11Device * _device
Definition: Drawable.h:18
IncrementalEngine::SceneManager::_items
vector< SceneItem > _items
Definition: Scene.h:33
IncrementalEngine::Drawable::_shaderManager
ShaderManager * _shaderManager
Definition: Drawable.h:17
IncrementalEngine::Drawable::CopyParameters
void CopyParameters(Drawable *drawable)
Definition: Drawable.h:20
IncrementalEngine::SceneManager::_destroyInUpdate
bool _destroyInUpdate
Definition: Scene.h:34
IncrementalEngine::Drawable::_renderWindow
RenderWindow * _renderWindow
Definition: Drawable.h:16
IncrementalEngine::SceneManager::Destroy
void Destroy(Actor *actor)
Definition: Scene.cpp:41