KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
ComponentList.hpp
[詳解]
1#pragma once
2
3#include "ComponentBase.hpp"
4#include <map>
5#include <cassert>
6#include <typeinfo>
7#include <vector>
8#include "ComponentFacade.hpp"
9
10using std::map;
11using std::vector;
12
13namespace Kisaragi_Lib
14{
15 //前方宣言
16 namespace GameObj
17 {
18 class GameObjBase;
19 }
20
22 {
23 private:
24 map<string, ComponentBase* >components;
25 vector<string>removesComID;
26
27 public:
28 /// <summary>
29 /// コンポーネントを追加
30 /// </summary>
31 /// <typeparam name="T">追加したいコンポーネントの型</typeparam>
32 template<class T>
34 {
35 //component派生クラスではないなら.
36 //TODO 派生クラス判定
37 //assert(typeid(ComponentBase).before(typeid(T)));
38
39 //Componentを受け取る
41
42 //生成失敗
43 assert(tmp != nullptr);
44
45 tmp->GameObj(_obj);
46
47 components.emplace(tmp->ID(), tmp);
48 }
49
50 /// <summary>
51 /// コンポーネントを取得する
52 /// </summary>
53 /// <typeparam name="T">捜索するコンポーネントの型</typeparam>
54 /// <returns>
55 /// <param>成功時 : 発見したコンポーネントのポインタ</param>
56 /// <param>失敗時 : プログラム終了</param>
57 /// </returns>
58 template<class T>
60 {
61 //TODO 派生クラス以外をはじく
62 //component派生クラスではないなら.
63 //assert(typeid(ComponentBase).before(typeid(T)));
64
65 for (auto& c : components)
66 {
67 if (typeid(*c.second).name() == typeid(T).name())
68 {
69 return *((T*)c.second->GetThisComponent());
70 }
71 }
72 //ない場合の処理
73
74 //せっとしてないよー.
75 assert(false);
76 }
77
78 /// <summary>
79 /// コンポーネントを取得する
80 /// </summary>
81 /// <typeparam name="T">捜索するコンポーネントの型</typeparam>
82 /// <returns>
83 /// <param>成功時 : 発見したコンポーネントのポインタ</param>
84 /// <param>失敗時 : 何も返さない</param>
85 /// </returns>
86 template<class T>
88 {
89 //component派生クラスではないなら.
90 assert(typeid(ComponentBase).before(typeid(T)));
91
92 for (auto& c : components)
93 {
94 if (typeid(*c.second).name() == typeid(T).name())
95 {
96 return *((T*)c.second->GetThisComponent());
97 }
98 }
99
100 //失敗したら何も返さないよ~
101 }
102
104
105 void AddRemoveComponent(string _id);
106
107 /// <summary>
108 /// コンポーネント除去.
109 /// </summary>
110 void RemoveComponent();
111
112 void Destroy();
113
114 };
115}
Definition ComponentBase.hpp:24
string ID() const
Definition ComponentBase.cpp:15
void GameObj(GameObjBase *_obj)
Definition ComponentBase.cpp:5
ComponentBase * Create()
コンポーネントを作成する
Definition ComponentFacade.hpp:41
Definition ComponentList.hpp:22
void RemoveComponent()
コンポーネント除去.
Definition ComponentList.cpp:20
void Destroy()
Definition ComponentList.cpp:28
map< string, ComponentBase * > components
Definition ComponentList.hpp:24
void AddComponent(GameObj::GameObjBase *_obj)
コンポーネントを追加
Definition ComponentList.hpp:33
T & GetComponent()
コンポーネントを取得する
Definition ComponentList.hpp:59
void AddRemoveComponent(ComponentBase *_com)
Definition ComponentList.cpp:5
T & TryGetComponent()
コンポーネントを取得する
Definition ComponentList.hpp:87
vector< string > removesComID
Definition ComponentList.hpp:25
Definition GameObj.hpp:28
Definition ComponentBase.hpp:13
Definition Accessor.hpp:110
ComponentFacade & GetComponentFacade()
Definition ComponentFacade.cpp:5