Fixed oversights in collision code. More sound control.
[luagame.git] / doc / class_object.html
blobb3a4baee75be3af455019553ba72318b364e8a0b
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6 <meta name="generator" content="AsciiDoc 8.2.1" />
7 <style type="text/css">
8 /* Debug borders */
9 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
11 border: 1px solid red;
15 body {
16 margin: 1em 5% 1em 5%;
19 a {
20 color: blue;
21 text-decoration: underline;
23 a:visited {
24 color: fuchsia;
27 em {
28 font-style: italic;
31 strong {
32 font-weight: bold;
35 tt {
36 color: navy;
39 h1, h2, h3, h4, h5, h6 {
40 color: #527bbd;
41 font-family: sans-serif;
42 margin-top: 1.2em;
43 margin-bottom: 0.5em;
44 line-height: 1.3;
47 h1 {
48 border-bottom: 2px solid silver;
50 h2 {
51 border-bottom: 2px solid silver;
52 padding-top: 0.5em;
55 div.sectionbody {
56 font-family: serif;
57 margin-left: 0;
60 hr {
61 border: 1px solid silver;
64 p {
65 margin-top: 0.5em;
66 margin-bottom: 0.5em;
69 pre {
70 padding: 0;
71 margin: 0;
74 span#author {
75 color: #527bbd;
76 font-family: sans-serif;
77 font-weight: bold;
78 font-size: 1.1em;
80 span#email {
82 span#revision {
83 font-family: sans-serif;
86 div#footer {
87 font-family: sans-serif;
88 font-size: small;
89 border-top: 2px solid silver;
90 padding-top: 0.5em;
91 margin-top: 4.0em;
93 div#footer-text {
94 float: left;
95 padding-bottom: 0.5em;
97 div#footer-badges {
98 float: right;
99 padding-bottom: 0.5em;
102 div#preamble,
103 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
104 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
105 div.admonitionblock {
106 margin-right: 10%;
107 margin-top: 1.5em;
108 margin-bottom: 1.5em;
110 div.admonitionblock {
111 margin-top: 2.5em;
112 margin-bottom: 2.5em;
115 div.content { /* Block element content. */
116 padding: 0;
119 /* Block element titles. */
120 div.title, caption.title {
121 font-family: sans-serif;
122 font-weight: bold;
123 text-align: left;
124 margin-top: 1.0em;
125 margin-bottom: 0.5em;
127 div.title + * {
128 margin-top: 0;
131 td div.title:first-child {
132 margin-top: 0.0em;
134 div.content div.title:first-child {
135 margin-top: 0.0em;
137 div.content + div.title {
138 margin-top: 0.0em;
141 div.sidebarblock > div.content {
142 background: #ffffee;
143 border: 1px solid silver;
144 padding: 0.5em;
147 div.listingblock {
148 margin-right: 0%;
150 div.listingblock > div.content {
151 border: 1px solid silver;
152 background: #f4f4f4;
153 padding: 0.5em;
156 div.quoteblock > div.content {
157 padding-left: 2.0em;
160 div.attribution {
161 text-align: right;
163 div.verseblock + div.attribution {
164 text-align: left;
167 div.admonitionblock .icon {
168 vertical-align: top;
169 font-size: 1.1em;
170 font-weight: bold;
171 text-decoration: underline;
172 color: #527bbd;
173 padding-right: 0.5em;
175 div.admonitionblock td.content {
176 padding-left: 0.5em;
177 border-left: 2px solid silver;
180 div.exampleblock > div.content {
181 border-left: 2px solid silver;
182 padding: 0.5em;
185 div.verseblock div.content {
186 white-space: pre;
189 div.imageblock div.content { padding-left: 0; }
190 div.imageblock img { border: 1px solid silver; }
191 span.image img { border-style: none; }
193 dl {
194 margin-top: 0.8em;
195 margin-bottom: 0.8em;
197 dt {
198 margin-top: 0.5em;
199 margin-bottom: 0;
200 font-style: italic;
202 dd > *:first-child {
203 margin-top: 0;
206 ul, ol {
207 list-style-position: outside;
209 ol.olist2 {
210 list-style-type: lower-alpha;
213 div.tableblock > table {
214 border: 3px solid #527bbd;
216 thead {
217 font-family: sans-serif;
218 font-weight: bold;
220 tfoot {
221 font-weight: bold;
224 div.hlist {
225 margin-top: 0.8em;
226 margin-bottom: 0.8em;
228 div.hlist td {
229 padding-bottom: 5px;
231 td.hlist1 {
232 vertical-align: top;
233 font-style: italic;
234 padding-right: 0.8em;
236 td.hlist2 {
237 vertical-align: top;
240 @media print {
241 div#footer-badges { display: none; }
244 div#toctitle {
245 color: #527bbd;
246 font-family: sans-serif;
247 font-size: 1.1em;
248 font-weight: bold;
249 margin-top: 1.0em;
250 margin-bottom: 0.1em;
253 div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
254 margin-top: 0;
255 margin-bottom: 0;
257 div.toclevel2 {
258 margin-left: 2em;
259 font-size: 0.9em;
261 div.toclevel3 {
262 margin-left: 4em;
263 font-size: 0.9em;
265 div.toclevel4 {
266 margin-left: 6em;
267 font-size: 0.9em;
269 /* Workarounds for IE6's broken and incomplete CSS2. */
271 div.sidebar-content {
272 background: #ffffee;
273 border: 1px solid silver;
274 padding: 0.5em;
276 div.sidebar-title, div.image-title {
277 font-family: sans-serif;
278 font-weight: bold;
279 margin-top: 0.0em;
280 margin-bottom: 0.5em;
283 div.listingblock div.content {
284 border: 1px solid silver;
285 background: #f4f4f4;
286 padding: 0.5em;
289 div.quoteblock-content {
290 padding-left: 2.0em;
293 div.exampleblock-content {
294 border-left: 2px solid silver;
295 padding-left: 0.5em;
298 /* IE6 sets dynamically generated links as visited. */
299 div#toc a:visited { color: blue; }
300 </style>
301 <script type="text/javascript">
302 /*<![CDATA[*/
303 window.onload = function(){generateToc(2)}
304 /* Author: Mihai Bazon, September 2002
305 * http://students.infoiasi.ro/~mishoo
307 * Table Of Content generator
308 * Version: 0.4
310 * Feel free to use this script under the terms of the GNU General Public
311 * License, as long as you do not remove or alter this notice.
314 /* modified by Troy D. Hanson, September 2006. License: GPL */
315 /* modified by Stuart Rackham, October 2006. License: GPL */
317 function getText(el) {
318 var text = "";
319 for (var i = el.firstChild; i != null; i = i.nextSibling) {
320 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
321 text += i.data;
322 else if (i.firstChild != null)
323 text += getText(i);
325 return text;
328 function TocEntry(el, text, toclevel) {
329 this.element = el;
330 this.text = text;
331 this.toclevel = toclevel;
334 function tocEntries(el, toclevels) {
335 var result = new Array;
336 var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
337 // Function that scans the DOM tree for header elements (the DOM2
338 // nodeIterator API would be a better technique but not supported by all
339 // browsers).
340 var iterate = function (el) {
341 for (var i = el.firstChild; i != null; i = i.nextSibling) {
342 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
343 var mo = re.exec(i.tagName)
344 if (mo)
345 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
346 iterate(i);
350 iterate(el);
351 return result;
354 // This function does the work. toclevels = 1..4.
355 function generateToc(toclevels) {
356 var toc = document.getElementById("toc");
357 var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels);
358 for (var i = 0; i < entries.length; ++i) {
359 var entry = entries[i];
360 if (entry.element.id == "")
361 entry.element.id = "toc" + i;
362 var a = document.createElement("a");
363 a.href = "#" + entry.element.id;
364 a.appendChild(document.createTextNode(entry.text));
365 var div = document.createElement("div");
366 div.appendChild(a);
367 div.className = "toclevel" + entry.toclevel;
368 toc.appendChild(div);
371 /*]]>*/
372 </script>
373 <title>Object Class Reference</title>
374 </head>
375 <body>
376 <div id="header">
377 <h1>Object Class Reference</h1>
378 <div id="toc">
379 <div id="toctitle">Table of Contents</div>
380 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
381 </div>
382 </div>
383 <h2>1. Attributes</h2>
384 <div class="sectionbody">
385 <p><em>Italics</em> means private (in the sense that they shouldn't be set manually).</p>
386 <div class="tableblock">
387 <table rules="all"
388 frame="hsides"
389 cellspacing="0" cellpadding="4">
390 <col width="148" />
391 <col width="240" />
392 <thead>
393 <tr>
394 <th align="left">
395 Attribute
396 </th>
397 <th align="left">
398 Description
399 </th>
400 </tr>
401 </thead>
402 <tbody valign="top">
403 <tr>
404 <td align="left">
406 </td>
407 <td align="left">
408 x position (on screen)
409 </td>
410 </tr>
411 <tr>
412 <td align="left">
414 </td>
415 <td align="left">
416 y position (on screen)
417 </td>
418 </tr>
419 <tr>
420 <td align="left">
422 </td>
423 <td align="left">
424 width
425 </td>
426 </tr>
427 <tr>
428 <td align="left">
430 </td>
431 <td align="left">
432 height
433 </td>
434 </tr>
435 <tr>
436 <td align="left">
437 x_offset
438 </td>
439 <td align="left">
440 drawing offset
441 </td>
442 </tr>
443 <tr>
444 <td align="left">
445 y_offset
446 </td>
447 <td align="left">
448 drawing offset
449 </td>
450 </tr>
451 <tr>
452 <td align="left">
453 angle
454 </td>
455 <td align="left">
456 movement heading in degrees
457 </td>
458 </tr>
459 <tr>
460 <td align="left">
461 speed
462 </td>
463 <td align="left">
464 speed (in pixels/update)
465 </td>
466 </tr>
467 <tr>
468 <td align="left">
469 image
470 </td>
471 <td align="left">
472 image of the Object
473 </td>
474 </tr>
475 <tr>
476 <td align="left">
477 rects
478 </td>
479 <td align="left">
480 list of collision Rects
481 </td>
482 </tr>
483 <tr>
484 <td align="left">
485 type
486 </td>
487 <td align="left">
488 type of Object (for collision)
489 </td>
490 </tr>
491 <tr>
492 <td align="left">
493 max_updates
494 </td>
495 <td align="left">
496 maximum number of updates before Object self collects
497 </td>
498 </tr>
499 <tr>
500 <td align="left">
501 <em>num_updates</em>
502 </td>
503 <td align="left">
504 current number of updates
505 </td>
506 </tr>
507 <tr>
508 <td align="left">
509 <em>death_anim</em>
510 </td>
511 <td align="left">
512 flag for if Object is in death animation (affects collision)
513 </td>
514 </tr>
515 <tr>
516 <td align="left">
517 <em>collect</em>
518 </td>
519 <td align="left">
520 flag to indicate if an Object should be collected
521 </td>
522 </tr>
523 </tbody>
524 </table>
525 </div>
526 </div>
527 <h2>2. Methods</h2>
528 <div class="sectionbody">
529 <div class="tableblock">
530 <table rules="all"
531 frame="hsides"
532 cellspacing="0" cellpadding="4">
533 <col width="262" />
534 <col width="240" />
535 <thead>
536 <tr>
537 <th align="left">
538 Method
539 </th>
540 <th align="left">
541 Description
542 </th>
543 </tr>
544 </thead>
545 <tbody valign="top">
546 <tr>
547 <td align="left">
548 new(o)
549 </td>
550 <td align="left">
551 constructor
552 </td>
553 </tr>
554 <tr>
555 <td align="left">
556 update()
557 </td>
558 <td align="left">
559 updates the Object's state
560 </td>
561 </tr>
562 <tr>
563 <td align="left">
564 draw()
565 </td>
566 <td align="left">
567 draws the Object's image at (x, y)
568 </td>
569 </tr>
570 <tr>
571 <td align="left">
572 collide(ids, object)
573 </td>
574 <td align="left">
575 method executed upon collision (undefined for base class)
576 </td>
577 </tr>
578 <tr>
579 <td align="left">
580 get_center()
581 </td>
582 <td align="left">
583 returns the center coordinates of the Object
584 </td>
585 </tr>
586 <tr>
587 <td align="left">
588 set_origin()
589 </td>
590 <td align="left">
591 sets the drawing offset (sprite is offset by these amounts to the upper left)
592 </td>
593 </tr>
594 </tbody>
595 </table>
596 </div>
597 </div>
598 <h2>3. Usage</h2>
599 <div class="sectionbody">
600 <p>This class is not designed to be instantiated directly, instead it should be
601 extended and serve as the base for all in-game objects.
602 An example object definition is as follows:</p>
603 <div class="listingblock">
604 <div class="content"><!-- Generator: GNU source-highlight 2.4
605 by Lorenzo Bettini
606 http://www.lorenzobettini.it
607 http://www.gnu.org/software/src-highlite -->
608 <pre><tt>MyObj <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">Object:new</span></span><span style="color: #990000">()</span>
609 MyObj<span style="color: #990000">.</span>attr1 <span style="color: #990000">=</span> <span style="color: #993399">4</span>
610 MyObj<span style="color: #990000">.</span>attr2 <span style="color: #990000">=</span> <span style="color: #FF0000">"some value"</span>
612 <span style="font-style: italic"><span style="color: #9A1900">--constructor</span></span>
613 <span style="font-weight: bold"><span style="color: #0000FF">function</span></span> <span style="font-weight: bold"><span style="color: #000000">MyObj:new</span></span><span style="color: #990000">(</span>o<span style="color: #990000">)</span>
614 o <span style="color: #990000">=</span> o <span style="font-weight: bold"><span style="color: #0000FF">or</span></span> <span style="color: #FF0000">{}</span>
615 <span style="font-weight: bold"><span style="color: #000000">setmetatable</span></span><span style="color: #990000">(</span>o<span style="color: #990000">,</span> self<span style="color: #990000">)</span>
616 self<span style="color: #990000">.</span>__index <span style="color: #990000">=</span> self
617 <span style="font-weight: bold"><span style="color: #0000FF">return</span></span> o
618 <span style="font-weight: bold"><span style="color: #0000FF">end</span></span>
620 <span style="font-style: italic"><span style="color: #9A1900">--other methods defined here</span></span>
621 </tt></pre></div></div>
622 </div>
623 <div id="footer">
624 <div id="footer-text">
625 Last updated 18-Aug-2007 19:41:59 EDT
626 </div>
627 </div>
628 </body>
629 </html>