-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc-how-to-create-mappingtype.html
337 lines (325 loc) · 16.8 KB
/
doc-how-to-create-mappingtype.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
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
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="icon" href="images/TotalAILogoTrans32.png" type="image/x-icon">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600|Roboto Mono&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Goldman&display=swap" rel="stylesheet">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<link rel="stylesheet" href="main.css">
<title>Total AI</title>
</head>
<body>
<nav class="navbar sticky-top tai-navbar">
<a class="navbar-brand" style="margin-top: -8px; margin-bottom: -8px;" href="index.html">
<img src="images/TotalAILogoTrans.png" height="40" alt="" loading="lazy">
</a>
<ul class="nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="index.html">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link active" href="doc-introduction.html">Guide</a>
</li>
<li class="nav-item">
<a class="nav-link" href="insp-introduction.html">Inspectors</a>
</li>
<li class="nav-item">
<a class="nav-link" href="script-introduction.html">Scripts</a>
</li>
<li class="nav-item">
<a class="nav-link" href="videos.html">Videos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contributors.html">Contributors</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">About</a>
</li>
<li class="nav-item" style="padding-left: 25px;">
<a class="nav-link" href="contrib-introduction.html">Contribute</a>
</li>
</ul>
<ul class="nav justify-content-end">
<li class="nav-item">
<a class="nav-link" target="_blank" href="https://discord.gg/PfKUm42Zax">
Discord
<svg width="1em" height="1em" viewBox="0 0 20 20" class="bi bi-box-arrow-up-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5z"/>
<path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0v-5z"/>
</svg>
</a>
</li>
<li class="nav-item">
<a class="nav-link" target="_blank" href="https://github.com/TotalAI/TotalAI">
GitHub
<svg width="1em" height="1em" viewBox="0 0 20 20" class="bi bi-box-arrow-up-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5z"/>
<path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0v-5z"/>
</svg>
</a>
</li>
<li class="nav-item">
<a class="nav-link" target="_blank" href="https://patreon.com/zacwarren">
Patreon
<svg width="1em" height="1em" viewBox="0 0 20 20" class="bi bi-box-arrow-up-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5z"/>
<path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0v-5z"/>
</svg>
</a>
</li>
</ul>
</nav>
<main style="width: 100%">
<div class="container-fluid">
<div class="row flex-xl-nowrap">
<div class="col-md-3 col-xl-2" style="position: sticky; top: 0; z-index: 1000; height: calc(100vh - 4rem); order: 0; overflow-y: auto; padding-top: 10px; padding-bottom: 40px;">
<h3 class="nav-header">Read First</h3>
<ul class="nav flex-column navbar-light">
<li class="nav-item">
<a class="nav-link" href="doc-getting-started.html">Getting Started</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-getting-started.html">Introduction</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-installation.html">Installation</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-main-editor-window.html">Main Editor Window</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-demo-scenes.html">Demo Scenes</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-quick-overview.html">Quick Overview</a>
</li>
</ul>
<h3 class="nav-header">How Tos</h3>
<ul class="nav flex-column navbar-light">
<li class="nav-item">
<a class="nav-link active" href="doc-how-to-create-agent.html">Create</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-agent.html">Agent</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-worldobject.html">World Object</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link active" href="doc-how-to-create-mappingtype.html">MappingType</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-genericmappingtype.html">GenericMappingType</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-ict.html">InputConditionType</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-oct.html">OutputChangeType</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-how-to-create-targetfactor.html">TargetFactor</a>
</li>
</ul>
<h3 class="nav-header">Type System</h3>
<ul class="nav flex-column navbar-light">
<li class="nav-item">
<a class="nav-link" href="doc-base-types.html">Base Types</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-agenttype.html">Entity Types</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-agenttype.html">Agent Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-worldobjecttype.html">World Object Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-areatype.html">Area Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-agenteventtype.html">Agent Event Type</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-drivetype.html">Level Types</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-drivetype.html">Drive Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-actiontype.html">Action Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-itemtype.html">Item Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-attributetype.html">Attribute Type</a>
</li>
<li class="nav-item">
<a class="nav-link sub-link" href="doc-traittype.html">Trait Type</a>
</li>
</ul>
<h3 class="nav-header">In-Depth</h3>
<ul class="nav flex-column navbar-light">
<li class="nav-item">
<a class="nav-link" href="doc-design-principles.html">Design Principles</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-scriptableobjects.html">ScriptableObjects</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-selector.html">Selector</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-agent.html">Agent</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-behavior.html">Behavior</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-movement.html">Movement</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-animation.html">Animation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-sensor.html">Sensor</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-memory.html">Memory</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-decidertype.html">DeciderType</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-plannertype.html">PlannerType</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-mapping.html">Mapping</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-plan.html">Plan</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-goap.html">GOAP</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Utility AI</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">FSM</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">DeepRL</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-3rd-party.html">3rd Party Integrations</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doc-more-resources.html">More Resources</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">API Documentation</a>
</li>
</ul>
</div>
<div class="col-md-1">
</div>
<div class="col-md-6 col-8 content" style="padding-top: 40px; padding-bottom: 40px; line-height: 1.6em; color: #304455; font-size: 1rem;">
<h1>How To Create a MappingType (MT)</h1>
<h3>Consider a GenericMappingType (GMT) Instead</h3>
<hr>
<p>
Consider if it makes more sense to create GMT. A GMT is a ScriptableObject that generates MTs in bulk.
You will most likely also want to read this as a GMT is similar to an MT.
<br><br>
Check out
<a class="text-link" href="doc-how-to-create-genericmappingtype.html">How To Create An GMT</a> for more information.
</p>
<h3>Figure Out ICTs and OCTs</h3>
<hr>
<p>
An InputConditionType (ICT) defines the logic of an InputCondition (IC) and similarily an OutputChangeType (OCT)
defines the logic of an OutputChange (OC). Specifically a subclass of ICT must override the <b>Check</b> method which
returns true if the Agent can perform the IC or false if the Agent cannot perform it. The main method to override
for a subclass of OCT is the <b>Change</b> method. This tries to actually make the change and returns true or false
depending on if it was able to make the change.
<br><br>
To start creating you MappingType see if TAI comes with ICTs and OCTs that work for your MappingType. If not read
<a class="text-link" href="doc-how-to-create-ict.html">How To Create An ICT</a> and/or
<a class="text-link" href="doc-how-to-create-oct.html">How To Create An OCT</a>.
</p>
<h3>Create MappingType Asset</h3>
<hr>
<p>
First create the MappingType asset by right clicking in the project directory you want to the MappingType to
reside in and selecting "Total AI -> MappingType". In TAI demos all of the MappingTypes go in
"Assets/ScriptableObjects/MappingType/". You can also find a similar MappingType and copy/duplicate it.
</p>
<h3>Add ICs and OCs</h3>
<hr>
<p>
Once you know the ICTs and OCTs for your MappingType adding in the ICs and OCs is straight forward. The ICTs and OCTs should properly
setup the EditorHelp class so that only the fields they use show up in the Inspector. Fill in these fields.
<br><br>
For ICs there are two multi-IC conditions. The EntityType ICs must all be last and they must all be for the same EntityType.
The Editor will warn you if either of these conditions are not met.
</p>
<h3>Select ActionType</h3>
<hr>
<p>
Every MappingType has to be attached to an <a class="text-link" href="doc-actiontype.html">ActionType</a>.
This allows an Agent to perform the MappingType if it can perform the ActionType.
It will also define the <a class="text-link" href="doc-behavior.html">BehaviorType</a> that should run for this
MappingType. The BehaviorType is a field on ActionType.
</p>
<h3>Blacklist or Whitelist AgentTypes</h3>
<hr>
<p>
Normally an Agent of AgentType will be able to perform any MappingTypes attached to the ActionTypes that are listed
in the AgentType. This feature allows you to either blacklist, block, certain AgentTypes or whitelist, only AgentTypes
on the list can perform it, certain AgentTypes. This filtering occurs during Agent initialization, when the
MappingTypes are added to the Agent from the AgentType's default ActionTypes. See Agent.ResetActionTypesAndActionLevels.
</p>
<h3>If For EntityType - Select TargetFactors and GoToActionType</h3>
<hr>
TargetFactors determine which Entity to target if there are multiple possible targets. Add these based on how you want the Agent
to prioritize a target. If you want to create a new TargetFactor read
<a class="text-link" href="doc-how-to-create-targetfactor.html">How To Create a TargetFactor</a>.
<br><br>
If there are multiple TargetFactors you can supply a weight for each TargetFactor. The weights are normalized. For example if you
have two TargetFactors, one with a weight of 0.5 and one with a weight of 1.0, the first one will count for 0.5/1.5 = 1/3 and the
second one for 1.0/1.5 = 2/3.
<br><br>
If there is at least one EntityType IC, you must also provide a GoToActionType. This will be used for moving the Agent to the correct
interaction distance of the target Entity.
<p>
</p>
</div>
<div class="col-md-3 col-1">
</div>
</div>
</main>
<script>
$(document).ready(function() {
$(window).resize(function() {
resize();
});
function resize() {
var myheight = $(window).outerHeight(true) - 0;
$('.main').outerHeight(myheight);
}
resize();
});
</script>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>