File: CastleLevels.TGameSceneManager.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (179 lines) | stat: -rw-r--r-- 14,099 bytes parent folder | download
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleLevels: Class TGameSceneManager</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TGameSceneManager"></a><h1 class="cio">Class TGameSceneManager</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td>Fields</td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td><a class="section" href="#PasDoc-Properties">Properties</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="CastleLevels.html">CastleLevels</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TGameSceneManager = class(<a class="normal" href="CastleSceneManager.TCastleSceneManager.html">TCastleSceneManager</a>)</code></p>
<h2 class="description">Description</h2>
<p>
Scene manager that can comfortably load and manage a 3D game level. It really adds only one new method to <a class="normal" href="CastleSceneManager.TCastleSceneManager.html">TCastleSceneManager</a>: <a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a>, see it's documentation to know what it gives you. It also exposes <a class="normal" href="CastleLevels.TGameSceneManager.html#Logic">Logic</a> and <a class="normal" href="CastleLevels.TGameSceneManager.html#Info">Info</a> properties corresponding to the currently loaded level.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TComponent</li>
<li class="ancestor"><a class="normal" href="CastleUIControls.TInputListener.html">TInputListener</a></li>
<li class="ancestor"><a class="normal" href="CastleUIControls.TUIControl.html">TUIControl</a></li>
<li class="ancestor"><a class="normal" href="CastleUIControls.TUIRectangularControl.html">TUIRectangularControl</a></li>
<li class="ancestor"><a class="normal" href="CastleSceneManager.TCastleAbstractViewport.html">TCastleAbstractViewport</a></li>
<li class="ancestor"><a class="normal" href="CastleSceneManager.TCastleSceneManager.html">TCastleSceneManager</a></li>
<li class="thisitem">TGameSceneManager</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>destructor <b><a  href="CastleLevels.TGameSceneManager.html#Destroy">Destroy</a></b>; override;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a></b>(const LevelName: string);</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a></b>(const AInfo: <a  href="CastleLevels.TLevelInfo.html">TLevelInfo</a>);</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleLevels.TGameSceneManager.html#UnloadLevel">UnloadLevel</a></b>;</code></td>
</tr>
</table>
<a name="PasDoc-Properties"></a><h3 class="summary">Properties</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleLevels.TGameSceneManager.html#Logic">Logic</a></b>: <a  href="CastleLevels.TLevelLogic.html">TLevelLogic</a> read FLogic;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleLevels.TGameSceneManager.html#Info">Info</a></b>: <a  href="CastleLevels.TLevelInfo.html">TLevelInfo</a> read FInfo;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Destroy"></a><code>destructor <b>Destroy</b>; override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="LoadLevel"></a><code>procedure <b>LoadLevel</b>(const LevelName: string);</code></td>
</tr>
<tr><td colspan="2">
<p>
Load game level.

<p></p>

<ul class="paragraph_spacing">
  <li><p><b>Set scene manager 3D items</b>:

<p>Clear all 3D items from <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#Items">TCastleSceneManager.Items</a> list (except <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#Player">TCastleSceneManager.Player</a>), clear <a class="normal" href="CastleSceneManager.TCastleAbstractViewport.html#Camera">Camera</a> and <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#MainScene">TCastleSceneManager.MainScene</a> as well. Then load a new main scene and camera, adding to <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#Items">TCastleSceneManager.Items</a> all 3D resources (creatures and items) defined by placeholders named CasRes* in the main level 3D file.</p></li>
  <li><p><b>Make sure 3D resources are ready:</b>

<p>Resources are <a class="normal" href="CastleResources.T3DResource.html">T3DResource</a> instances on <a class="normal" href="CastleResources.html#Resources">Resources</a> list. They are heavy (in terms of memory use and preparation time), so you don't want to just load everything for every level. This method makes sure that all resources required by this level are prepared. All resources requested in level.xml file (in &lt;resources&gt; element in level.xml), as well as resources requested in player.xml file, as well as resources with AlwaysPrepared (usually: all possible items that can be dropped from player inventory on any level) will be prepared.</p></li>
  <li><p><b>Initialize move limits and water volume from placeholders</b>. Special object names CasMoveLimit and CasWater (in the future: CasWater* with any suffix) in the main scene 3D model determine the places where player can go and where water is.

<p>When CasMoveLimit object is missing, we calculate it to include the level bounding box, with some additional space above (to allow flying).</p></li>
  <li><p><b>Initialize sectors and waypoints from placeholders</b>. Special shape names CasSector* and CasWaypoint* can be used in level 3D model to help creature AI. You can add and name such shapes in 3D modeler, like Blender, and they will be automatically understood by the engine when loading level.

<p>Objects named CasSector&lt;index&gt;[_&lt;ignored&gt;] define sectors. The geometry of a sector with given &lt;index&gt; is set to be the sum of all CasSector&lt;index&gt;* boxes. Sectors are numbered from 0.

<p>Objects named CasWaypoint[&lt;ignored&gt;] define waypoints. Each waypoint is stored as a 3D point, this point is the middle of the bounding box of the object named CasWaypoint[&lt;ignored&gt;].

<p>After extracting from level 3D model, sectors and waypoints are then connected together by <a class="normal" href="CastleSectors.TSectorList.html#LinkToWaypoints">TSectorList.LinkToWaypoints</a>. The idea is that you can go from one sector to the other through the waypoint that is placed on the border of both of them.</p></li>
  <li><p><b>Prepare everything possible for rendering and collision detection</b> to avoid later preparing things on-demand (which would cause unpleasant delay during gameplay). E.g. prepares octree and OpenGL resources.</p></li>
</ul>

<p>

<p>The overloaded version with a LevelName string searches the <a class="normal" href="CastleLevels.html#Levels">Levels</a> list for a level with given name (and raises exception if it cannot be found). It makes sense if you filled the <a class="normal" href="CastleLevels.html#Levels">Levels</a> list before, usually by <a class="normal" href="CastleLevels.TLevelInfoList.html#LoadFromFiles">Levels.LoadFromFiles</a> call. So you can easily define a level in your data with <code>name=&quot;xxx&quot;</code> in the <code>level.xml</code> file, and then you can load it by <code><a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a>('xxx')</code> call.

<p>It's important to note that <b>you do not have to use this method to make a 3D game</b>. You may as well just load the 3D scene yourself, and add things to <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#Items">TCastleSceneManager.Items</a> and <a class="normal" href="CastleSceneManager.TCastleSceneManager.html#MainScene">TCastleSceneManager.MainScene</a> directly. This method is just a very comfortable way to set your 3D world in one call &mdash; but it's not the only way.

<p></p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="LoadLevel"></a><code>procedure <b>LoadLevel</b>(const AInfo: <a  href="CastleLevels.TLevelInfo.html">TLevelInfo</a>);</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="UnloadLevel"></a><code>procedure <b>UnloadLevel</b>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Release everything loaded by <a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a>, clearing the 3D world (only Player is left).

<p>You do not have to call this in normal circumstances, as each <a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a> automatically clears previous 3D world. If fact, you should not call this in normal circumstances: calling this prevents the next <a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a> to reuse resources that were needed by both old and new level.

<p>Call this only if you really want to conserve memory <i>right now</i>. Or when you want to force reload of resources at next <a class="normal" href="CastleLevels.TGameSceneManager.html#LoadLevel">LoadLevel</a> call (for example, if you changed <a class="normal" href="CastlePrecalculatedAnimation.html#AnimationSmoothness">AnimationSmoothness</a>, it is useful &mdash; otherwise the old animations will remain loaded with old <a class="normal" href="CastlePrecalculatedAnimation.html#AnimationSmoothness">AnimationSmoothness</a> setting).</p>
</td></tr>
</table>
<h3 class="detail">Properties</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Logic"></a><code>property <b>Logic</b>: <a  href="CastleLevels.TLevelLogic.html">TLevelLogic</a> read FLogic;</code></td>
</tr>
<tr><td colspan="2">
<p>
Level logic and state.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Info"></a><code>property <b>Info</b>: <a  href="CastleLevels.TLevelInfo.html">TLevelInfo</a> read FInfo;</code></td>
</tr>
<tr><td colspan="2">
<p>
Level information, independent from current level state.</p>
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:10</em>
</span>
</td></tr></table></body></html>