File: CastleInputs.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 (151 lines) | stat: -rw-r--r-- 11,181 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
<!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: CastleInputs</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">
<h1 class="unit">Unit CastleInputs</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Uses">Uses</a></td><td><a class="section" href="#PasDoc-Classes">Classes, Interfaces, Objects and Records</a></td><td>Functions and Procedures</td><td><a class="section" href="#PasDoc-Types">Types</a></td><td>Constants</td><td><a class="section" href="#PasDoc-Variables">Variables</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Key and mouse shortcuts (<a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a>) and global management of them.

<p><a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instance represents a key/mouse shortcut. Instances of this class are spread throughout the engine. We have two different ways of using <a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instance:

<p></p>

<ul class="paragraph_spacing">
  <li><p> <b>Global</b>

<p><a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instance with <a class="normal" href="CastleInputs.TInputShortcut.html#Group">TInputShortcut.Group</a> &lt;&gt; igLocal is called &quot;global&quot;. Such instance is automatically (at construction) added to <a class="normal" href="CastleInputs.html#InputsAll">InputsAll</a> and <a class="normal" href="CastleInputs.html#InputsGroup">InputsGroup</a>[Group] lists.

<p>The purpose of such global input map is to be able to detect key conflicts, be able to restore whole input map to default, load/save them to the user config file, and so on. All shortcuts used in a typical 3D game, with normal <a class="normal" href="CastleLevels.html">CastleLevels</a> and <a class="normal" href="CastlePlayer.html">CastlePlayer</a> usage, are global.

<p>Global shortcuts are owned (they will be freed by) this unit (more specifically, they will be freed by <a class="normal" href="CastleInputs.html#InputsAll">InputsAll</a>). When creating them, pass <code>Nil</code> to the Owner parameter of constructor <a class="normal" href="CastleInputs.TInputShortcut.html#Create">TInputShortcut.Create</a>. This implies that <a class="normal" href="CastleInputs.html#InputsAll">InputsAll</a> and <a class="normal" href="CastleInputs.html#InputsGroup">InputsGroup</a>[Group] lists will never shrink, which is useful &mdash; once added, shortcuts will not disappear. Global <a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instances are always in practice also global variables.

<p>For example <a class="normal" href="CastleSceneManager.html">CastleSceneManager</a> unit contains <a class="normal" href="CastleSceneManager.html#Input_Interact">Input_Interact</a>. For example <a class="normal" href="CastlePlayer.html">CastlePlayer</a> contains many inputs. </p></li>
  <li><p> <b>Local</b>

<p><a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instance with <a class="normal" href="CastleInputs.TInputShortcut.html#Group">TInputShortcut.Group</a> = igLocal is called &quot;local&quot;. Basically, it means it's a normal component, it's not magically present on any global list, it's not magically managed by any list.

<p>For example <a class="normal" href="CastleCameras.TWalkCamera.html">TWalkCamera</a> contains a number of them like <a class="normal" href="CastleCameras.TWalkCamera.html#Input_Forward">TWalkCamera.Input_Forward</a>.

<p>Although it seems like &quot;global&quot; inputs are such a good idea, there are some reasons for having some inputs &quot;local&quot;:

<p></p>

<ul class="compact_spacing">
  <li><p>You can set them locally, obviously, not program-wide.</p></li>
  <li><p>You can set them from Lazarus object inspector e.g. for cameras.</p></li>
  <li><p>We cannot add shortcuts of both <a class="normal" href="CastleCameras.TExamineCamera.html">TExamineCamera</a> and <a class="normal" href="CastleCameras.TWalkCamera.html">TWalkCamera</a> to global, as they would conflict (e.g. &quot;up arrow key&quot; is used by both by default). The <a class="normal" href="CastleInputs.html#InputsAll">InputsAll</a> doesn't have (for now) any mechanism to indicate that only one of the cameras will be in practice used for a given <a class="normal" href="CastleSceneManager.TCastleSceneManager.html">TCastleSceneManager</a>.</p></li>
  <li><p>We cannot add shortcuts of <a class="normal" href="CastleCameras.TCamera.html">TCamera</a> descendants also because <a class="normal" href="CastlePlayer.html">CastlePlayer</a> has shortcuts that override camera shortcuts. One day this problem may disappear, when <a class="normal" href="CastlePlayer.TPlayer.html">TPlayer</a> and <a class="normal" href="CastleCameras.TCamera.html">TCamera</a> will become integrated more.</p></li>
</ul>

<p> </p></li>
</ul>

<p>

<p>You create new inputs by simply constructing new <a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instances. Make sure you add all global inputs before calling <code>Config.Load</code>, as some functionality assumes that all shortcuts are already added at the time <code>Config.Load</code> is called. The engine units themselves never call <code>Config.Load</code>, it is left to the final application.

<p>This unit also defines new <a class="normal" href="CastleScript.html">CastleScript</a> function: <code>shortcut</code>, see [<a  href="http://castle-engine.sourceforge.net/castle_script.php#function_shortcut">http://castle-engine.sourceforge.net/castle_script.php#function_shortcut</a>].</p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li><a  href="CastleKeysMouse.html">CastleKeysMouse</a></li><li><a  href="CastleUtils.html">CastleUtils</a></li><li><a  href="CastleClassUtils.html">CastleClassUtils</a></li><li>Classes</li><li>FGL</li><li><a  href="CastleConfig.html">CastleConfig</a></li><li><a  href="CastleScript.html">CastleScript</a></li><li><a  href="CastleUIControls.html">CastleUIControls</a></li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Classes"></a><h3 class="cio">Classes, Interfaces, Objects and Records</h3>
<table class="classestable wide_list">
<tr class="listheader">
<th class="itemname">Name</th>
<th class="itemdesc">Description</th>
</tr>
<tr class="list">
<td class="itemname">Class&nbsp;<a class="bold" href="CastleInputs.TInputShortcut.html"><code>TInputShortcut</code></a></td>
<td class="itemdesc">A keyboard and/or mouse shortcut for activating some action.</td>
</tr>
<tr class="list2">
<td class="itemname">Class&nbsp;<a class="bold" href="CastleInputs.TInputShortcutList.html"><code>TInputShortcutList</code></a></td>
<td class="itemdesc">TODO: Maybe introduce a way to limit (<a class="normal" href="CastleKeysMouse.html#TKey">TKey</a>, or all shortcuts?) to activate only when specific modifier is pressed.</td>
</tr>
</table>
<a name="PasDoc-Types"></a><h3 class="summary">Types</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleInputs.html#TInputGroup">TInputGroup</a></b> = (...);</code></td>
</tr>
</table>
<a name="PasDoc-Variables"></a><h3 class="summary">Variables</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleInputs.html#InputsAll">InputsAll</a></b>: <a  href="CastleInputs.TInputShortcutList.html">TInputShortcutList</a>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a  href="CastleInputs.html#InputsGroup">InputsGroup</a></b>: array [igBasic..High(<a  href="CastleInputs.html#TInputGroup">TInputGroup</a>)] of <a  href="CastleInputs.TInputShortcutList.html">TInputShortcutList</a>;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Types</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TInputGroup"></a><code><b>TInputGroup</b> = (...);</code></td>
</tr>
<tr><td colspan="1">
&nbsp;<h6 class="description_section">Values</h6>
<ul>
<li>
igLocal: &nbsp;</li>
<li>
igBasic: &nbsp;</li>
<li>
igItems: &nbsp;</li>
<li>
igOther: &nbsp;</li>
</ul>
</td></tr>
</table>
<h3 class="detail">Variables</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="InputsAll"></a><code><b>InputsAll</b>: <a  href="CastleInputs.TInputShortcutList.html">TInputShortcutList</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
List of all global inputs. Will be created in initialization and freed in finalization of this unit. All <a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> instances will automatically add to this.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="InputsGroup"></a><code><b>InputsGroup</b>: array [igBasic..High(<a  href="CastleInputs.html#TInputGroup">TInputGroup</a>)] of <a  href="CastleInputs.TInputShortcutList.html">TInputShortcutList</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</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>