forked from sschmid/Entitas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_entity_8cs_source.html
144 lines (142 loc) · 96.3 KB
/
_entity_8cs_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Entitas: Entitas/Entitas/Entity/Entity.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="docs-logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Entitas
 <span id="projectnumber">1.13.0</span>
</div>
<div id="projectbrief">Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('_entity_8cs_source.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Entity.cs</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="keyword">using</span> System;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="keyword">using</span> System.Collections.Generic;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="keyword">using</span> System.Text;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="keyword">namespace </span><a class="code" href="namespace_entitas.html">Entitas</a> {</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> /// Use context.CreateEntity() to create a new entity and</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> /// entity.Destroy() to destroy it.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> /// You can add, replace and remove IComponent to an entity.</span></div><div class="line"><a name="l00010"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html"> 10</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_entitas_1_1_entity.html">Entity</a> : <a class="code" href="interface_entitas_1_1_i_entity.html">IEntity</a> {</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> /// Occurs when a component gets added.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> /// All event handlers will be removed when</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> /// the entity gets destroyed by the context.</span></div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928"> 15</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">event</span> EntityComponentChanged <a class="code" href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928">OnComponentAdded</a>;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> /// Occurs when a component gets removed.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> /// All event handlers will be removed when</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> /// the entity gets destroyed by the context.</span></div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887"> 20</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">event</span> EntityComponentChanged <a class="code" href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887">OnComponentRemoved</a>;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> /// Occurs when a component gets replaced.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> /// All event handlers will be removed when</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> /// the entity gets destroyed by the context.</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a"> 25</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">event</span> EntityComponentReplaced <a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> /// Occurs when an entity gets released and is not retained anymore.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> /// All event handlers will be removed when</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> /// the entity gets destroyed by the context.</span></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836"> 30</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">event</span> EntityEvent <a class="code" href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836">OnEntityReleased</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> /// Occurs when calling entity.Destroy().</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> /// All event handlers will be removed when</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> /// the entity gets destroyed by the context.</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016"> 35</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">event</span> EntityEvent <a class="code" href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016">OnDestroyEntity</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"> /// The total amount of components an entity can possibly have.</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107"> 38</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">totalComponents</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _totalComponents; } }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment"> /// Each entity has its own unique creationIndex which will be set by</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> /// the context when you create the entity.</span></div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405"> 42</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">creationIndex</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _creationIndex; } }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> /// The context manages the state of an entity.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> /// Active entities are enabled, destroyed entities are not.</span></div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a93e43dc3a3668ca457db9d3609405ff9"> 46</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code" href="class_entitas_1_1_entity.html#a93e43dc3a3668ca457db9d3609405ff9">isEnabled</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _isEnabled; } }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> /// componentPools is set by the context which created the entity and</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> /// is used to reuse removed components.</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> /// Removed components will be pushed to the componentPool.</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> /// Use entity.CreateComponent(index, type) to get a new or</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> /// reusable component from the componentPool.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> /// Use entity.GetComponentPool(index) to get a componentPool for</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> /// a specific component index.</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ab8bb69649e83e05c595d006d205f11b2"> 55</a></span> <span class="comment"></span> <span class="keyword">public</span> Stack<IComponent>[] <a class="code" href="class_entitas_1_1_entity.html#ab8bb69649e83e05c595d006d205f11b2">componentPools</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _componentPools; } }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"></span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"> /// The contextInfo is set by the context which created the entity and</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> /// contains information about the context.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> /// It's used to provide better error messages.</span></div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ae8347b174468c55c485e0265254d9c91"> 60</a></span> <span class="comment"></span> <span class="keyword">public</span> <a class="code" href="class_entitas_1_1_context_info.html">ContextInfo</a> <a class="code" href="class_entitas_1_1_entity.html#ae8347b174468c55c485e0265254d9c91">contextInfo</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _contextInfo; } }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> /// Automatic Entity Reference Counting (AERC)</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"> /// is used internally to prevent pooling retained entities.</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> /// If you use retain manually you also have to</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> /// release it manually at some point.</span></div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a1b1726bdfa1fbcee8e0f2541bc9f1e84"> 66</a></span> <span class="comment"></span> <span class="keyword">public</span> <a class="code" href="interface_entitas_1_1_i_a_e_r_c.html">IAERC</a> <a class="code" href="class_entitas_1_1_entity.html#a1b1726bdfa1fbcee8e0f2541bc9f1e84">aerc</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _aerc; } }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  readonly List<IComponent> _componentBuffer;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  readonly List<int> _indexBuffer;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">int</span> _creationIndex;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordtype">bool</span> _isEnabled;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">int</span> _totalComponents;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a>[] _components;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  Stack<IComponent>[] _componentPools;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="class_entitas_1_1_context_info.html">ContextInfo</a> _contextInfo;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="interface_entitas_1_1_i_a_e_r_c.html">IAERC</a> _aerc;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a>[] _componentsCache;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">int</span>[] _componentIndicesCache;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordtype">string</span> _toStringCache;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  StringBuilder _toStringBuilder;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">public</span> <a class="code" href="class_entitas_1_1_entity.html">Entity</a>() {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  _componentBuffer = <span class="keyword">new</span> List<IComponent>();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  _indexBuffer = <span class="keyword">new</span> List<int>();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> Initialize(<span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">creationIndex</a>, <span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">totalComponents</a>, Stack<IComponent>[] <a class="code" href="class_entitas_1_1_entity.html#ab8bb69649e83e05c595d006d205f11b2">componentPools</a>, ContextInfo <a class="code" href="class_entitas_1_1_entity.html#ae8347b174468c55c485e0265254d9c91">contextInfo</a> = <span class="keyword">null</span>, IAERC <a class="code" href="class_entitas_1_1_entity.html#a1b1726bdfa1fbcee8e0f2541bc9f1e84">aerc</a> = <span class="keyword">null</span>) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  Reactivate(<a class="code" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">creationIndex</a>);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  _totalComponents = <a class="code" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">totalComponents</a>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  _components = <span class="keyword">new</span> IComponent[<a class="code" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">totalComponents</a>];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  _componentPools = <a class="code" href="class_entitas_1_1_entity.html#ab8bb69649e83e05c595d006d205f11b2">componentPools</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  _contextInfo = <a class="code" href="class_entitas_1_1_entity.html#ae8347b174468c55c485e0265254d9c91">contextInfo</a> ?? createDefaultContextInfo();</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  _aerc = <a class="code" href="class_entitas_1_1_entity.html#a1b1726bdfa1fbcee8e0f2541bc9f1e84">aerc</a> ?? <span class="keyword">new</span> SafeAERC(<span class="keyword">this</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  ContextInfo createDefaultContextInfo() {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  var componentNames = <span class="keyword">new</span> <span class="keywordtype">string</span>[<a class="code" href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">totalComponents</a>];</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < componentNames.Length; i++) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  componentNames[i] = i.ToString();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> ContextInfo(<span class="stringliteral">"No Context"</span>, componentNames, <span class="keyword">null</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> Reactivate(<span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">creationIndex</a>) {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  _creationIndex = <a class="code" href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">creationIndex</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  _isEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> /// Adds a component at the specified index.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> /// You can only have one component at an index.</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> /// Each component type must have its own constant index.</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> /// The prefered way is to use the</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> /// generated methods from the code generator.</span></div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a684593bfe766e01ff4776bfbf841156a"> 120</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#a684593bfe766e01ff4776bfbf841156a">AddComponent</a>(<span class="keywordtype">int</span> index, <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a> component) {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (!_isEnabled) {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_is_not_enabled_exception.html">EntityIsNotEnabledException</a>(</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="stringliteral">"Cannot add component '"</span> +</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' to "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  );</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">HasComponent</a>(index)) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_already_has_component_exception.html">EntityAlreadyHasComponentException</a>(</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  index, <span class="stringliteral">"Cannot add component '"</span> +</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' to "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span>,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="stringliteral">"You should check if an entity already has the component "</span> +</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="stringliteral">"before adding it or use entity.ReplaceComponent()."</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  );</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  _components[index] = component;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  _componentsCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  _componentIndicesCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  _toStringCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928">OnComponentAdded</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928">OnComponentAdded</a>(<span class="keyword">this</span>, index, component);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"></span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> /// Removes a component at the specified index.</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> /// You can only remove a component at an index if it exists.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> /// The prefered way is to use the</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> /// generated methods from the code generator.</span></div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a288fdf38196ce4d54597f08bf5989a19"> 150</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#a288fdf38196ce4d54597f08bf5989a19">RemoveComponent</a>(<span class="keywordtype">int</span> index) {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> (!_isEnabled) {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_is_not_enabled_exception.html">EntityIsNotEnabledException</a>(</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="stringliteral">"Cannot remove component '"</span> +</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' from "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  );</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (!<a class="code" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">HasComponent</a>(index)) {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_does_not_have_component_exception.html">EntityDoesNotHaveComponentException</a>(</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  index, <span class="stringliteral">"Cannot remove component '"</span> +</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' from "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span>,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="stringliteral">"You should check if an entity has the component "</span> +</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="stringliteral">"before removing it."</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  );</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  replaceComponent(index, <span class="keyword">null</span>);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"></span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> /// Replaces an existing component at the specified index</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment"> /// or adds it if it doesn't exist yet.</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"> /// The prefered way is to use the</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment"> /// generated methods from the code generator.</span></div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#adf6272815f51c3ca69115c62772836df"> 174</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#adf6272815f51c3ca69115c62772836df">ReplaceComponent</a>(<span class="keywordtype">int</span> index, <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a> component) {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">if</span> (!_isEnabled) {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_is_not_enabled_exception.html">EntityIsNotEnabledException</a>(</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="stringliteral">"Cannot replace component '"</span> +</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' on "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  );</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">HasComponent</a>(index)) {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  replaceComponent(index, component);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (component != <span class="keyword">null</span>) {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="class_entitas_1_1_entity.html#a684593bfe766e01ff4776bfbf841156a">AddComponent</a>(index, component);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordtype">void</span> replaceComponent(<span class="keywordtype">int</span> index, <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a> replacement) {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// _toStringCache = null;</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  var previousComponent = _components[index];</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (replacement != previousComponent) {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  _components[index] = replacement;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  _componentsCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (replacement != <span class="keyword">null</span>) {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a>(</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">this</span>, index, previousComponent, replacement</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  );</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  _componentIndicesCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  _toStringCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887">OnComponentRemoved</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887">OnComponentRemoved</a>(<span class="keyword">this</span>, index, previousComponent);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7">GetComponentPool</a>(index).Push(previousComponent);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a>(</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">this</span>, index, previousComponent, replacement</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  );</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"></span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"> /// Returns a component at the specified index.</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment"> /// You can only get a component at an index if it exists.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment"> /// The prefered way is to use the</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment"> /// generated methods from the code generator.</span></div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a193c4b6412a24c9461424b060ab15506"> 229</a></span> <span class="comment"></span> <span class="keyword">public</span> <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a> <a class="code" href="class_entitas_1_1_entity.html#a193c4b6412a24c9461424b060ab15506">GetComponent</a>(<span class="keywordtype">int</span> index) {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (!<a class="code" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">HasComponent</a>(index)) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_does_not_have_component_exception.html">EntityDoesNotHaveComponentException</a>(</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  index, <span class="stringliteral">"Cannot get component '"</span> +</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  _contextInfo.componentNames[index] + <span class="stringliteral">"' from "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span>,</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="stringliteral">"You should check if an entity has the component "</span> +</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="stringliteral">"before getting it."</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  );</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> _components[index];</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment"></span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> /// Returns all added components.</span></div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a78627b36ab878dde662b3d8267641ef2"> 243</a></span> <span class="comment"></span> <span class="keyword">public</span> <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a>[] <a class="code" href="class_entitas_1_1_entity.html#a78627b36ab878dde662b3d8267641ef2">GetComponents</a>() {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">if</span> (_componentsCache == <span class="keyword">null</span>) {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < _components.Length; i++) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  var component = _components[i];</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span> (component != <span class="keyword">null</span>) {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  _componentBuffer.Add(component);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  _componentsCache = _componentBuffer.ToArray();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  _componentBuffer.Clear();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">return</span> _componentsCache;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment"></span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment"> /// Returns all indices of added components.</span></div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a1cdd88f321c07186540515ed37d07d85"> 260</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">int</span>[] <a class="code" href="class_entitas_1_1_entity.html#a1cdd88f321c07186540515ed37d07d85">GetComponentIndices</a>() {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (_componentIndicesCache == <span class="keyword">null</span>) {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < _components.Length; i++) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">if</span> (_components[i] != <span class="keyword">null</span>) {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  _indexBuffer.Add(i);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  _componentIndicesCache = _indexBuffer.ToArray();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  _indexBuffer.Clear();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> _componentIndicesCache;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment"></span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment"> /// Determines whether this entity has a component</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment"> /// at the specified index.</span></div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03"> 277</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code" href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">HasComponent</a>(<span class="keywordtype">int</span> index) {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> _components[index] != <span class="keyword">null</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment"></span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"> /// Determines whether this entity has components</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment"> /// at all the specified indices.</span></div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#aee5ffe85bc1fa4fb5dc21c0a13058ffe"> 283</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code" href="class_entitas_1_1_entity.html#aee5ffe85bc1fa4fb5dc21c0a13058ffe">HasComponents</a>(<span class="keywordtype">int</span>[] indices) {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < indices.Length; i++) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span> (_components[indices[i]] == <span class="keyword">null</span>) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"> /// Determines whether this entity has a component</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"> /// at any of the specified indices.</span></div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a9e941463e3273213aee9a6d1071a8d6d"> 295</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code" href="class_entitas_1_1_entity.html#a9e941463e3273213aee9a6d1071a8d6d">HasAnyComponent</a>(<span class="keywordtype">int</span>[] indices) {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < indices.Length; i++) {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (_components[indices[i]] != <span class="keyword">null</span>) {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment"></span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment"> /// Removes all components.</span></div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ae7bf22d8069c034a06268910c683a625"> 306</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#ae7bf22d8069c034a06268910c683a625">RemoveAllComponents</a>() {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  _toStringCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < _components.Length; i++) {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">if</span> (_components[i] != <span class="keyword">null</span>) {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  replaceComponent(i, <span class="keyword">null</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment"></span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment"> /// Returns the componentPool for the specified component index.</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment"> /// componentPools is set by the context which created the entity and</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment"> /// is used to reuse removed components.</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> /// Removed components will be pushed to the componentPool.</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment"> /// Use entity.CreateComponent(index, type) to get a new or</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment"> /// reusable component from the componentPool.</span></div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7"> 321</a></span> <span class="comment"></span> <span class="keyword">public</span> Stack<IComponent> <a class="code" href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7">GetComponentPool</a>(<span class="keywordtype">int</span> index) {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  var componentPool = _componentPools[index];</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (componentPool == <span class="keyword">null</span>) {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  componentPool = <span class="keyword">new</span> Stack<IComponent>();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  _componentPools[index] = componentPool;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">return</span> componentPool;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment"></span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment"> /// Returns a new or reusable component from the componentPool</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment"> /// for the specified component index.</span></div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a244cbd513f258aa8778198e8270dde06"> 333</a></span> <span class="comment"></span> <span class="keyword">public</span> <a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a> <a class="code" href="class_entitas_1_1_entity.html#a244cbd513f258aa8778198e8270dde06">CreateComponent</a>(<span class="keywordtype">int</span> index, Type type) {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  var componentPool = <a class="code" href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7">GetComponentPool</a>(index);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> componentPool.Count > 0</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  ? componentPool.Pop()</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  : (<a class="code" href="interface_entitas_1_1_i_component.html">IComponent</a>)Activator.CreateInstance(type);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"></span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment"> /// Returns a new or reusable component from the componentPool</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"> /// for the specified component index.</span></div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#aa39f7df6971b2436c7775c71c6ab24bd"> 342</a></span> <span class="comment"></span> <span class="keyword">public</span> T <a class="code" href="class_entitas_1_1_entity.html#aa39f7df6971b2436c7775c71c6ab24bd">CreateComponent<T></a>(<span class="keywordtype">int</span> index) where T : <span class="keyword">new</span>() {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  var componentPool = <a class="code" href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7">GetComponentPool</a>(index);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">return</span> componentPool.Count > 0 ? (T)componentPool.Pop() : <span class="keyword">new</span> T();</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment"></span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment"> /// Returns the number of objects that retain this entity.</span></div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a55d42d47d2678137c14a693f2039cd6c"> 348</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="class_entitas_1_1_entity.html#a55d42d47d2678137c14a693f2039cd6c">retainCount</a> { <span class="keyword">get</span> { <span class="keywordflow">return</span> _aerc.retainCount; } }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment"></span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment"> /// Retains the entity. An owner can only retain the same entity once.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment"> /// Retain/Release is part of AERC (Automatic Entity Reference Counting)</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment"> /// and is used internally to prevent pooling retained entities.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment"> /// If you use retain manually you also have to</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment"> /// release it manually at some point.</span></div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a9fc81e2607c8ee24521d9b27019ef328"> 355</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#a9fc81e2607c8ee24521d9b27019ef328">Retain</a>(<span class="keywordtype">object</span> owner) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  _aerc.Retain(owner);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">// _toStringCache = null;</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment"></span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment"> /// Releases the entity. An owner can only release an entity</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment"> /// if it retains it.</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment"> /// Retain/Release is part of AERC (Automatic Entity Reference Counting)</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment"> /// and is used internally to prevent pooling retained entities.</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment"> /// If you use retain manually you also have to</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"> /// release it manually at some point.</span></div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#ad38c42d47e73ad68c4e93db53665aa61"> 368</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_entitas_1_1_entity.html#ad38c42d47e73ad68c4e93db53665aa61">Release</a>(<span class="keywordtype">object</span> owner) {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  _aerc.Release(owner);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="comment">// _toStringCache = null;</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">if</span> (_aerc.retainCount == 0) {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836">OnEntityReleased</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836">OnEntityReleased</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="comment">// Dispatches OnDestroyEntity which will start the destroy process.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (!_isEnabled) {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="class_entitas_1_1_entity_is_not_enabled_exception.html">EntityIsNotEnabledException</a>(<span class="stringliteral">"Cannot destroy "</span> + <span class="keyword">this</span> + <span class="stringliteral">"!"</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">if</span> (<a class="code" href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016">OnDestroyEntity</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016">OnDestroyEntity</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="comment">// This method is used internally. Don't call it yourself.</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="comment">// Use entity.Destroy();</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> InternalDestroy() {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  _isEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="class_entitas_1_1_entity.html#ae7bf22d8069c034a06268910c683a625">RemoveAllComponents</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928">OnComponentAdded</a> = <span class="keyword">null</span>;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">OnComponentReplaced</a> = <span class="keyword">null</span>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887">OnComponentRemoved</a> = <span class="keyword">null</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016">OnDestroyEntity</a> = <span class="keyword">null</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="comment">// Do not call this method manually. This method is called by the context.</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> RemoveAllOnEntityReleasedHandlers() {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836">OnEntityReleased</a> = <span class="keyword">null</span>;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"></span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> /// Returns a cached string to describe the entity</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> /// with the following format:</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"> /// Entity_{creationIndex}(*{retainCount})({list of components})</span></div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="class_entitas_1_1_entity.html#a062ae860c3528091f8c0fd5b88667694"> 411</a></span> <span class="comment"></span> <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">string</span> <a class="code" href="class_entitas_1_1_entity.html#a062ae860c3528091f8c0fd5b88667694">ToString</a>() {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">if</span> (_toStringCache == <span class="keyword">null</span>) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">if</span> (_toStringBuilder == <span class="keyword">null</span>) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  _toStringBuilder = <span class="keyword">new</span> StringBuilder();</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  _toStringBuilder.Length = 0;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  _toStringBuilder</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  .Append(<span class="stringliteral">"Entity_"</span>)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  .Append(_creationIndex)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">// .Append("(*")</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">// .Append(retainCount)</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment">// .Append(")")</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  .Append(<span class="stringliteral">"("</span>);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keyword">const</span> <span class="keywordtype">string</span> separator = <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  var components = <a class="code" href="class_entitas_1_1_entity.html#a78627b36ab878dde662b3d8267641ef2">GetComponents</a>();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  var lastSeparator = components.Length - 1;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < components.Length; i++) {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  var component = components[i];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  var type = component.GetType();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="comment">// TODO VD PERFORMANCE</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  _toStringCache = <span class="keyword">null</span>;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">// var implementsToString = type.GetMethod("ToString")</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">// .DeclaringType.ImplementsInterface<IComponent>();</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">// _toStringBuilder.Append(</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// implementsToString</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="comment">// ? component.ToString()</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// : type.ToCompilableString().RemoveComponentSuffix()</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// );</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  _toStringBuilder.Append(component.ToString());</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">if</span> (i < lastSeparator) {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  _toStringBuilder.Append(separator);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  _toStringBuilder.Append(<span class="stringliteral">")"</span>);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  _toStringCache = _toStringBuilder.ToString();</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">return</span> _toStringCache;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div><div class="ttc" id="class_entitas_1_1_entity_html_ae8347b174468c55c485e0265254d9c91"><div class="ttname"><a href="class_entitas_1_1_entity.html#ae8347b174468c55c485e0265254d9c91">Entitas.Entity.contextInfo</a></div><div class="ttdeci">ContextInfo contextInfo</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00060">Entity.cs:60</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a55d42d47d2678137c14a693f2039cd6c"><div class="ttname"><a href="class_entitas_1_1_entity.html#a55d42d47d2678137c14a693f2039cd6c">Entitas.Entity.retainCount</a></div><div class="ttdeci">int retainCount</div><div class="ttdoc">Returns the number of objects that retain this entity.</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00348">Entity.cs:348</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a83ffb44d61d4c3c137bd9377c0866e6a"><div class="ttname"><a href="class_entitas_1_1_entity.html#a83ffb44d61d4c3c137bd9377c0866e6a">Entitas.Entity.OnComponentReplaced</a></div><div class="ttdeci">EntityComponentReplaced OnComponentReplaced</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00025">Entity.cs:25</a></div></div>
<div class="ttc" id="namespace_entitas_html"><div class="ttname"><a href="namespace_entitas.html">Entitas</a></div><div class="ttdef"><b>Definition:</b> <a href="_collector_8cs_source.html#l00005">Collector.cs:5</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a684593bfe766e01ff4776bfbf841156a"><div class="ttname"><a href="class_entitas_1_1_entity.html#a684593bfe766e01ff4776bfbf841156a">Entitas.Entity.AddComponent</a></div><div class="ttdeci">void AddComponent(int index, IComponent component)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00120">Entity.cs:120</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_aee5ffe85bc1fa4fb5dc21c0a13058ffe"><div class="ttname"><a href="class_entitas_1_1_entity.html#aee5ffe85bc1fa4fb5dc21c0a13058ffe">Entitas.Entity.HasComponents</a></div><div class="ttdeci">bool HasComponents(int[] indices)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00283">Entity.cs:283</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_ae32e6949d12be079ed24181dca78f928"><div class="ttname"><a href="class_entitas_1_1_entity.html#ae32e6949d12be079ed24181dca78f928">Entitas.Entity.OnComponentAdded</a></div><div class="ttdeci">EntityComponentChanged OnComponentAdded</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00015">Entity.cs:15</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a74d478839ed98c58f9ea1d84157ed016"><div class="ttname"><a href="class_entitas_1_1_entity.html#a74d478839ed98c58f9ea1d84157ed016">Entitas.Entity.OnDestroyEntity</a></div><div class="ttdeci">EntityEvent OnDestroyEntity</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00035">Entity.cs:35</a></div></div>
<div class="ttc" id="interface_entitas_1_1_i_a_e_r_c_html"><div class="ttname"><a href="interface_entitas_1_1_i_a_e_r_c.html">Entitas.IAERC</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_a_e_r_c_8cs_source.html#l00003">IAERC.cs:3</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a16e5c42416751abe64cfd86a9b9da887"><div class="ttname"><a href="class_entitas_1_1_entity.html#a16e5c42416751abe64cfd86a9b9da887">Entitas.Entity.OnComponentRemoved</a></div><div class="ttdeci">EntityComponentChanged OnComponentRemoved</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00020">Entity.cs:20</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_ad3deee62c9a0392eea6b93e5356f9107"><div class="ttname"><a href="class_entitas_1_1_entity.html#ad3deee62c9a0392eea6b93e5356f9107">Entitas.Entity.totalComponents</a></div><div class="ttdeci">int totalComponents</div><div class="ttdoc">The total amount of components an entity can possibly have.</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00038">Entity.cs:38</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_acdb078412aafe639f6990b8a98bcd836"><div class="ttname"><a href="class_entitas_1_1_entity.html#acdb078412aafe639f6990b8a98bcd836">Entitas.Entity.OnEntityReleased</a></div><div class="ttdeci">EntityEvent OnEntityReleased</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00030">Entity.cs:30</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a1b1726bdfa1fbcee8e0f2541bc9f1e84"><div class="ttname"><a href="class_entitas_1_1_entity.html#a1b1726bdfa1fbcee8e0f2541bc9f1e84">Entitas.Entity.aerc</a></div><div class="ttdeci">IAERC aerc</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00066">Entity.cs:66</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html"><div class="ttname"><a href="class_entitas_1_1_entity.html">Entitas.Entity</a></div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00010">Entity.cs:10</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a9e941463e3273213aee9a6d1071a8d6d"><div class="ttname"><a href="class_entitas_1_1_entity.html#a9e941463e3273213aee9a6d1071a8d6d">Entitas.Entity.HasAnyComponent</a></div><div class="ttdeci">bool HasAnyComponent(int[] indices)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00295">Entity.cs:295</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a244cbd513f258aa8778198e8270dde06"><div class="ttname"><a href="class_entitas_1_1_entity.html#a244cbd513f258aa8778198e8270dde06">Entitas.Entity.CreateComponent</a></div><div class="ttdeci">IComponent CreateComponent(int index, Type type)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00333">Entity.cs:333</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a062ae860c3528091f8c0fd5b88667694"><div class="ttname"><a href="class_entitas_1_1_entity.html#a062ae860c3528091f8c0fd5b88667694">Entitas.Entity.ToString</a></div><div class="ttdeci">override string ToString()</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00411">Entity.cs:411</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_is_not_enabled_exception_html"><div class="ttname"><a href="class_entitas_1_1_entity_is_not_enabled_exception.html">Entitas.EntityIsNotEnabledException</a></div><div class="ttdef"><b>Definition:</b> <a href="_entity_is_not_enabled_exception_8cs_source.html#l00003">EntityIsNotEnabledException.cs:3</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a193c4b6412a24c9461424b060ab15506"><div class="ttname"><a href="class_entitas_1_1_entity.html#a193c4b6412a24c9461424b060ab15506">Entitas.Entity.GetComponent</a></div><div class="ttdeci">IComponent GetComponent(int index)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00229">Entity.cs:229</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a78627b36ab878dde662b3d8267641ef2"><div class="ttname"><a href="class_entitas_1_1_entity.html#a78627b36ab878dde662b3d8267641ef2">Entitas.Entity.GetComponents</a></div><div class="ttdeci">IComponent [] GetComponents()</div><div class="ttdoc">Returns all added components.</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00243">Entity.cs:243</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a9fc81e2607c8ee24521d9b27019ef328"><div class="ttname"><a href="class_entitas_1_1_entity.html#a9fc81e2607c8ee24521d9b27019ef328">Entitas.Entity.Retain</a></div><div class="ttdeci">void Retain(object owner)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00355">Entity.cs:355</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a1cdd88f321c07186540515ed37d07d85"><div class="ttname"><a href="class_entitas_1_1_entity.html#a1cdd88f321c07186540515ed37d07d85">Entitas.Entity.GetComponentIndices</a></div><div class="ttdeci">int [] GetComponentIndices()</div><div class="ttdoc">Returns all indices of added components.</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00260">Entity.cs:260</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_adf6272815f51c3ca69115c62772836df"><div class="ttname"><a href="class_entitas_1_1_entity.html#adf6272815f51c3ca69115c62772836df">Entitas.Entity.ReplaceComponent</a></div><div class="ttdeci">void ReplaceComponent(int index, IComponent component)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00174">Entity.cs:174</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a30a8ae77453c6878d45f3c1cbe31bb03"><div class="ttname"><a href="class_entitas_1_1_entity.html#a30a8ae77453c6878d45f3c1cbe31bb03">Entitas.Entity.HasComponent</a></div><div class="ttdeci">bool HasComponent(int index)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00277">Entity.cs:277</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a6fe0a1767dd738efda0dfb787ad9aaa7"><div class="ttname"><a href="class_entitas_1_1_entity.html#a6fe0a1767dd738efda0dfb787ad9aaa7">Entitas.Entity.GetComponentPool</a></div><div class="ttdeci">Stack< IComponent > GetComponentPool(int index)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00321">Entity.cs:321</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a93e43dc3a3668ca457db9d3609405ff9"><div class="ttname"><a href="class_entitas_1_1_entity.html#a93e43dc3a3668ca457db9d3609405ff9">Entitas.Entity.isEnabled</a></div><div class="ttdeci">bool isEnabled</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00046">Entity.cs:46</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_already_has_component_exception_html"><div class="ttname"><a href="class_entitas_1_1_entity_already_has_component_exception.html">Entitas.EntityAlreadyHasComponentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_entity_already_has_component_exception_8cs_source.html#l00003">EntityAlreadyHasComponentException.cs:3</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_ad38c42d47e73ad68c4e93db53665aa61"><div class="ttname"><a href="class_entitas_1_1_entity.html#ad38c42d47e73ad68c4e93db53665aa61">Entitas.Entity.Release</a></div><div class="ttdeci">void Release(object owner)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00368">Entity.cs:368</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_ae7bf22d8069c034a06268910c683a625"><div class="ttname"><a href="class_entitas_1_1_entity.html#ae7bf22d8069c034a06268910c683a625">Entitas.Entity.RemoveAllComponents</a></div><div class="ttdeci">void RemoveAllComponents()</div><div class="ttdoc">Removes all components.</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00306">Entity.cs:306</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a35644f781a2567877dade3e39932e405"><div class="ttname"><a href="class_entitas_1_1_entity.html#a35644f781a2567877dade3e39932e405">Entitas.Entity.creationIndex</a></div><div class="ttdeci">int creationIndex</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00042">Entity.cs:42</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_does_not_have_component_exception_html"><div class="ttname"><a href="class_entitas_1_1_entity_does_not_have_component_exception.html">Entitas.EntityDoesNotHaveComponentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_entity_does_not_have_component_exception_8cs_source.html#l00003">EntityDoesNotHaveComponentException.cs:3</a></div></div>
<div class="ttc" id="interface_entitas_1_1_i_entity_html"><div class="ttname"><a href="interface_entitas_1_1_i_entity.html">Entitas.IEntity</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_entity_8cs_source.html#l00016">IEntity.cs:16</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_a288fdf38196ce4d54597f08bf5989a19"><div class="ttname"><a href="class_entitas_1_1_entity.html#a288fdf38196ce4d54597f08bf5989a19">Entitas.Entity.RemoveComponent</a></div><div class="ttdeci">void RemoveComponent(int index)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00150">Entity.cs:150</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_ab8bb69649e83e05c595d006d205f11b2"><div class="ttname"><a href="class_entitas_1_1_entity.html#ab8bb69649e83e05c595d006d205f11b2">Entitas.Entity.componentPools</a></div><div class="ttdeci">Stack< IComponent > [] componentPools</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00055">Entity.cs:55</a></div></div>
<div class="ttc" id="interface_entitas_1_1_i_component_html"><div class="ttname"><a href="interface_entitas_1_1_i_component.html">Entitas.IComponent</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_component_8cs_source.html#l00013">IComponent.cs:13</a></div></div>
<div class="ttc" id="class_entitas_1_1_entity_html_aa39f7df6971b2436c7775c71c6ab24bd"><div class="ttname"><a href="class_entitas_1_1_entity.html#aa39f7df6971b2436c7775c71c6ab24bd">Entitas.Entity.CreateComponent< T ></a></div><div class="ttdeci">T CreateComponent< T >(int index)</div><div class="ttdef"><b>Definition:</b> <a href="_entity_8cs_source.html#l00342">Entity.cs:342</a></div></div>
<div class="ttc" id="class_entitas_1_1_context_info_html"><div class="ttname"><a href="class_entitas_1_1_context_info.html">Entitas.ContextInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_context_info_8cs_source.html#l00005">ContextInfo.cs:5</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_2445fa600638ca0377a838c43b60c5d0.html">Entitas</a></li><li class="navelem"><a class="el" href="dir_18d0583636d1f7adc70f46fa7dc6fd22.html">Entitas</a></li><li class="navelem"><a class="el" href="dir_5543b9a49e90eab7737309dc8736a9ee.html">Entity</a></li><li class="navelem"><b>Entity.cs</b></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>