File: CastleItems.TItemResource.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 (317 lines) | stat: -rw-r--r-- 20,637 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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
<!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: CastleItems: Class TItemResource</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="TItemResource"></a><h1 class="cio">Class TItemResource</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="CastleItems.html">CastleItems</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TItemResource = class(<a class="normal" href="CastleResources.T3DResource.html">T3DResource</a>)</code></p>
<h2 class="description">Description</h2>
<p>
Basic resource of an item that can be picked up, used and such.

<p>A &quot;resource&quot; is an information shared by all items of given type, for example you can have two instances of class <code>TItemResource</code>: Sword and LifePotion. (Actually, <a class="normal" href="CastleItems.TItemWeaponResource.html">TItemWeaponResource</a>, which is a descendant of <code>TItemResource</code>, sounds like a better candidate for the Sword.) Using them, you can create milions of actual swords and life potions, and place them of your level (as well as in inventories of creatures able to carry items). Every life potion (<a class="normal" href="CastleItems.TInventoryItem.html">TInventoryItem</a> instance) may keep some individual information (for example, how much of the potion is already used/drunk), but all life potions will share the same <code>TItemResource</code> instance, so e.g. they all will be displayed using the same model on 3D level (<a class="normal" href="CastleItems.TItemResource.html#BaseAnimation">TItemResource.BaseAnimation</a>) and the same image in 2D inventory (<a class="normal" href="CastleItems.TItemResource.html#Image">TItemResource.Image</a>).</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TObject</li>
<li class="ancestor"><a class="normal" href="CastleResources.T3DResource.html">T3DResource</a></li>
<li class="thisitem">TItemResource</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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleItems.TItemResource.html#PrepareCore">PrepareCore</a></b>(const BaseLights: <a  href="Castle3D.html#TAbstractLightInstancesList">TAbstractLightInstancesList</a>; const GravityUp: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const DoProgress: boolean); override;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleItems.TItemResource.html#ReleaseCore">ReleaseCore</a></b>; override;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleItems.TItemResource.html#ItemClass">ItemClass</a></b>: <a  href="CastleItems.html#TInventoryItemClass">TInventoryItemClass</a>; virtual;</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>constructor <b><a  href="CastleItems.TItemResource.html#Create">Create</a></b>(const AName: string); override;</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>destructor <b><a  href="CastleItems.TItemResource.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="CastleItems.TItemResource.html#LoadFromFile">LoadFromFile</a></b>(ResourceConfig: <a  href="CastleXMLConfig.TCastleConfig.html">TCastleConfig</a>); override;</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="CastleItems.TItemResource.html#GLContextClose">GLContextClose</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>function <b><a  href="CastleItems.TItemResource.html#Image">Image</a></b>: <a  href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</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>function <b><a  href="CastleItems.TItemResource.html#GLImage">GLImage</a></b>: <a  href="CastleGLImages.TGLImage.html">TGLImage</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>function <b><a  href="CastleItems.TItemResource.html#CreateItem">CreateItem</a></b>(const AQuantity: Cardinal): <a  href="CastleItems.TInventoryItem.html">TInventoryItem</a>;</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="CastleItems.TItemResource.html#InstantiatePlaceholder">InstantiatePlaceholder</a></b>(World: <a  href="Castle3D.T3DWorld.html">T3DWorld</a>; const APosition, ADirection: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const NumberPresent: boolean; const Number: Int64); 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>function <b><a  href="CastleItems.TItemResource.html#AlwaysPrepared">AlwaysPrepared</a></b>: boolean; override;</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="CastleItems.TItemResource.html#Caption">Caption</a></b>: string read FCaption;</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="CastleItems.TItemResource.html#BaseAnimation">BaseAnimation</a></b>: <a  href="CastleResources.T3DResourceAnimation.html">T3DResourceAnimation</a> read FBaseAnimation;</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>property <b><a  href="CastleItems.TItemResource.html#ImageURL">ImageURL</a></b>: string read FImageURL;</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="CastleItems.TItemResource.html#BoundingBoxRotated">BoundingBoxRotated</a></b>: <a  href="CastleBoxes.TBox3D.html">TBox3D</a> read FBoundingBoxRotated;</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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="PrepareCore"></a><code>procedure <b>PrepareCore</b>(const BaseLights: <a  href="Castle3D.html#TAbstractLightInstancesList">TAbstractLightInstancesList</a>; const GravityUp: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const DoProgress: boolean); 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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ReleaseCore"></a><code>procedure <b>ReleaseCore</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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ItemClass"></a><code>function <b>ItemClass</b>: <a  href="CastleItems.html#TInventoryItemClass">TInventoryItemClass</a>; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Which <a class="normal" href="CastleItems.TInventoryItem.html">TInventoryItem</a> descendant to create when constructing item of this resource by <a class="normal" href="CastleItems.TItemResource.html#CreateItem">CreateItem</a>.</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="Create"></a><code>constructor <b>Create</b>(const AName: string); 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="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="LoadFromFile"></a><code>procedure <b>LoadFromFile</b>(ResourceConfig: <a  href="CastleXMLConfig.TCastleConfig.html">TCastleConfig</a>); 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="GLContextClose"></a><code>procedure <b>GLContextClose</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="Image"></a><code>function <b>Image</b>: <a  href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
2D image representing an item, to be used when showing inventory and such. The core engine itself doesn't use it, and doesn't force anything about such image (whether it should have some specific size, whether it should have alpha channel and such). It is up to the final game to make use of these images.

<p>If you're wondering how to generate such image: one option is to open the item 3D model in [<a  href="http://castle-engine.sourceforge.net/view3dscene.php">http://castle-engine.sourceforge.net/view3dscene.php</a>] and use &quot;Display -&gt; Screenshot ...&quot; menu option (maybe the one that makes transparent background). It is usually a good idea to also remember the camera used for such screenshot with &quot;Console -&gt; Print Current Camera (Viewpoint)...&quot; menu option.</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="GLImage"></a><code>function <b>GLImage</b>: <a  href="CastleGLImages.TGLImage.html">TGLImage</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
OpenGL resource to draw <a class="normal" href="CastleItems.TItemResource.html#Image">Image</a>.</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="CreateItem"></a><code>function <b>CreateItem</b>(const AQuantity: Cardinal): <a  href="CastleItems.TInventoryItem.html">TInventoryItem</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Create item. This is how you should create new <a class="normal" href="CastleItems.TInventoryItem.html">TInventoryItem</a> instances. It is analogous to <a class="normal" href="CastleCreatures.TCreatureResource.html#CreateCreature">TCreatureResource.CreateCreature</a>, but now for items.

<p>Note that the item itself doesn't exist on a 3D world &mdash; you have to put it there if you want by <a class="normal" href="CastleItems.TInventoryItem.html#PutOnWorld">TInventoryItem.PutOnWorld</a>. That is because items can also exist only in player's backpack and such, and then they are independent from 3D world.

<p><b>Examples:</b>

<p>You usually define your own item resources by adding a subdirectory with resource.xml file to your game data. See [<a  href="http://castle-engine.sourceforge.net/creating_data_resources.php">http://castle-engine.sourceforge.net/creating_data_resources.php</a>] and engine tutorial for examples how to do this. Then you load the item resources with

<p></p>

<pre class="longcode">
<span class="pascal_keyword">var</span>
  Sword: TItemResource;
<span class="pascal_numeric"></span>...
  Resources.LoadFromFiles;
  Sword := Resources.FindName(<span class="pascal_string">'Sword'</span>) <span class="pascal_keyword">as</span> TItemResource;
</pre>

<p>

<p>where 'Sword' is just our example item resource, assuming that one of your resource.xml files has resource with name=&quot;Sword&quot;.

<p>Now if you want to add the sword to your 3D world by code:

<p>Because <a class="normal" href="CastleItems.TInventoryItem.html">TInventoryItem</a> instance is automatically owned (freed) by the 3D world or inventory that contains it, a simplest example how to add an item to your 3D world is this:

<p></p>

<pre class="longcode">
  Sword.CreateItem(<span class="pascal_numeric">1</span>).PutOnWorld(SceneManager.World, Vector3Single(<span class="pascal_numeric">2</span>, <span class="pascal_numeric">3</span>, <span class="pascal_numeric">4</span>));
</pre>

<p>

<p>This adds 1 item of the MyItemResource to the 3D world, on position (2, 3, 4). In simple cases you can get SceneManager instance from <a class="normal" href="CastleWindow.TCastleWindow.html#SceneManager">TCastleWindow.SceneManager</a> or <a class="normal" href="CastleControl.TCastleControl.html#SceneManager">TCastleControl.SceneManager</a>.

<p>If you want to instead add sword to the inventory of Player, you can call

<p></p>

<pre class="longcode">
  SceneManager.Player.PickItem(Sword.CreateItem(<span class="pascal_numeric">1</span>));
</pre>

<p>

<p>This assumes that you use SceneManager.Player property. It's not really obligatory, but it's the simplest way to have player with an inventory. See engine tutorial for examples how to create player. Anyway, if you have any <a class="normal" href="CastleItems.TInventory.html">TInventory</a> instance, you can use <a class="normal" href="CastleItems.TInventory.html#Pick">TInventory.Pick</a> to add <a class="normal" href="CastleItems.TInventoryItem.html">TInventoryItem</a> this way.</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="InstantiatePlaceholder"></a><code>procedure <b>InstantiatePlaceholder</b>(World: <a  href="Castle3D.T3DWorld.html">T3DWorld</a>; const APosition, ADirection: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const NumberPresent: boolean; const Number: Int64); override;</code></td>
</tr>
<tr><td colspan="2">
<p>
Instantiate placeholder by create new item with <a class="normal" href="CastleItems.TItemResource.html#CreateItem">CreateItem</a> and putting it on level with <a class="normal" href="CastleItems.TInventoryItem.html#PutOnWorld">TInventoryItem.PutOnWorld</a>.</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="AlwaysPrepared"></a><code>function <b>AlwaysPrepared</b>: boolean; override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</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="Caption"></a><code>property <b>Caption</b>: string read FCaption;</code></td>
</tr>
<tr><td colspan="2">
<p>
Nice caption to display.</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="BaseAnimation"></a><code>property <b>BaseAnimation</b>: <a  href="CastleResources.T3DResourceAnimation.html">T3DResourceAnimation</a> read FBaseAnimation;</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="ImageURL"></a><code>property <b>ImageURL</b>: string read FImageURL;</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="BoundingBoxRotated"></a><code>property <b>BoundingBoxRotated</b>: <a  href="CastleBoxes.TBox3D.html">TBox3D</a> read FBoundingBoxRotated;</code></td>
</tr>
<tr><td colspan="2">
<p>
The largest possible bounding box of the 3D item, taking into account that actual item 3D model will be rotated when placed on world. You usually want to add current item position to this.</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>