diff options
Diffstat (limited to 'manuals/chickadee/Agendas.html')
-rw-r--r-- | manuals/chickadee/Agendas.html | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/manuals/chickadee/Agendas.html b/manuals/chickadee/Agendas.html deleted file mode 100644 index 51be160..0000000 --- a/manuals/chickadee/Agendas.html +++ /dev/null @@ -1,223 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<!-- Copyright (C) 2017-2023 David Thompson dthompson2@worcester.edu - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 -or any later version published by the Free Software Foundation; -with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. -A copy of the license is included in the section entitled "GNU -Free Documentation License". - -A copy of the license is also available from the Free Software -Foundation Web site at http://www.gnu.org/licenses/fdl.html. - - -* Chickadee: (chickadee). Game programming toolkit for Guile. - -The document was typeset with -http://www.texinfo.org/ (GNU Texinfo). - --> -<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ --> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<title>Agendas (The Chickadee Game Toolkit)</title> - -<meta name="description" content="Agendas (The Chickadee Game Toolkit)" /> -<meta name="keywords" content="Agendas (The Chickadee Game Toolkit)" /> -<meta name="resource-type" content="document" /> -<meta name="distribution" content="global" /> -<meta name="Generator" content="makeinfo" /> -<link href="index.html" rel="start" title="Top" /> -<link href="Index.html" rel="index" title="Index" /> -<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents" /> -<link href="Scripting.html" rel="up" title="Scripting" /> -<link href="Scripts.html" rel="next" title="Scripts" /> -<link href="Scripting.html" rel="prev" title="Scripting" /> -<style type="text/css"> -<!-- -a.summary-letter {text-decoration: none} -blockquote.indentedblock {margin-right: 0em} -div.display {margin-left: 3.2em} -div.example {margin-left: 3.2em} -div.lisp {margin-left: 3.2em} -kbd {font-style: oblique} -pre.display {font-family: inherit} -pre.format {font-family: inherit} -pre.menu-comment {font-family: serif} -pre.menu-preformatted {font-family: serif} -span.nolinebreak {white-space: nowrap} -span.roman {font-family: initial; font-weight: normal} -span.sansserif {font-family: sans-serif; font-weight: normal} -ul.no-bullet {list-style: none} -@media (min-width: 1140px) { - body { - margin-left: 14rem; - margin-right: 4rem; - max-width: 52rem; - } -} - -@media (min-width: 800px) and (max-width: 1140px) { - body { - margin-left: 6rem; - margin-right: 4rem; - max-width: 52rem; - } -} - -@media (max-width: 800px) { - body { - margin: 1rem; - } -} - ---> -</style> -<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css" /> - - -</head> - -<body lang="en"> -<span id="Agendas"></span><div class="header"> -<p> -Next: <a href="Scripts.html" accesskey="n" rel="next">Scripts</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p> -</div> -<hr /> -<span id="Agendas-1"></span><h4 class="subsection">5.5.1 Agendas</h4> - -<p>To schedule a task to be performed later, an “agenda” is used. -There is a default, global agenda that is ready to be used, or -additional agendas may be created for different purposes. The -following example prints the text “hello” when the agenda has -advanced to time unit 10. -</p> -<div class="lisp"> -<pre class="lisp"><span class="syntax-open">(</span><span class="syntax-symbol">at</span> <span class="syntax-symbol">10</span> <span class="syntax-open">(</span><span class="syntax-symbol">display</span> <span class="syntax-string">"hello\n"</span><span class="syntax-close">)</span><span class="syntax-close">)</span> -</pre></div> - -<p>Most of the time it is more convenient to schedule tasks relative to -the current time. This is where <code>after</code> comes in handy: -</p> -<div class="lisp"> -<pre class="lisp"><span class="syntax-open">(</span><span class="syntax-symbol">after</span> <span class="syntax-symbol">10</span> <span class="syntax-open">(</span><span class="syntax-symbol">display</span> <span class="syntax-string">"hello\n"</span><span class="syntax-close">)</span><span class="syntax-close">)</span> -</pre></div> - -<p>Time units in the agenda are in no way connected to real time. It’s -up to the programmer to decide what agenda time means. A simple and -effective approach is to map each call of the update procedure -(see <a href="Kernel.html">Kernel</a>) to 1 unit of agenda time, like so: -</p> -<div class="lisp"> -<pre class="lisp"><span class="syntax-open">(</span><span class="syntax-special">define</span> <span class="syntax-open">(</span><span class="syntax-symbol">update</span> <span class="syntax-symbol">dt</span><span class="syntax-close">)</span> - <span class="syntax-open">(</span><span class="syntax-symbol">update-agenda</span> <span class="syntax-symbol">1</span><span class="syntax-close">)</span><span class="syntax-close">)</span> -</pre></div> - -<p>It is important to call <code>update-agenda</code> periodically, otherwise -no tasks will ever be run! -</p> -<p>In addition to using the global agenda, it is useful to have multiple -agendas for different purposes. For example, the game world can use a -different agenda than the user interface, so that pausing the game is -a simple matter of not updating the world’s agenda while continuing to -update the user interface’s agenda. The current agenda is dynamically -scoped and can be changed using the <code>with-agenda</code> special form: -</p> -<div class="lisp"> -<pre class="lisp"><span class="syntax-open">(</span><span class="syntax-special">define</span> <span class="syntax-symbol">game-world-agenda</span> <span class="syntax-open">(</span><span class="syntax-symbol">make-agenda</span><span class="syntax-close">)</span><span class="syntax-close">)</span> - -<span class="syntax-open">(</span><span class="syntax-symbol">with-agenda</span> <span class="syntax-symbol">game-world-agenda</span> - <span class="syntax-open">(</span><span class="syntax-symbol">at</span> <span class="syntax-symbol">60</span> <span class="syntax-open">(</span><span class="syntax-symbol">spawn-goblin</span><span class="syntax-close">)</span><span class="syntax-close">)</span> - <span class="syntax-open">(</span><span class="syntax-symbol">at</span> <span class="syntax-symbol">120</span> <span class="syntax-open">(</span><span class="syntax-symbol">spawn-goblin</span><span class="syntax-close">)</span><span class="syntax-close">)</span> - <span class="syntax-open">(</span><span class="syntax-symbol">at</span> <span class="syntax-symbol">240</span> <span class="syntax-open">(</span><span class="syntax-symbol">spawn-goblin-king</span><span class="syntax-close">)</span><span class="syntax-close">)</span><span class="syntax-close">)</span> -</pre></div> - -<dl> -<dt id="index-make_002dagenda">Procedure: <strong>make-agenda</strong></dt> -<dd><p>Return a new task scheduler. -</p></dd></dl> - -<dl> -<dt id="index-agenda_003f">Procedure: <strong>agenda?</strong> <em>obj</em></dt> -<dd><p>Return <code>#t</code> if <var>obj</var> is an agenda. -</p></dd></dl> - -<dl> -<dt id="index-current_002dagenda">Procedure: <strong>current-agenda</strong></dt> -<dt id="index-current_002dagenda-1">Procedure: <strong>current-agenda</strong> <em>agenda</em></dt> -<dd><p>When called with no arguments, return the current agenda. When called -with one argument, set the current agenda to <var>agenda</var>. -</p></dd></dl> - -<dl> -<dt id="index-with_002dagenda">Syntax: <strong>with-agenda</strong> <em>agenda body …</em></dt> -<dd><p>Evaluate <var>body</var> with the current agenda set to <var>agenda</var>. -</p></dd></dl> - -<dl> -<dt id="index-agenda_002dtime">Procedure: <strong>agenda-time</strong></dt> -<dd><p>Return the current agenda time. -</p></dd></dl> - -<dl> -<dt id="index-update_002dagenda">Procedure: <strong>update-agenda</strong> <em>dt</em></dt> -<dd><p>Advance the current agenda by <var>dt</var>. -</p></dd></dl> - -<dl> -<dt id="index-schedule_002dat">Procedure: <strong>schedule-at</strong> <em>time thunk</em></dt> -<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run at -<var>time</var>. -</p></dd></dl> - -<dl> -<dt id="index-schedule_002dafter">Procedure: <strong>schedule-after</strong> <em>delay thunk</em></dt> -<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run after -<var>delay</var>. -</p></dd></dl> - -<dl> -<dt id="index-schedule_002devery">Procedure: <strong>schedule-every</strong> <em>interval thunk [n]</em></dt> -<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run every -<var>interval</var> amount of time. Repeat this <var>n</var> times, or -indefinitely if not specified. -</p></dd></dl> - -<dl> -<dt id="index-at">Syntax: <strong>at</strong> <em>time body …</em></dt> -<dd><p>Schedule <var>body</var> to be evaluated at <var>time</var>. -</p></dd></dl> - -<dl> -<dt id="index-after">Syntax: <strong>after</strong> <em>delay body …</em></dt> -<dd><p>Schedule <var>body</var> to be evaluated after <var>delay</var>. -</p></dd></dl> - -<dl> -<dt id="index-every">Syntax: <strong>every</strong> <em>interval body …</em></dt> -<dt id="index-every-1">Syntax: <strong>every</strong> <em>(interval n) body …</em></dt> -<dd><p>Schedule <var>body</var> to be evaluated every <var>interval</var> amount of -time. Repeat this <var>n</var> times, or indefinitely if not specified. -</p></dd></dl> - -<p>It is also possible to schedule things that are not dependent on how -much time passes. The agenda will periodically poll to see if any -registered conditions are met. -</p> -<dl> -<dt id="index-call_002dwhen">Procedure: <strong>call-when</strong> <em>pred thunk</em></dt> -<dd><p>Call <var>thunk</var> sometime in the future when <var>pred</var> is satisfied -(returns a value other than <code>#f</code>.) -</p></dd></dl> - -<hr /> -<div class="header"> -<p> -Next: <a href="Scripts.html" accesskey="n" rel="next">Scripts</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p> -</div> - - - -</body> -</html> |