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
|
<!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: X3DTime: record TX3DTime</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="TX3DTime"></a><h1 class="cio">record TX3DTime</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td>Hierarchy</td><td><a class="section" href="#PasDoc-Fields">Fields</a></td><td>Methods</td><td>Properties</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a href="X3DTime.html">X3DTime</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TX3DTime = record</code></p>
<h2 class="description">Description</h2>
<p>
Complete timestamp for X3D events. For most purposes, you're interested only in it's <a class="normal" href="X3DTime.TX3DTime.html#Seconds">Seconds</a> field, this is the amount of continous time that passed (in double-precision seconds).
<p>More precisely, timestamp is actually a sum of <i>Seconds + <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> ticks</i>. <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> is the number of discrete "ticks" that occurred with the same Seconds value. A tick is, conceptually, an infinitely small amount of time.
<p>Ticks are used when comparing time values: when two timestamps have the same <a class="normal" href="X3DTime.TX3DTime.html#Seconds">Seconds</a> value, then we can compare the <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> field. Timestamps are equal only when both Seconds and <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> values are exactly equal.
<p>The practical justification of <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> usage:
<p></p>
<ol class="paragraph_spacing">
<li value="1"><p>First, note that X3D standard defines that within one timestamp, only one event may pass through one route. This mechanism allows to avoid loops in routes.</p></li>
<li value="2"><p>Now note that when using <a class="normal" href="CastleSceneCore.TCastleSceneCore.html">TCastleSceneCore</a>, Seconds is increased by <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#IncreaseTime">TCastleSceneCore.IncreaseTime</a>. <a class="normal" href="CastleSceneCore.TCastleSceneCore.html">TCastleSceneCore</a> doesn't require how often should IncreaseTime be called, in particular you can call multiple times <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a>, <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Release">TCastleSceneCore.Release</a>, <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#PointingDeviceMove">TCastleSceneCore.PointingDeviceMove</a> without continously updating time. You can even not update time at all, and still call <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> and such.
<p>This is a good thing — it allows <a class="normal" href="CastleSceneCore.TCastleSceneCore.html">TCastleSceneCore</a> to be very flexible. The idea is that sensors are activated when user interface reports some event. You don't have to update time before every <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> and such.</p></li>
<li value="3"><p>The potential problem here is that when you call <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> twice, without the <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#IncreaseTime">TCastleSceneCore.IncreaseTime</a> in between, then the second <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> events will have "clogged" routes. Events send from the second <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> may be blocked on routes, since they will be detected as occuring within the same timestamp, so (following VRML/X3D standard) they'll have to be ignored.</p></li>
<li value="4"><p>Using "Seconds seconds + <a class="normal" href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a> ticks" allows to avoid this. Each <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> and such increases world time by 1 tick – this way, the second <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Press">TCastleSceneCore.Press</a> will have one more tick, so will always be considered later, and things will work Ok.</p></li>
</ol>
<p></p>
<h2 class="overview">Overview</h2>
<a name="PasDoc-Fields"></a><h3 class="summary">Fields</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a href="X3DTime.TX3DTime.html#Seconds">Seconds</a></b>: <a href="X3DTime.html#TFloatTime">TFloatTime</a>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a href="X3DTime.TX3DTime.html#PlusTicks">PlusTicks</a></b>: Cardinal;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Fields</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Seconds"></a><code><b>Seconds</b>: <a href="X3DTime.html#TFloatTime">TFloatTime</a>;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="PlusTicks"></a><code><b>PlusTicks</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="1">
</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&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:18</em>
</span>
</td></tr></table></body></html>
|