From 9224412274e1e1a31a959083bb257a7d6ab2b113 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 19 Aug 2016 20:40:12 -0400 Subject: Add Sly manual. --- haunt.scm | 3 +- manuals/sly/API-Reference.html | 96 ++++ manuals/sly/Agendas.html | 163 +++++++ manuals/sly/Booting.html | 88 ++++ manuals/sly/Cameras.html | 81 ++++ manuals/sly/Colors.html | 81 ++++ manuals/sly/Contributing.html | 89 ++++ manuals/sly/Copying-This-Manual.html | 86 ++++ manuals/sly/Coroutines.html | 134 ++++++ manuals/sly/Development-Environment.html | 91 ++++ manuals/sly/Easings.html | 129 ++++++ manuals/sly/Examples.html | 94 ++++ manuals/sly/Fonts.html | 81 ++++ manuals/sly/Framebuffers.html | 81 ++++ manuals/sly/GNU-Free-Documentation-License.html | 554 ++++++++++++++++++++++++ manuals/sly/Getting-Started.html | 82 ++++ manuals/sly/Index.html | 475 ++++++++++++++++++++ manuals/sly/Input.html | 94 ++++ manuals/sly/Installation.html | 98 +++++ manuals/sly/Introduction.html | 120 +++++ manuals/sly/Joystick.html | 188 ++++++++ manuals/sly/Keyboard.html | 137 ++++++ manuals/sly/Live-Reloading.html | 101 +++++ manuals/sly/Math.html | 101 +++++ manuals/sly/Miscellaneous.html | 189 ++++++++ manuals/sly/Miscellaneous_002dUtilities.html | 147 +++++++ manuals/sly/Mouse.html | 138 ++++++ manuals/sly/Quaternions.html | 185 ++++++++ manuals/sly/REPL.html | 107 +++++ manuals/sly/Rectangles.html | 262 +++++++++++ manuals/sly/Render-Combinators.html | 84 ++++ manuals/sly/Rendering.html | 108 +++++ manuals/sly/Requirements.html | 91 ++++ manuals/sly/Shaders.html | 80 ++++ manuals/sly/Shapes.html | 81 ++++ manuals/sly/Signals.html | 332 ++++++++++++++ manuals/sly/Sprites.html | 116 +++++ manuals/sly/Textures.html | 81 ++++ manuals/sly/The-Game-Loop.html | 114 +++++ manuals/sly/Time.html | 105 +++++ manuals/sly/Transforms.html | 236 ++++++++++ manuals/sly/Tweening.html | 101 +++++ manuals/sly/Tweens.html | 99 +++++ manuals/sly/Utilities.html | 90 ++++ manuals/sly/Vectors.html | 220 ++++++++++ manuals/sly/Window-Creation.html | 177 ++++++++ manuals/sly/index.html | 201 +++++++++ 47 files changed, 6590 insertions(+), 1 deletion(-) create mode 100644 manuals/sly/API-Reference.html create mode 100644 manuals/sly/Agendas.html create mode 100644 manuals/sly/Booting.html create mode 100644 manuals/sly/Cameras.html create mode 100644 manuals/sly/Colors.html create mode 100644 manuals/sly/Contributing.html create mode 100644 manuals/sly/Copying-This-Manual.html create mode 100644 manuals/sly/Coroutines.html create mode 100644 manuals/sly/Development-Environment.html create mode 100644 manuals/sly/Easings.html create mode 100644 manuals/sly/Examples.html create mode 100644 manuals/sly/Fonts.html create mode 100644 manuals/sly/Framebuffers.html create mode 100644 manuals/sly/GNU-Free-Documentation-License.html create mode 100644 manuals/sly/Getting-Started.html create mode 100644 manuals/sly/Index.html create mode 100644 manuals/sly/Input.html create mode 100644 manuals/sly/Installation.html create mode 100644 manuals/sly/Introduction.html create mode 100644 manuals/sly/Joystick.html create mode 100644 manuals/sly/Keyboard.html create mode 100644 manuals/sly/Live-Reloading.html create mode 100644 manuals/sly/Math.html create mode 100644 manuals/sly/Miscellaneous.html create mode 100644 manuals/sly/Miscellaneous_002dUtilities.html create mode 100644 manuals/sly/Mouse.html create mode 100644 manuals/sly/Quaternions.html create mode 100644 manuals/sly/REPL.html create mode 100644 manuals/sly/Rectangles.html create mode 100644 manuals/sly/Render-Combinators.html create mode 100644 manuals/sly/Rendering.html create mode 100644 manuals/sly/Requirements.html create mode 100644 manuals/sly/Shaders.html create mode 100644 manuals/sly/Shapes.html create mode 100644 manuals/sly/Signals.html create mode 100644 manuals/sly/Sprites.html create mode 100644 manuals/sly/Textures.html create mode 100644 manuals/sly/The-Game-Loop.html create mode 100644 manuals/sly/Time.html create mode 100644 manuals/sly/Transforms.html create mode 100644 manuals/sly/Tweening.html create mode 100644 manuals/sly/Tweens.html create mode 100644 manuals/sly/Utilities.html create mode 100644 manuals/sly/Vectors.html create mode 100644 manuals/sly/Window-Creation.html create mode 100644 manuals/sly/index.html diff --git a/haunt.scm b/haunt.scm index 2f9276c..b08b1ea 100644 --- a/haunt.scm +++ b/haunt.scm @@ -272,4 +272,5 @@ at " (static-directory "css") (static-directory "fonts") (static-directory "images") - (static-directory "src"))) + (static-directory "src") + (static-directory "manuals"))) diff --git a/manuals/sly/API-Reference.html b/manuals/sly/API-Reference.html new file mode 100644 index 0000000..323ebfe --- /dev/null +++ b/manuals/sly/API-Reference.html @@ -0,0 +1,96 @@ + + + + + +Sly: API Reference + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

4 API Reference

+ + + + + + + + + + + + + + + diff --git a/manuals/sly/Agendas.html b/manuals/sly/Agendas.html new file mode 100644 index 0000000..b30aa98 --- /dev/null +++ b/manuals/sly/Agendas.html @@ -0,0 +1,163 @@ + + + + + +Sly: Agendas + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Time   [Contents][Index]

+
+
+ +

4.3.3 Agendas

+ +
+
(use-modules (sly agenda))
+
+ +

Agendas are used to schedule procedures to be called at distinct +points in time. One agenda, stored in the current-agenda +parameter, is active at any given time. A global agenda is initially +bound and is sufficient for most needs. When a separate scheduler is +required (see REPL for one such case), the parameter can be +rebound using parameterize or with-agenda form. +

+
+
Scheme Procedure: make-agenda
+

Create a new, empty agenda. +

+ +
+
Scheme Syntax: agenda? obj
+

Return #t if obj is an agenda. +

+ +
+
Scheme Variable: current-agenda
+

A parameter containing the current, dynamically scoped agenda object. +

+ +
+
Scheme Procedure: agenda-time
+

Return the time of the current agenda. +

+ +
+
Scheme Syntax: with-agenda agenda body
+

Evaluate body with current-agenda bound to agenda. +

+ +
+
Scheme Procedure: agenda-tick!
+

Increment time by 1 for the current agenda and run scheduled +procedures. +

+ +
+
Scheme Procedure: agenda-clear!
+

Remove all scheduled procedures from the current agenda. +

+ +
+
Scheme Procedure: schedule thunk [delay]
+

Schedule thunk to be applied after delay ticks of the +current agenda. The default delay is one tick. +

+ +
+
Scheme Procedure: schedule-interval thunk interval
+

Schedule thunk to be applied every interval ticks of the +current agenda, forever. +

+ +
+
Scheme Procedure: schedule-each thunk
+

Schedule thunk to be applied upon every tick of the current +agenda, forever. +

+ +

Coroutines become particularly useful for game programming when +combined with the agenda. For example, a computer controller opponent +could periodically pause its AI algorithm to give the rest of the game +world a chance to do some processing. By using the wait +procedure, algorithms that span multiple ticks of game time can be +written in a straightforward, natural way. +

+
+
Scheme Procedure: wait delay
+

Abort the current coroutine prompt and schedule the continuation to be +run after delay ticks of the current agenda. +

+
+
+

+Previous: , Up: Time   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Booting.html b/manuals/sly/Booting.html new file mode 100644 index 0000000..b74cec8 --- /dev/null +++ b/manuals/sly/Booting.html @@ -0,0 +1,88 @@ + + + + + +Sly: Booting + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: API Reference   [Contents][Index]

+
+
+ +

4.1 Booting

+ + + + + + + + + + + diff --git a/manuals/sly/Cameras.html b/manuals/sly/Cameras.html new file mode 100644 index 0000000..7985f90 --- /dev/null +++ b/manuals/sly/Cameras.html @@ -0,0 +1,81 @@ + + + + + +Sly: Cameras + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.6 Cameras

+ + + + + + diff --git a/manuals/sly/Colors.html b/manuals/sly/Colors.html new file mode 100644 index 0000000..507eefe --- /dev/null +++ b/manuals/sly/Colors.html @@ -0,0 +1,81 @@ + + + + + +Sly: Colors + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.7 Colors

+ + + + + + diff --git a/manuals/sly/Contributing.html b/manuals/sly/Contributing.html new file mode 100644 index 0000000..68e20dd --- /dev/null +++ b/manuals/sly/Contributing.html @@ -0,0 +1,89 @@ + + + + + +Sly: Contributing + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

5 Contributing

+ +

This project is a cooperative effort, and we need your help to make it +grow! Please get in touch with us on #sly on the Freenode IRC +network. We welcome ideas, bug reports, patches, and anything that +may be helpful to the project. +

+

The git source code repository can be found at +https://git.dthompson.us/sly.git. +

+ + + + + diff --git a/manuals/sly/Copying-This-Manual.html b/manuals/sly/Copying-This-Manual.html new file mode 100644 index 0000000..8c113ce --- /dev/null +++ b/manuals/sly/Copying-This-Manual.html @@ -0,0 +1,86 @@ + + + + + +Sly: Copying This Manual + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

Appendix A Copying This Manual

+ + + + + + + + + + diff --git a/manuals/sly/Coroutines.html b/manuals/sly/Coroutines.html new file mode 100644 index 0000000..26e5c73 --- /dev/null +++ b/manuals/sly/Coroutines.html @@ -0,0 +1,134 @@ + + + + + +Sly: Coroutines + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Time   [Contents][Index]

+
+
+ +

4.3.2 Coroutines

+ +
+
(use-modules (sly coroutine))
+
+ +

Coroutines are the building block for cooperative multitasking. When +used with agendas, they are a powerful mechanism for writing +algorithms that span multiple clock ticks in a straightforward, linear +fashion. Sly’s coroutines are built on top of Guile’s delimited +continuations, called prompts. +

+

To run a procedure as a coroutine, use the call-with-coroutine +procedure. Once inside the coroutine prompt, the yield +procedure can be used to pause the procedure and pass its continuation +to a callback procedure. The callback may call the continuation at +its convenience, resuming the original procedure. +

+

Coroutines are particularly useful in conjunction with Agendas. +

+
+
Scheme Procedure: call-with-coroutine thunk
+

Apply thunk within a coroutine prompt. +

+ +
+
Scheme Syntax: coroutine body
+

Evaluate body within a coroutine prompt. +

+ +
+
Scheme Syntax: colambda args body
+

Syntacic sugar for a lambda expression whose body is run +within a coroutine prompt. +

+ +
+
Scheme Syntax: codefine (name formals …) body
+

Syntacic sugar for defining a procedure called name with formal +arguments formals whose body is run within a coroutine +prompt. +

+ +
+
Scheme Syntax: codefine* (name formals …) body
+

Syntacic sugar for defining a procedure called name with +optional and keyword arguments formals whose body is run +within a coroutine prompt. +

+ +
+
Scheme Procedure: yield callback
+

Yield continuation to the procedure callback. +

+ + + + + + diff --git a/manuals/sly/Development-Environment.html b/manuals/sly/Development-Environment.html new file mode 100644 index 0000000..190c124 --- /dev/null +++ b/manuals/sly/Development-Environment.html @@ -0,0 +1,91 @@ + + + + + +Sly: Development Environment + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Installation   [Contents][Index]

+
+
+ +

2.3 Development Environment

+ +

The ideal tools to use for developing Sly applications are: +

+ + +

See their respective home pages for installation and usage instructions. +

+ + + + + diff --git a/manuals/sly/Easings.html b/manuals/sly/Easings.html new file mode 100644 index 0000000..c73eebf --- /dev/null +++ b/manuals/sly/Easings.html @@ -0,0 +1,129 @@ + + + + + +Sly: Easings + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Tweens   [Contents][Index]

+
+
+ +

4.2.4.1 Easings

+ +

Easing procedures specify the rate of change of a value alpha +over time. Easings may be composed to form complex animation. +

+

The following procedures are used to control repitition by clamping +alpha to the range [0, 1] in different ways. +

+
+
Scnheme Procedure: ease-loop alpha
+

When alpha reaches 1, start over from 0. +

+ +
+
Scheme Procedure: ease-reflect alpha
+

When alpha reaches 1, work backwards to 0. When alpha +reaches 0, work forwards to 1. +

+ +

The following easing functions control the rate of change of an +animation: +

+
+
Scheme Procedure: ease-linear alpha
+
+ +
+
Scheme Procedure: ease-in-sine alpha
+
+ +
+
Scheme Procedure: ease-out-sine alpha
+
+ +
+
Scheme Procedure: ease-in-out-sine alpha
+
+ +
+
Scheme Procedure: ease-in-quad alpha
+
+ +
+
Scheme Procedure: ease-out-quad alpha
+
+ +
+
Scheme Procedure: ease-in-out-quad alpha
+
+ + + + + + diff --git a/manuals/sly/Examples.html b/manuals/sly/Examples.html new file mode 100644 index 0000000..b2a06fc --- /dev/null +++ b/manuals/sly/Examples.html @@ -0,0 +1,94 @@ + + + + + +Sly: Examples + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Installation   [Contents][Index]

+
+
+ +

2.2 Examples

+ +

To test your Sly installation, try running some of the included +example programs. Examples can be found in the +share/sly/examples directory, relative to the installation +prefix. +

+

To run an example, invoke Guile with the relevant file, such as: +guile simple.scm. If successful, a window with a sprite in the +center will open. +

+

A more complex example can further test your installation and show off +what Sly can do. Try running the “2048” example in +share/sly/examples/2048 with guile 2048.scm. +

+ + + + + diff --git a/manuals/sly/Fonts.html b/manuals/sly/Fonts.html new file mode 100644 index 0000000..decef4d --- /dev/null +++ b/manuals/sly/Fonts.html @@ -0,0 +1,81 @@ + + + + + +Sly: Fonts + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.4 Fonts

+ + + + + + diff --git a/manuals/sly/Framebuffers.html b/manuals/sly/Framebuffers.html new file mode 100644 index 0000000..1f5e894 --- /dev/null +++ b/manuals/sly/Framebuffers.html @@ -0,0 +1,81 @@ + + + + + +Sly: Framebuffers + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.8 Framebuffers

+ + + + + + diff --git a/manuals/sly/GNU-Free-Documentation-License.html b/manuals/sly/GNU-Free-Documentation-License.html new file mode 100644 index 0000000..a95838f --- /dev/null +++ b/manuals/sly/GNU-Free-Documentation-License.html @@ -0,0 +1,554 @@ + + + + + +Sly: GNU Free Documentation License + + + + + + + + + + + + + + + + + + + + +
+

+Up: Copying This Manual   [Contents][Index]

+
+
+ +

A.1 GNU Free Documentation License

+
Version 1.3, 3 November 2008 +
+ +
+
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+http://fsf.org/
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+ +
    +
  1. PREAMBLE + +

    The purpose of this License is to make a manual, textbook, or other +functional and useful document free in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +

    +

    This License is a kind of “copyleft”, which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +

    +

    We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +

    +
  2. APPLICABILITY AND DEFINITIONS + +

    This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The “Document”, below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as “you”. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +

    +

    A “Modified Version” of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +

    +

    A “Secondary Section” is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document’s overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +

    +

    The “Invariant Sections” are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +

    +

    The “Cover Texts” are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +

    +

    A “Transparent” copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not “Transparent” is called “Opaque”. +

    +

    Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +

    +

    The “Title Page” means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, “Title Page” means +the text near the most prominent appearance of the work’s title, +preceding the beginning of the body of the text. +

    +

    The “publisher” means any person or entity that distributes copies +of the Document to the public. +

    +

    A section “Entitled XYZ” means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as “Acknowledgements”, +“Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” +of such a section when you modify the Document means that it remains a +section “Entitled XYZ” according to this definition. +

    +

    The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +

    +
  3. VERBATIM COPYING + +

    You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +

    +

    You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +

    +
  4. COPYING IN QUANTITY + +

    If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document’s license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +

    +

    If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +

    +

    If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +

    +

    It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +

    +
  5. MODIFICATIONS + +

    You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +

    +
      +
    1. Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +
    2. List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +
    3. State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +
    4. Preserve all the copyright notices of the Document. + +
    5. Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +
    6. Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +
    7. Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document’s license notice. + +
    8. Include an unaltered copy of this License. + +
    9. Preserve the section Entitled “History”, Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled “History” in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +
    10. Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the “History” section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +
    12. Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +
    13. Delete any section Entitled “Endorsements”. Such a section +may not be included in the Modified Version. + +
    14. Do not retitle any existing section to be Entitled “Endorsements” or +to conflict in title with any Invariant Section. + +
    15. Preserve any Warranty Disclaimers. +
    + +

    If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version’s license notice. +These titles must be distinct from any other section titles. +

    +

    You may add a section Entitled “Endorsements”, provided it contains +nothing but endorsements of your Modified Version by various +parties—for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +

    +

    You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +

    +

    The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +

    +
  6. COMBINING DOCUMENTS + +

    You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +

    +

    The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +

    +

    In the combination, you must combine any sections Entitled “History” +in the various original documents, forming one section Entitled +“History”; likewise combine any sections Entitled “Acknowledgements”, +and any sections Entitled “Dedications”. You must delete all +sections Entitled “Endorsements.” +

    +
  7. COLLECTIONS OF DOCUMENTS + +

    You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +

    +

    You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +

    +
  8. AGGREGATION WITH INDEPENDENT WORKS + +

    A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an “aggregate” if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation’s users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +

    +

    If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document’s Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +

    +
  9. TRANSLATION + +

    Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +

    +

    If a section in the Document is Entitled “Acknowledgements”, +“Dedications”, or “History”, the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +

    +
  10. TERMINATION + +

    You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +

    +

    However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +

    +

    Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +

    +

    Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +

    +
  11. FUTURE REVISIONS OF THIS LICENSE + +

    The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. +

    +

    Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy’s public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +

    +
  12. RELICENSING + +

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +“Massive Multiauthor Collaboration” (or “MMC”) contained in the +site means any set of copyrightable works thus published on the MMC +site. +

    +

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +

    +

    “Incorporate” means to publish or republish a Document, in whole or +in part, as part of another Document. +

    +

    An MMC is “eligible for relicensing” if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +

    +

    The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +

    +
+ + +

ADDENDUM: How to use this License for your documents

+ +

To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +

+
+
  Copyright (C)  year  your name.
+  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''.
+
+ +

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the “with…Texts.” line with this: +

+
+
    with the Invariant Sections being list their titles, with
+    the Front-Cover Texts being list, and with the Back-Cover Texts
+    being list.
+
+ +

If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +

+

If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +

+ +
+
+

+Up: Copying This Manual   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Getting-Started.html b/manuals/sly/Getting-Started.html new file mode 100644 index 0000000..ab235ec --- /dev/null +++ b/manuals/sly/Getting-Started.html @@ -0,0 +1,82 @@ + + + + + +Sly: Getting Started + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

3 Getting Started

+ + + + + + + diff --git a/manuals/sly/Index.html b/manuals/sly/Index.html new file mode 100644 index 0000000..e44f08d --- /dev/null +++ b/manuals/sly/Index.html @@ -0,0 +1,475 @@ + + + + + +Sly: Index + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents][Index]

+
+
+ +

Index

+ +
Jump to:   2 +   +< +   +
+A +   +B +   +C +   +D +   +E +   +F +   +H +   +I +   +J +   +K +   +L +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +V +   +W +   +Y +   +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry  Section

2
2pi: Miscellaneous

<
<quaternion>: Quaternions
<rect>: Rectangles
<vector2>: Vectors
<vector3>: Vectors
<vector4>: Vectors

A
after-game-loop-error-hook: The Game Loop
agenda-clear!: Agendas
agenda-tick!: Agendas
agenda-time: Agendas
agenda?: Agendas
atan-degrees: Miscellaneous
axis-scale: Joystick
axis-value: Joystick
axis-value-raw: Joystick

B
build-transform: Transforms
button-down?: Joystick

C
call-with-coroutine: Coroutines
chain: Miscellaneous-Utilities
chain*: Miscellaneous-Utilities
clamp: Miscellaneous
close-window: Window Creation
codefine: Coroutines
codefine*: Coroutines
colambda: Coroutines
coroutine: Coroutines
cos-degrees: Miscellaneous
cotan: Miscellaneous
current-agenda: Agendas

D
define-guardian: Miscellaneous-Utilities
define-signal: Signals
degrees->radians: Miscellaneous
draw-hook: The Game Loop

E
ease-in-out-quad: Easings
ease-in-out-sine: Easings
ease-in-quad: Easings
ease-in-sine: Easings
ease-linear: Easings
ease-loop: Easings
ease-out-quad: Easings
ease-out-sine: Easings
ease-reflect: Easings
enable-joystick: Joystick

F
forever: Miscellaneous-Utilities

H
half: Miscellaneous
hook->signal: Signals

I
identity-quaternion: Quaternions
identity-transform: Transforms

J
joystick-axis-hook: Joystick
joystick-button-press-hook: Joystick
joystick-button-release-hook: Joystick
joystick-name: Joystick
joystick-num-axes: Joystick
joystick-num-buttons: Joystick

K
key-arrows: Keyboard
key-directions: Keyboard
key-down?: Keyboard
key-last-down: Keyboard
key-last-up: Keyboard
key-press-hook: Keyboard
key-release-hook: Keyboard
key-wasd: Keyboard

L
lerp: Miscellaneous
linear-scale: Miscellaneous
list->vlist*: Miscellaneous-Utilities
list->vlist*: Miscellaneous-Utilities
live-reload: Live Reloading
load-sprite: Sprites
look-at: Transforms

M
magnitude: Vectors
make-agenda: Agendas
make-directional-signal: Joystick
make-directional-signal-raw: Joystick
make-lerp: Miscellaneous
make-quaternion: Quaternions
make-quaternion: Quaternions
make-rect: Rectangles
make-signal: Signals
make-sprite: Sprites
make-transform: Transforms
make-window: Window Creation
memoize: Miscellaneous-Utilities
modulo*: Miscellaneous
mouse-click-hook: Mouse
mouse-down?: Mouse
mouse-last-down: Mouse
mouse-last-up: Mouse
mouse-move-hook: Mouse
mouse-position: Mouse
mouse-press-hook: Mouse
mouse-x: Mouse
mouse-y: Mouse

N
normalize: Vectors
null-quaternion: Quaternions
null-rect: Rectangles
null-transform: Transforms
num-joysticks: Joystick

O
open-window: Window Creation
orthographic-projection: Transforms

P
perspective-projection: Transforms
pi: Miscellaneous
pi/2: Miscellaneous

Q
quaternion: Quaternions
quaternion: Quaternions
quaternion*: Quaternions
quaternion->vector: Quaternions
quaternion-magnitude: Quaternions
quaternion-normalize: Quaternions
quaternion-slerp: Quaternions
quaternion-w: Quaternions
quaternion-x: Quaternions
quaternion-y: Quaternions
quaternion-z: Quaternions
quaternion?: Quaternions

R
radians->degrees: Miscellaneous
raw-axis-max: Joystick
raw-axis-min: Joystick
rect-bottom: Rectangles
rect-bottom-left: Rectangles
rect-bottom-right: Rectangles
rect-center: Rectangles
rect-center-x: Rectangles
rect-center-y: Rectangles
rect-clamp: Rectangles
rect-clip: Rectangles
rect-contains?: Rectangles
rect-contains?: Rectangles
rect-half-height: Rectangles
rect-half-width: Rectangles
rect-height: Rectangles
rect-inflate: Rectangles
rect-inflate: Rectangles
rect-intersects?: Rectangles
rect-left: Rectangles
rect-move: Rectangles
rect-move: Rectangles
rect-position: Rectangles
rect-right: Rectangles
rect-size: Rectangles
rect-top: Rectangles
rect-top-left: Rectangles
rect-top-right: Rectangles
rect-union: Rectangles
rect-width: Rectangles
rect-within?: Rectangles
rect-x: Rectangles
rect-y: Rectangles
rect?: Rectangles
render-sprite: Sprites
resume-game-loop: REPL
rotate: Transforms
rotate-x: Transforms
rotate-y: Transforms
rotate-z: Transforms
run-game-loop: The Game Loop

S
scale: Transforms
scale: Transforms
schedule: Agendas
schedule-each: Agendas
schedule-interval: Agendas
signal-constant: Signals
signal-count: Signals
signal-delay: Signals
signal-drop: Signals
signal-drop-repeats: Signals
signal-every: Signals
signal-filter: Signals
signal-fold: Signals
signal-generator: Signals
signal-let: Signals
signal-let*: Signals
signal-map: Signals
signal-merge: Signals
signal-negate: Signals
signal-ref: Signals
signal-ref-maybe: Signals
signal-sample: Signals
signal-sample-on: Signals
signal-set!: Signals
signal-since: Signals
signal-switch: Signals
signal-tap: Signals
signal-throttle: Signals
signal-time: Signals
signal-timestamp: Signals
signal-zip: Signals
signal?: Signals
sin-degrees: Miscellaneous
sprite-mesh: Sprites
sprite-texture: Sprites
sprite?: Sprites
square: Miscellaneous
start-sly-repl: REPL
stop-game-loop: The Game Loop

T
tan-degrees: Miscellaneous
trampoline: Miscellaneous-Utilities
transform*: Transforms
transform*!: Transforms
transform+: Transforms
transform-matrix: Transforms
transform-position: Transforms
transform-vector2: Transforms
transform?: Transforms
translate: Transforms
transpose: Transforms
tween: Tweening

V
v*: Vectors
v+: Vectors
v-: Vectors
vcross: Vectors
vdot: Vectors
vector->quaternion: Quaternions
vector2: Vectors
vector2?: Vectors
vector3: Vectors
vector3?: Vectors
vector4: Vectors
vector4?: Vectors
vlerp: Vectors
vmap: Vectors
vw: Vectors
vx: Vectors
vy: Vectors
vz: Vectors

W
wait: Agendas
window-close-hook: Window Creation
window-fullscreen?: Window Creation
window-height: Window Creation
window-resize-hook: Window Creation
window-resolution: Window Creation
window-size: Window Creation
window-title: Window Creation
window-width: Window Creation
window?: Window Creation
with-agenda: Agendas
with-window: Window Creation

Y
yield: Coroutines

+
Jump to:   2 +   +< +   +
+A +   +B +   +C +   +D +   +E +   +F +   +H +   +I +   +J +   +K +   +L +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +V +   +W +   +Y +   +
+ +
+
+

+Previous: , Up: Top   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Input.html b/manuals/sly/Input.html new file mode 100644 index 0000000..6eb4aea --- /dev/null +++ b/manuals/sly/Input.html @@ -0,0 +1,94 @@ + + + + + +Sly: Input + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: API Reference   [Contents][Index]

+
+
+ +

4.4 Input

+ +

Sly can handle user input from a keyboard, mouse, or joystick. The +input modules expose signals that represent various input +events (see Signals). +

+ + + + + + + + + + + diff --git a/manuals/sly/Installation.html b/manuals/sly/Installation.html new file mode 100644 index 0000000..24f3045 --- /dev/null +++ b/manuals/sly/Installation.html @@ -0,0 +1,98 @@ + + + + + +Sly: Installation + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

2 Installation

+ +

Sly is available for download from its website at +sly.dthompson.us. This section describes the software +requirements of Sly, as well as how to install it. +

+

The build procedure for Sly is the same as for GNU software packages, +and is not covered here. Please see the files README.org and +INSTALL.org for additional details. +

+ + + + + + + + + + + diff --git a/manuals/sly/Introduction.html b/manuals/sly/Introduction.html new file mode 100644 index 0000000..c4eabcc --- /dev/null +++ b/manuals/sly/Introduction.html @@ -0,0 +1,120 @@ + + + + + +Sly: Introduction + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+
+ +

1 Introduction

+ +

Sly is a 2D/3D game engine written in the GNU Guile dialect of the +Scheme programming language. With the help of Guile, Sly provides all +of the essential building blocks for making video games, such as: +window management, input even handling, rendering, linear algebra, and +powerful scripting capabilities. Sly differentiates itself from +traditional game engines by providing a dynamic live codinng +environment and a functional API. +

+

For those unfamiliar with the term, “live coding” is the practice of +improvised interactive programming. Sly provides a suitable +environment for live coding by leveraging Guile’s cooperative REPL +server. When used with a powerful editing tool such as Emacs (with +the fantastic Geiser extension), programmers may evaluate arbitrary +code and see the effects of their modifications in real time. This +tight feedback loop allows for faster prototyping, greater +productivity, and most importantly, more fun. +

+

Functional reactive programming (FRP) is a technique used to model +time-varying values with pure functions. A pure function is a +function whose return value depends solely upon its arguments. They +also produce no side-effects, such as calling ’set!’ on a variable or +writing to a file on disk. Sly encapsulates time-varying values in +“signals”, a high-level data structure for controlling the flow of +events. Unlike imperative event callbacks, signals can easily be +composed to form new signals. By modeling game state with pure +functions and immutable data, a game can be seen as a function of +time. To play the game is to “fold” (accumulate a result) over +time. Constructing a game this way allows for deterministic behavior +that is easier to reason about and test than the accumulation of +side-effects seen in traditional game engines. The signal interface +is also declarative, meaning that the programmer describes what +the state of the world should be like at any given time, rather than +how to get there. +

+
+
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Joystick.html b/manuals/sly/Joystick.html new file mode 100644 index 0000000..68748c3 --- /dev/null +++ b/manuals/sly/Joystick.html @@ -0,0 +1,188 @@ + + + + + +Sly: Joystick + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Input   [Contents][Index]

+
+
+ +

4.4.3 Joystick

+ +
+
(use-modules (sly input joystick))
+
+ +

Joystick hooks, signals, and procedures. +

+

Before using joystick procedures, you must first call the +initialization procedure enable-joystick. +

+
+
Scheme Procedure: enable-joystick
+

Initialize joystick module. +

+ +
+
Scheme Procedure: joystick-num-axes idx
+

Get number of axes of joystick at idx. +

+ +
+
Scheme Procedure: joystick-num-buttons idx
+

Get number of buttons of joystick at idx. +

+ +
+
Scheme Variable: joystick-axis-hook
+

This hook is run whenever a joystick motion occurs. Procedures added +to this hook should accept three arguments: which, the joystick +ID; axis, the axis ID; and value, the motion coordinate. +

+ +
+
Scheme Variable: joystick-button-press-hook
+

This hook is run whenever a joystick button is pressed. Procedures +added to this hook should accept two arguments: which, the +joystick ID; button, the button ID. +

+ +
+
Scheme Variable: joystick-button-release-hook
+

This hook is run whenever a joystick button is released. Procedures +added to this hook should accept two arguments: which, the +joystick ID; button, the button ID. +

+ +
+
Scheme Variable: raw-axis-min
+

-32768 +

+ +
+
Scheme Variable: raw-axis-max
+

32767 +

+ +
+
Scheme Procedure: axis-value-raw idx axis
+

Create a signal on the axis at axis of the joystick at +idx; joystick axis values are stored in a signed 16 bit integer +and so, values range from [raw-axis-min, raw-axis-max]. +

+ +
+
Scheme Procedure: axis-value idx axis
+

Create a signal for the value of axis on joystick idx; +values are scaled to the range [-1,1]. +

+ +
+
Scheme Procedure: button-down? idx n
+

Create a signal for the state of button n on joystick at +idx. +

+ +
+
Scheme Procedure: make-directional-signal idx x-axis y-axis
+

Create a signal for a directional pad or analog stick with x +and y axes. Values are scaled to the range [-1,1]. +

+ +
+
Scheme Procedure: make-directional-signal-raw idx x-axis y-axis
+

Create a signal for a directional pad or analog stick with x +and y axes. Values range from [raw-axis-min, +raw-axis-max]. +

+ +
+
Scheme Procedure: axis-scale raw-value
+

Map raw-value in the range [raw-axis-min, +raw-axis-max] to a value in the range [-1, 1]. +

+ +
+
Scheme Procedure: joystick-name joystick
+

Return the name of joystick. +

+ +
+
Scheme Procedure: num-joysticks
+

Return the number of joysticks available. +

+
+
+

+Previous: , Up: Input   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Keyboard.html b/manuals/sly/Keyboard.html new file mode 100644 index 0000000..b0de8f3 --- /dev/null +++ b/manuals/sly/Keyboard.html @@ -0,0 +1,137 @@ + + + + + +Sly: Keyboard + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Input   [Contents][Index]

+
+
+ +

4.4.1 Keyboard

+ +
+
(use-modules (sly input keyboard))
+
+ +

Keyboard hooks, signals, and procedures. +

+
+
Scheme Variable: key-press-hook
+

This hook is run whenever a key is pressed down. Procedures added to +this hook should accept two arguments: key, a symbol, and +char, a unicode character. +

+ +
+
Scheme Variable: key-release-hook
+

This hook is run whenever a key is released. Procedures added to this +hook should accept two arguments: key, a symbol, and +char, a unicode character. +

+ +
+
Scheme Signal: key-last-down
+

The last key pressed. +

+ +
+
Scheme Signal: key-last-up
+

The last key released. +

+ +
+
Scheme Procedure: key-down? key
+

Create a signal for the state of key. The signal value is +#t when key is pressed and #f otherwise. +

+ +

A lot of games use directional keys to control the player. The below +procedure and signals make this style of movement easy to use. +

+
+
Scheme Procedure: key-directions up down left right
+

Create a signal whose value is a 2D unit vector that can be used for +8-directional movement. The vector is determined by the state of the +directional keys: up, down, left, right. +

+ +
+
Scheme Signal: key-arrows
+

A 2D directional vector based on the state of the arrow keys. +

+ +
+
Scheme Signal: key-wasd
+

A 2D directional vector based on the state of the WASD keys. +

+ + + + + + diff --git a/manuals/sly/Live-Reloading.html b/manuals/sly/Live-Reloading.html new file mode 100644 index 0000000..e4ebf96 --- /dev/null +++ b/manuals/sly/Live-Reloading.html @@ -0,0 +1,101 @@ + + + + + +Sly: Live Reloading + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Utilities   [Contents][Index]

+
+
+ +

4.6.2 Live Reloading

+ +
+
(use-modules (sly utils live-reload))
+
+ +

The live-reload module enables Sly programs to react to changes in the +file system and reload assets automatically, which is useful when +using external programs such as an image editor or map editor. This +makes it easy to see the changes made to game assets quickly. +

+
+
Function: live-reload proc [polling-interval]
+

Return a new procedure that re-applies proc whenever the +associated file is modified. The new procedure returns a signal +(see Signals) that contains the return value of proc. The +first argument to proc must be a file name string. +

+

A simple polling method is used to test for updates. Files are polled +every polling-interval ticks (120 by default). +

+ + + + + + diff --git a/manuals/sly/Math.html b/manuals/sly/Math.html new file mode 100644 index 0000000..989d205 --- /dev/null +++ b/manuals/sly/Math.html @@ -0,0 +1,101 @@ + + + + + +Sly: Math + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: API Reference   [Contents][Index]

+
+
+ +

4.2 Math

+ +

Modeling a virtual world requires a good dose of linear algebra, +trigonometry, and calculus. Sly comes with modules for 2D/3D/4D +vector math, trigonometry, axis-aligned bounding boxes, quaternions, +4x4 transformation matrices, and interpolation. +

+ + + + + + + + + + + + + + diff --git a/manuals/sly/Miscellaneous.html b/manuals/sly/Miscellaneous.html new file mode 100644 index 0000000..d94bed8 --- /dev/null +++ b/manuals/sly/Miscellaneous.html @@ -0,0 +1,189 @@ + + + + + +Sly: Miscellaneous + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Math   [Contents][Index]

+
+
+ +

4.2.6 Miscellaneous

+ +
+
(use-modules (sly math))
+
+ +

A grab bag of commonly used math functions and constants. +

+
+
Scheme Variable: pi
+

An approximation of \pi, the ratio of a circle’s circumference to its +diameter. +

+ +
+
Scheme Variable: 2pi
+

2\pi +

+ +
+
Scheme Variable: pi/2
+

\pi/2 +

+ +
+
Scheme Procedure: degrees->radians angle
+

Convert angle from degrees to radians. +

+ +
+
Scheme Procedure: radians->degrees angle
+

Convert angle from radians to degrees. +

+ +
+
Scheme Procedure: sin-degrees angle
+

Return the sine of angle, where angle is measured in +degrees. +

+ +
+
Scheme Procedure: cos-degrees angle
+

Return the cosine of angle, where angle is measured in +degrees. +

+ +
+
Scheme Procedure: tan-degrees angle
+

Return the tangent of angle, where angle is measured in +degrees. +

+ +
+
Scheme Procedure: atan-degrees y x
+

Return the arctangent of y and x, where y and +x are measured in degrees. +

+ +
+
Scheme Procedure: cotan z
+

Return the cotangent of z. +

+ +
+
Scheme Procedure: clamp min max x
+

Restrict x to the range [min, max], assuming that +min is actually less than max. +

+ +
+
Scheme Procedure: linear-scale min max a b n
+

Map n in the range [min, max] to the range [a, b]. +

+ +
+
Scheme Procedure: half x
+

Return x / 2. +

+ +
+
Scheme Procedure: square x
+

Return x^2. +

+ +
+
Scheme Procedure: make-lerp + *
+

Return a new procedure that accepts three arguments: start, +end, and alpha. The returned procedure uses the +procedures + and * to linearly interpolate a value between +start and end. alpha should always be in the range +[0, 1]. +

+ +
+
Scheme Procedure: lerp start end alpha
+

Return the linear interpolation between the numbers start and +end with scalar factor alpha. +

+ +
+
Scheme Procedure: modulo* x y
+

Return the remainder of x / y. Works like regular +modulo, except that x and y may be rational numbers +or inexact numbers. +

+
+
+

+Previous: , Up: Math   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Miscellaneous_002dUtilities.html b/manuals/sly/Miscellaneous_002dUtilities.html new file mode 100644 index 0000000..7d160f4 --- /dev/null +++ b/manuals/sly/Miscellaneous_002dUtilities.html @@ -0,0 +1,147 @@ + + + + + +Sly: Miscellaneous-Utilities + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Utilities   [Contents][Index]

+
+
+ +

4.6.3 Miscellaneous

+ +
+
(use-modules (sly utils))
+
+ +

Miscellaneous helpful procedures. +

+
+
Scheme Syntax: define-guardian name reaper
+

Define a new guardian called name and call reaper when +an object within the guardian is GC’d. Reaping is ensured to happen +from the same thread that is running the game loop. +

+ +
+
Scheme Procedure: memoize proc
+

Return a memoizing version of proc. +

+ +
+
Scheme Syntax: forever body
+

Evaluate body in an unbounded loop. Useful in coroutines that +have no end. +

+ +
+
Scheme Syntax: trampoline proc-name
+

Create a new procedure that applies the procedure bound to +proc-name with all given arguments. +

+ +
+
Scheme Syntax: chain* args (proc …) . rest
+

Handy macro for flattening nested procedure calls where the output of +an inner call is the last argument to the outer call. +

+
+
(chain* (list '(1 2) '(3 4))
+  (map +)
+  (fold + 0)) ;; => 10
+
+ +
+ +
+
Scheme Syntax: chain arg (proc …) . rest
+

Like chain* but for a single argument. +

+
+
(chain '(1 2 3 4)
+  (map 1+)
+  (fold + 0)) ;; => 14
+
+ +
+ +
+
Scheme Procedure: list->vlist* lst
+

Convert lst and all sub-lists within to vlists. +

+ +
+
Scheme Procedure: list->vlist* lst index […]
+

Return the element at index index … in the nested vlist +structure vlist. +

+ + + + + + diff --git a/manuals/sly/Mouse.html b/manuals/sly/Mouse.html new file mode 100644 index 0000000..accf8f7 --- /dev/null +++ b/manuals/sly/Mouse.html @@ -0,0 +1,138 @@ + + + + + +Sly: Mouse + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Input   [Contents][Index]

+
+
+ +

4.4.2 Mouse

+ +
+
(use-modules (sly input mouse))
+
+ +

Mouse hooks, signals, and procedures. +

+
+
Scheme Variable: mouse-move-hook
+

This hook is run whenever the mouse is moved. Procedures added to +this hook should accept two arguments: Numbers x and y. +

+ +
+
Scheme Variable: mouse-press-hook
+

This hook is run whenever a mouse button is pressed. Procedures added +to this hook should accept three arguments: Symbol button and +numbers x and y. +

+ +
+
Scheme Variable: mouse-click-hook
+

This hook is run whenever a mouse button is clicked. Procedures added +to this hook should accept three arguments: Symbol button and +numbers x and y. +

+ +
+
Scheme Signal: mouse-x
+

The mouse X coordinate. +

+ +
+
Scheme Signal: mouse-y
+

The mouse Y coordinate. +

+ +
+
Scheme Signal: mouse-position
+

The mouse position as a 2D vector. +

+ +
+
Scheme Signal: mouse-last-down
+

The last mouse button pressed. +

+ +
+
Scheme Signal: mouse-last-up
+

The last mouse button clicked. +

+ +
+
Scheme Procedure: mouse-down? button
+

Create a signal for the state of button. Value is #t when mouse button +is pressed or #f otherwise. +

+ + + + + + diff --git a/manuals/sly/Quaternions.html b/manuals/sly/Quaternions.html new file mode 100644 index 0000000..bde3992 --- /dev/null +++ b/manuals/sly/Quaternions.html @@ -0,0 +1,185 @@ + + + + + +Sly: Quaternions + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+
+ +

4.2.5 Quaternions

+ +
+
(use-modules (sly math quaternion))
+
+ +

Quaternions are used to express rotations about an arbitrary axis in a +way that avoids “gimbal lock” and allows for useful interpolation, +unlike matrices or Euler angles. +

+

Quaternions can be used in rotation transformations +(see Transforms), as well as converted to and from Vectors. +

+
+
Record Type: <quaternion>
+

Data type with 4 fields: w, x, y, z, in +that order. This type descriptor has been exposed for destructuring +via Guile’s (ice-9 match) module. +

+ +
+
Scheme Procedure: make-quaternion v theta
+
Scheme Procedure: make-quaternion w x y z
+

Create a new quaternion from an axis angle (a 3D vector v plus +an angle theta) or from individual coordinates w, x, +y, and z. +

+ +
+
Scheme Procedure: quaternion v theta
+
Scheme Procedure: quaternion w x y z
+

Alternate spelling of make-quaternion. +

+ +
+
Scheme Syntax: quaternion? obj
+

Return #t if obj is a quaternion. +

+ +
+
Scheme Syntax: quaternion-w q
+

Return the w coordinate of the quaternion q. +

+ +
+
Scheme Syntax: quaternion-x q
+

Return the x coordinate of the quaternion q. +

+ +
+
Scheme Syntax: quaternion-y q
+

Return the y coordinate of the quaternion q. +

+ +
+
Scheme Syntax: quaternion-z q
+

Return the z coordinate of the quaternion q. +

+ +
+
Scheme Variable: identity-quaternion
+

The multiplicative identity quaternion. +

+ +
+
Scheme Variable: null-quaternion
+

A quaternion with all fields set to zero. +

+ +
+
Scheme Procedure: quaternion* . quaternions
+

Return the product of all quaternions. Return +identity-quaternion if called without arguments. +

+ +
+
Scheme Procedure: quaternion-slerp q1 q2 delta
+

Perform a spherical linear interpolation of the quaternions q1 +and q2 and blending factor delta. +

+ +
+
Scheme Procedure: quaternion-magnitude q
+

Return the magnitude of the quaternion q. +

+ +
+
Scheme Procedure: quaternion-normalize q
+

Return the normalized form of the quaternion q. +

+ +
+
Scheme Procedure: vector->quaternion v
+

Convert the 4D vector v to a quaternion. +

+ +
+
Scheme Procedure: quaternion->vector q
+

Convert the quaternion q to a 4D vector. +

+ +
+
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/REPL.html b/manuals/sly/REPL.html new file mode 100644 index 0000000..0811888 --- /dev/null +++ b/manuals/sly/REPL.html @@ -0,0 +1,107 @@ + + + + + +Sly: REPL + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Utilities   [Contents][Index]

+
+
+ +

4.6.1 REPL

+ +
+
(use-modules (sly utils repl))
+
+ +

The Sly REPL is a cooperative REPL server that is integrated into the +game loop. It is the key to live coding games with Sly. To connect +to the REPL server, use the Geiser extension for GNU Emacs. +

+
+
Scheme Procedure: start-sly-repl [port]
+

Start a cooperative REPL server that listens on the given port. +By default, this port is 37146. Additionally, a process is scheduled +to poll the REPL server upon every tick of the game loop. +

+ +

The Sly REPL detects when the game loop throws an error and enters a +special loop for debugging. When in this state, game state will not +be updated or rendered. When the errors have been fixed, calling the +resume-game-loop procedure will hand control back to the game +loop. +

+
+
Scheme Procedure: resume-game-loop
+

Abort from the error handling loop prompt and resume the game loop. +

+ + + + + + diff --git a/manuals/sly/Rectangles.html b/manuals/sly/Rectangles.html new file mode 100644 index 0000000..7a1fb4f --- /dev/null +++ b/manuals/sly/Rectangles.html @@ -0,0 +1,262 @@ + + + + + +Sly: Rectangles + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+
+ +

4.2.2 Rectangles

+ +
+
(use-modules (sly math rect))
+
+ +

Rects are 2D axis-aligned bounding boxes. They are useful for +defining rectangular regions, such as the hitbox of a game entity, or +the viewport of a camera. Because rects are axis-aligned, they +provide a cheap means to perform simple collision detection. +

+

The <rect> type descriptor has been exposed for use with +Guile’s (ice-9 match) pattern matching module. +

+
+
Scheme Variable: <rect>
+

Rectangle data type with fields x, y, width, +height, in that order. +

+ +
+
Scheme Procedure: make-rect x y width height
+

Create a new rectangle with position (x, y), and +dimensions (width, height). +

+ +
+
Scheme Variable: null-rect
+

Rectangle with x, y, width, and height of 0. +

+ +
+
Scheme Syntax: rect? obj
+

Return #t if obj is a rectangle. +

+ +
+
Scheme Syntax: rect-x rect
+

Return the x coordinate of rect. +

+ +
+
Scheme Syntax: rect-y rect
+

Return the x coordinate of rect. +

+ +
+
Scheme Syntax: rect-width rect
+

Return the width of rect. +

+ +
+
Scheme Syntax: rect-height rect
+

Return the height of rect. +

+ +
+
Scheme Procedure: rect-left rect
+

Return the left-hand x coordinate of rect. +

+ +
+
Scheme Procedure: rect-right rect
+

Return the right-hand x coordinate of rect. +

+ +
+
Scheme Procedure: rect-top rect
+

Return the top y coordinate of rect +

+ +
+
Scheme Procedure: rect-bottom rect
+

Return the bottom y coordinate of rect. +

+ +
+
Scheme Procedure: rect-top-left rect
+

Return the top-left corner of rect. +

+ +
+
Scheme Procedure: rect-top-right rect
+

Return the top-right corner of rect. +

+ +
+
Scheme Procedure: rect-bottom-left rect
+
Scheme Procedure: rect-position rect
+

Return the bottom-left corner of rect +

+ +
+
Scheme Procedure: rect-bottom-right rect
+

Return the bottom-right corner of rect. +

+ +
+
Scheme Procedure: rect-center-x rect
+

Return the center x coordinate of rect. +

+ +
+
Scheme Procedure: rect-center-y rect
+

Return the center y coordinate of rect. +

+ +
+
Scheme Procedure: rect-center rect
+

Return the center of rect. +

+ +
+
Scheme Procedure: rect-half-width rect
+

Return the half width of rect. +

+ +
+
Scheme Procedure: rect-half-height rect
+

Return the half height of rect. +

+ +
+
Scheme Procedure: rect-size rect
+

Return the size of rect. +

+ +
+
Scheme Procedure: rect-move rect v
+
Scheme Procedure: rect-move rect x y
+

Create a new rectangle by moving rect by the given 2D vector +offset v, or the coordinates x and y. +

+ +
+
Scheme Procedure: rect-inflate rect size
+
Scheme Procedure: rect-inflate rect width height
+

Create a new rectangle by growing rect by the 2D vector +size (or width and height) without changing the +center point. +

+ +
+
Scheme Procedure: rect-union rect1 rect2
+

Create a new rectangle that covers the area of both rect1 and +rect2. +

+ +
+
Scheme Procedure: rect-clip rect1 rect2
+

Create a new rectangle that is the overlapping region of rect1 +and rect2. If the rects do not overlap, a rect of size 0 is +returned. +

+ +
+
Scheme Procedure: rect-clamp rect v
+

Return a new 2D vector by constraining v to the bounds of +rect. +

+ +
+
Scheme Procedure: rect-within? rect1 rect2
+

Return #t if rect2 is completely within rect1. +

+ +
+
Scheme Procedure: rect-intersects? rect1 rect2
+

Return #t if rect2 overlaps rect1. +

+ +
+
Scheme Procedure: rect-contains? rect v
+
Scheme Procedure: rect-contains? rect x y
+

Return #t if the 2D vector v (or the coordinates x +and y) is within rect. +

+ +
+
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Render-Combinators.html b/manuals/sly/Render-Combinators.html new file mode 100644 index 0000000..9d33800 --- /dev/null +++ b/manuals/sly/Render-Combinators.html @@ -0,0 +1,84 @@ + + + + + +Sly: Render Combinators + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.1 Render Combinators

+ +

Render combinators provide a purely functional interface to the OpenGL +state machine. +

+ + + + + diff --git a/manuals/sly/Rendering.html b/manuals/sly/Rendering.html new file mode 100644 index 0000000..48d44f7 --- /dev/null +++ b/manuals/sly/Rendering.html @@ -0,0 +1,108 @@ + + + + + +Sly: Rendering + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: API Reference   [Contents][Index]

+
+
+ +

4.5 Rendering

+ +

Keeping with the theme of declarative and functional code, Sly’s +rendering module provide a purely functional interface to the +imperative world of OpenGL. An abstraction on top of OpenGL known as +“render combinators” provide a convenient way to describe and +compose rendering pipelines. +

+ + + + + + + + + + + + + + + + + diff --git a/manuals/sly/Requirements.html b/manuals/sly/Requirements.html new file mode 100644 index 0000000..0ba35fc --- /dev/null +++ b/manuals/sly/Requirements.html @@ -0,0 +1,91 @@ + + + + + +Sly: Requirements + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Installation   [Contents][Index]

+
+
+ +

2.1 Requirements

+ +

Sly depends on the following packages: +

+ + + + + + + diff --git a/manuals/sly/Shaders.html b/manuals/sly/Shaders.html new file mode 100644 index 0000000..9a2ab3d --- /dev/null +++ b/manuals/sly/Shaders.html @@ -0,0 +1,80 @@ + + + + + +Sly: Shaders + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.9 Shaders

+ + + + + diff --git a/manuals/sly/Shapes.html b/manuals/sly/Shapes.html new file mode 100644 index 0000000..452067d --- /dev/null +++ b/manuals/sly/Shapes.html @@ -0,0 +1,81 @@ + + + + + +Sly: Shapes + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.5 Shapes

+ + + + + + diff --git a/manuals/sly/Signals.html b/manuals/sly/Signals.html new file mode 100644 index 0000000..b24283b --- /dev/null +++ b/manuals/sly/Signals.html @@ -0,0 +1,332 @@ + + + + + +Sly: Signals + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Time   [Contents][Index]

+
+
+ +

4.3.1 Signals

+ +
+
(use-modules (sly signal))
+
+ +

Game state is a function of time. The player’s score, the current +stage, an enemy’s hit points, etc. all change in response to events +that happen at discrete points in time. Typically, this means that a +number of callback procedures are registered to respond to events +which mutate the relevant data structures. However, this approach, +while simple and effective, comes at the price of readability, +reproducibility, and expression. Instead of explicitly mutating data +and entering “callback hell”, Sly abstracts and formalizes the +process using a functional reactive programming style. +

+

In Sly, time-varying values are called “signals”, and they are +defined in a declarative and functional manner. Rather than +describing the process of mutation procedurally, one describes the +relationships between signals instead. The result is a “signal +graph”, a directed acyclic graph of event responses. +

+
+
(define-signal position
+  (signal-fold v+ (vector2 320 240)
+               (signal-map (lambda (v) (v* v 4))
+                           (signal-sample 1 key-arrows))))
+
+ +

This signal describes a relationship between the arrow keys on the +keyboard and the position of the player. signal-sample is used +to trigger a signal update upon every game tick that provides the +current state of the arrow keys. key-arrows is a 2D vector +that maps to the current state of the arrow keys, allowing for 8 +directional movement. This vector is then scaled 4x to make the +player move faster. Finally, the scaled vector is added to the +previous player position via signal-fold. The player’s +position is at (320, 240) initially. As you can see, there are no +callbacks and explicit mutation needed, and the position seems to +magically change with the passage of time. +

+
+
Scheme Procedure: signal? obj
+

Return #t if obj is a signal. +

+ +
+
Scheme Procedure: make-signal value
+

Wrap value in a signal. +

+ +
+
Scheme Syntax: define-signal name value
+

Create a top-level signal variable called name. If the variable +already exists and refers to a signal then its outputs will be spliced +into the new signal. If the given value is not a signal then it will +be put into one via make-signal. +

+

define-signal is particularly useful when working at the REPL. +A top-level signal variable defined by define-signal can be +redefined at runtime, and the signals that depended on the old signal +will continue to work with the new signal. +

+ +
+
Scheme Procedure: signal-ref signal
+

Return the value stored within signal. +

+ +
+
Scheme Procedure: signal-ref-maybe object
+

Return the value stored within object if object is a +signal. Otherwise, return object. +

+ +
+
Scheme Syntax: signal-let ((var signal) …) body
+

Evaluate body in the context of the local bindings defined by +the two-element lists ((var signal) …). +signal-let works like regular let, except that it +derefences signal before binding to var. +

+ +
+
Scheme Syntax: signal-let* ((var signal) …) body
+

Similar to signal-let, but the variable bindings are performed +sequentially. This means that all initialization expressions are +allowed to use the variables defined to the their left in the binding +list. +

+ +
+
Scheme Procedure: signal-set! signal-box value
+

Change the contents of signal to value. This procedure +should almost never be used, except to bootstrap a root node of a +signal graph. +

+ +
+
Scheme Procedure: hook->signal hook init proc
+

Create a new signal whose initial value is init and whose future +values are calculated by applying proc to the arguments passed +when hook is run. +

+ +
+
Scheme Procedure: signal-merge signal1 signal2 . rest
+

Create a new signal whose value is the that of the most recently +updated signal in signal1, signal2, etc. The initial +value is that of signal1. +

+ +
+
Scheme Procedure: signal-zip . signals
+

Create a new signal whose value is a list of the values stored in +signals. +

+ +
+
Scheme Procedure: signal-map proc signal . rest
+

Create a new signal that applies proc to the values of +SIGNAL. More than one input signal may be specified, in which +case proc must accept as many arguments as there are input +signals. +

+ +
+
Scheme Procedure: signal-sample-on value-signal sample-signal
+

Create a new signal that takes on the value of value-signal +whenever sample-signal receives a new value. +

+ +
+
Scheme Procedure: signal-negate signal
+

Create a new signal whose value is the negation of signal by +applying not to each value received. +

+ +
+
Scheme Procedure: signal-fold proc init signal . rest
+

Create a new signal that applies proc with the value received +from signal and the past value of itself, starting with +init. Like signal-map, more than one input signal may be +given. +

+ +
+
Scheme Procedure: signal-filter predicate default signal
+

Create a new signal that takes on the value received from signal +when it satisfies the procedure predicate. The value of the +signal is default in the case that the predicate is never +satisfied. +

+ +
+
Scheme Procedure: signal-drop predicate default signal
+

Create a new signal that takes on the value received from signal +when it does not satisfy the procedure predicate. The +value of the signal is default in the case that the predicate is +never satisfied. +

+ +
+
Scheme Procedure: signal-drop-repeats signal [equal?]
+

Create a new signal that drops the value received from signal +when it is equivalent to the current value. By default, equal? +is used for testing equivalence. +

+ +
+
Scheme Procedure: signal-switch predicate on off
+

Create a new signal whose value is that of the signal on when +the signal predicate is true, or the value of the signal +off otherwise. +

+ +
+
Scheme Procedure: signal-constant constant signal
+

Create a new signal whose value is always constant no matter the +value received from signal. +

+ +
+
Scheme Procedure: signal-count signal [start] [step]
+

Create a new signal that increments a counter by step when a +value from signal is received, starting from start. By +default, start is 0 and step is 1. +

+ +
+
Scheme Procedure: signal-tap proc signal
+

Create a new signal that applies proc for side-effects when a +value from signal is received. The value of the new signal will +always be the value of signal. This signal is a convenient way +to sneak in a procedure that with a side-effect into a signal graph. +Such a signal might write text to a file, or play a sound. +

+ +
+
Scheme Procedure: signal-timestamp signal
+

Create a new signal whose value is a pair, the car of which is the +time that the value of signal was received and the cdr of which +is the received value. +

+ +
+
Scheme Procedure: signal-time signal
+

Create a new signal whose value is the time that the value of +signal was received. +

+ +
+
Scheme Procedure: signal-sample step signal
+

Create a new signal that takes on the value of signal every +step ticks. +

+ +
+
Scheme Procedure: signal-every step
+

Create a new signal that emits step every step ticks. +

+ +
+
Scheme Procedure: signal-since step signal
+

Create a new signal that emits the time since signal was updated +ever step ticks. +

+ +
+
Scheme Procedure: signal-delay delay signal
+

Create a new signal that delays propagation of signal by +delay ticks.. +

+ +
+
Scheme Procedure: signal-throttle delay signal
+

Create a new signal that propagates signal at most once every +delay ticks. +

+ +
+
Scheme Syntax: signal-generator body
+

Create a new signal whose value is the most recently yielded value of +the coroutine defined by body. A special yield syntax is +available within body to specify which values are passed to the +signal. +

+ +
+
+

+Next: , Up: Time   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Sprites.html b/manuals/sly/Sprites.html new file mode 100644 index 0000000..0ea943d --- /dev/null +++ b/manuals/sly/Sprites.html @@ -0,0 +1,116 @@ + + + + + +Sly: Sprites + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.2 Sprites

+ +
+
Scheme Procedure: make-sprite texture [#:anchor]
+

Create a sprite that displays the image in texture. The size of +the mesh is the size of texture in pixels. anchor defines +the origin of the sprite. By default, the anchor is center, +which puts the origin in the middle of the sprite. See +’anchor-texture’ for more anchoring options. +

+ +
+
Scheme Procedure: load-sprite file [#:anchor]
+

Create a sprite from the texture in file whose origin is defined +by anchor. The default anchor is center. +

+ +
+
Scheme Syntax: sprite? obj
+

Return #t if obj is a sprite. +

+ +
+
Scheme Syntax: sprite-texture sprite
+

Return the texture for sprite. +

+ +
+
Scheme Syntax: sprite-mesh mesh
+

Return the mesh for sprite. +

+ +
+
Scheme Procedure: render-sprite sprite
+

Create a renderer for sprite. +

+ + + + + + diff --git a/manuals/sly/Textures.html b/manuals/sly/Textures.html new file mode 100644 index 0000000..b55a4b8 --- /dev/null +++ b/manuals/sly/Textures.html @@ -0,0 +1,81 @@ + + + + + +Sly: Textures + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Rendering   [Contents][Index]

+
+
+ +

4.5.3 Textures

+ + + + + + diff --git a/manuals/sly/The-Game-Loop.html b/manuals/sly/The-Game-Loop.html new file mode 100644 index 0000000..f8a685d --- /dev/null +++ b/manuals/sly/The-Game-Loop.html @@ -0,0 +1,114 @@ + + + + + +Sly: The Game Loop + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Booting   [Contents][Index]

+
+
+ +

4.1.2 The Game Loop

+ +
+
Scheme Variable: draw-hook
+

This hook is run every time the game loop wants to render. Procedures +added to this hook should accept two arguments: dt, the time in +seconds since the last render call; and alpha, a number in the +range [0,1] that indicates how far in between two discrete updates of +the game state the loop is in. The alpha value is important +for smoothing animated values to avoid the “temporal aliasing” +effect that causes choppy looking animations. +

+ +
+
Scheme Variable: after-game-loop-error-hook
+

This hook is run every time the game loop catches an error. +Procedures added to this hook should accept no arguments. +

+ +
+
Scheme Procedure: run-game-loop [#:frame-rate] [#:tick-rate] [#:max-ticks-per-frame]
+

Start the game loop. frame-rate specifies the optimal number +of frames to draw per second. tick-rate specifies the optimal +game logic updates per second. Both frame-rate and +tick-rate are 60 by default. max-ticks-per-frame is the +maximum number of times the game loop will update game state in a +single frame. When this upper bound is reached due to poor +performance, the game will start to slow down instead of becoming +completely unresponsive and possibly crashing. +

+ +
+
Scheme Procedure: stop-game-loop
+

Abort the game loop. +

+ + + + + diff --git a/manuals/sly/Time.html b/manuals/sly/Time.html new file mode 100644 index 0000000..ca2986d --- /dev/null +++ b/manuals/sly/Time.html @@ -0,0 +1,105 @@ + + + + + +Sly: Time + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: API Reference   [Contents][Index]

+
+
+ +

4.3 Time

+ +

In the context of Sly, time is not the seconds that are passing in the +real world, but the virtual clock that is ticking within the game +loop. This manual refers to a “tick” as the smallest unit of time. +There are a user-defined amount of ticks in a real world second, but +by default it is 60. +

+

Sly includes several useful modules for working with time. Coroutines +are procedures that can be paused and resumed, agendas are procedure +schedulers, and signals built atop both agendas and coroutines to +provide a high-level functional reactive programming API. +

+

For most use-cases, the signal module should be used exclusively, but +the agenda and coroutine modules are useful for building new +high-level abstractions. +

+ + + + + + + + + + + diff --git a/manuals/sly/Transforms.html b/manuals/sly/Transforms.html new file mode 100644 index 0000000..3fd0b3d --- /dev/null +++ b/manuals/sly/Transforms.html @@ -0,0 +1,236 @@ + + + + + +Sly: Transforms + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+
+ +

4.2.3 Transforms

+ +
+
(use-modules (sly math transform))
+
+ +

Transforms are 4x4 transformation matrices. Matrices are the +fundamental structure for modeling affine transformations such as +translation, rotation, and scaling. Complex transformations are +created by composing many simpler ones with the transform* +procedure. +

+

It’s a good idea to use transforms in a functional manner by treating +them as immutable. This is made easy because almost every procedure +in this module returns a new transform rather than mutating an +existing one. However, in some cases it is necessary to use mutable +transforms via transform*! for performance reasons. +

+
+
Scheme Procedure: make-transform aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd
+

Create a new transform initialized with the given 16 values in +column-major format. +

+ +
+
Scheme Variable: null-transform
+

A transform composed entirely of zeroes. +

+ +
+
Scheme Variable: identity-transform
+

The multiplicative identity transform. +

+ +
+
Scheme Syntax: transform? obj
+

Return #t if obj is a transform. +

+ +
+
Scheme Syntax: transform-matrix transform
+

Return the underlying 4x4 floating point array for transform. +

+ +
+
Scheme Procedure: transpose transform
+

Return a transform that is the transpose of transform. +

+ +
+
Scheme Procedure: transform-vector2 transform v
+

Apply transform to the 2D vector v. +

+ +
+
Scheme Procedure: transform-position transform
+

Return a 3D vector containing the positional data stored in +transform. +

+ +
+
Scheme Procedure: transform+ . transforms
+

Return the sum of transforms. Return null-transform if +called without any arguments. +

+ +
+
Scheme Procedure: transform* . transforms
+

Return the product of transforms. Return identity-transform if +called without any arguments. +

+ +
+
Scheme Procedure: transform*! dest a b
+

Multiply a and b, storing the result in dest. +

+ +
+
Scheme Procedure: translate v
+

Create a new transform that translates by the 2D or 3D vector v. +

+ +
+
Scheme Procedure: scale v
+
Scheme Procedure: scale scalar
+

Create a new transform that scales by the 2D or 3D vector v, or +by scalar to scale evenly in all dimensions. +

+ +
+
Scheme Procedure: rotate-x angle
+

Create a new transform that rotates the x axis by angle radians. +

+ +
+
Scheme Procedure: rotate-y angle
+

Create a new transform that rotates the y axis by angle radians. +

+ +
+
Scheme Procedure: rotate-z angle
+

Create a new transform that rotates the z axis by angle radians. +

+ +
+
Scheme Procedure: rotate q
+

Convert the quaternion q into a rotation transform. +See Quaternions for more information. +

+ +

One of the most common composite transformations is a translation +multiplied by a scale multiplied by a rotation. The +build-transform procedure is a convenience procedure for this +case. +

+
+
Scheme Procedure: build-transform [#:position=(vector3 0 0 0)] [#:scale=1] [#:rotation=null-quaternion]
+

Build a transform by multiplying the following transforms: +

+
    +
  • translation by position +
  • rotation by rotation +
  • scaling by scale +
+ +
+ +

The procedures below are useful for creating projection and view +matrices for cameras. See Cameras for more details. +

+
+
Scheme Procedure: orthographic-projection left right top bottom near far
+

Create a new transform that represents an orthographic projection for +the vertical clipping plane left and right, the horizontal +clipping plane top and bottom, and the depth clipping +plane near and far. +

+ +
+
Scheme Procedure: perspective-projection field-of-vision aspect-ratio near far
+

Create a new transform that represents a perspective projection with a +field-of-vision in degrees, the desired aspect-ratio, and +the depth clipping plane near and far. +

+ +
+
Scheme Procedure: look-at eye center [up=(vector3 0 1 0)]
+

Create a view transform that looks from 3D vector eye at the 3D +vector center, with the 3D vector up indicating which +direction points up. +

+ +
+
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Tweening.html b/manuals/sly/Tweening.html new file mode 100644 index 0000000..9b0b741 --- /dev/null +++ b/manuals/sly/Tweening.html @@ -0,0 +1,101 @@ + + + + + +Sly: Tweening + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Tweens   [Contents][Index]

+
+
+ +

4.2.4.2 Tweening

+ +

The tween procedure creates new procedures to be used for +animation. For example, the code below creates a tween procedure that +linearly interpolates (0, 0) to (10, 10) over the course of ten ticks. +

+
+
(define t (tween vlerp ease-linear (vector2 0 0) (vector2 10 0) 10))
+
+(t 5) ;; => (vector2 5 5)
+
+ +
+
Scheme Procedure: tween interpolator ease start end duration
+

Return a procedure that interpolates from start to end in +duration ticks. The value returned for a given time is +determined by applying ease with the time ratio to acquire an +alpha value, and then applying interpolator with +start, end, and alpha. alpha is a rational +number in the range [0, 1]. +

+ + + + + + diff --git a/manuals/sly/Tweens.html b/manuals/sly/Tweens.html new file mode 100644 index 0000000..35634d1 --- /dev/null +++ b/manuals/sly/Tweens.html @@ -0,0 +1,99 @@ + + + + + +Sly: Tweens + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Math   [Contents][Index]

+
+
+ +

4.2.4 Tweens

+ +
+
(use-modules (sly math tween))
+
+ +

Tweening is the process of interpolating between two key values to +create the illusion of smooth animation. There are many different +ways to alter the rate of change, or “ease”, one value to another. +

+

When tween functions are combined with Signals, the result is +animation! +

+ + + + + + + + + + diff --git a/manuals/sly/Utilities.html b/manuals/sly/Utilities.html new file mode 100644 index 0000000..7b5fcbe --- /dev/null +++ b/manuals/sly/Utilities.html @@ -0,0 +1,90 @@ + + + + + +Sly: Utilities + + + + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: API Reference   [Contents][Index]

+
+
+ +

4.6 Utilities

+ + + + + + + + + + + + diff --git a/manuals/sly/Vectors.html b/manuals/sly/Vectors.html new file mode 100644 index 0000000..14d2b91 --- /dev/null +++ b/manuals/sly/Vectors.html @@ -0,0 +1,220 @@ + + + + + +Sly: Vectors + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Math   [Contents][Index]

+
+
+ +

4.2.1 Vectors

+ +
+
(use-modules (sly math vector))
+
+ +

Not to be confused with Guile’s vector data structure, Sly provides +dedicated data types for 2D, 3D, and 4D vectors in the mathematical +sense. Vector procedures are polymorphic, and will work with any +dimensionality that the operation supports. In some cases, such as +v+, v-, and v*, scalar values may be passed as +well. +

+

The <vector2>, <vector3>, and <vector4> type +descriptors have been exposed for use with Guile’s (ice-9 +match) pattern matching module. +

+
+
Record Type: <vector2>
+

2D vector data type with fields x and y, in that order. +

+ +
+
Record Type: <vector3>
+

3D vector data type with fields x, y, and z, in +that order. +

+ +
+
Record Type: <vector4>
+

4D vector data type with fields x, y, z and +w, in that order. +

+ +
+
Scheme Syntax: vector2 x y
+

Create a new 2D vector with coordinates (x, y). +

+ +
+
Scheme Syntax: vector3 x y z
+

Create a new 3D vector with coordinates (x, y, z). +

+ +
+
Scheme Syntax: vector4 x y z w
+

Create a new 4D vector with coordinates (x, y, z, +w). +

+ +
+
Scheme Syntax: vector2? v
+

Return #t if v is a 2D vector. +

+ +
+
Scheme Syntax: vector3? v
+

Return #t if v is a 3D vector. +

+ +
+
Scheme Syntax: vector4? v
+

Return #t if v is a 4D vector. +

+ +
+
Scheme Procedure: vx v
+

Return the x coordinate of the 2D, 3D, or 4D vector v. +

+ +
+
Scheme Procedure: vy v
+

Return the y coordinate of the 2D, 3D, or 4D vector v. +

+ +
+
Scheme Procedure: vz v
+

Return the z coordinate of the 3D or 4D vector v. +

+ +
+
Scheme Procedure: vw v
+

Return the w coordinate of the 4D vector v. +

+ +
+
Scheme Procedure: vmap proc v
+

Return a new vector that is the result of applying proc to each +element of the 2D, 3D, or 4D vector v. +

+ +
+
Scheme Procedure: v+ . vectors
+

Return the sum of all vectors. vectors may contain scalar +values, but it may not contain vectors of mixed dimensions. +

+ +
+
Scheme Procedure: v- . vectors
+

Return the difference of all vectors. vectors may contain scalar +values, but it may not contain vectors of mixed dimensions. +

+ +
+
Scheme Procedure: v* . vectors
+

Return the product of all vectors. vectors may contain +scalar values, but it may not contain vectors of mixed dimensions. +

+ +
+
Scheme Procedure: vdot v1 v2
+

Return the dot product of v1 and v2. Both vectors must be +of the same dimensionality. +

+ +
+
Scheme Procedure: vcross v1 v2
+

Return the cross product of the 3D vectors v1 and v2. +

+ +
+
Scheme Procedure: magnitude v
+

Return the magnitude of the vector v. +

+ +
+
Scheme Procedure: normalize v
+

Return the normalized form of the vector v. +

+ +
+
Scheme Procedure: vlerp v1 v2 alpha
+

Return the linear interpolation of v1 and v2 by the scalar +alpha. alpha is expected to be in the range [0, 1]. +

+ +
+
+

+Next: , Up: Math   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/Window-Creation.html b/manuals/sly/Window-Creation.html new file mode 100644 index 0000000..5e6dfc7 --- /dev/null +++ b/manuals/sly/Window-Creation.html @@ -0,0 +1,177 @@ + + + + + +Sly: Window Creation + + + + + + + + + + + + + + + + + + + + +
+

+Next: , Up: Booting   [Contents][Index]

+
+
+ +

4.1.1 Window Creation

+ +
+
(use-modules (sly window))
+
+ +

Sly uses the windowing features of SDL 1.2 under the hood, which +currently restricts Sly applications to using only a single window. +SDL2 support will come in a future release. +

+

The window data structure: +

+
+
Scheme Procedure: make-window [#:title] [#:resolution] [#:fullscreen?]
+

Create a new window object. title is a string to display in +the window’s title bar. resolution is a 2D vector that +specifies the dimensions of the window in pixels. fullscreen? +is a boolean that toggles fullscreen mode. +

+ +
+
Scheme Procedure: window? obj
+

Return #t if obj is a window. +

+ +
+
Scheme Procedure: window-title window
+

Return the title of window. +

+ +
+
Scheme Procedure: window-resolution window
+

Return the resolution of window. +

+ +
+
Scheme Procedure: window-fullscreen? window
+

Return #t if window is set to fullscreen mode. +

+ +

The following signals hold the state of the current window: +

+
+
Scheme Signal: window-width
+

The width of the current window. +

+ +
+
Scheme Signal: window-height
+

The height of the current window. +

+ +
+
Scheme Signal: window-size
+

The size of the current window as a 2D vector. +

+ +

In addition to signals, the following hooks are triggered upon certain +changes to window state: +

+
+
Scheme Variable: window-resize-hook
+

This hook is run when the current window is resized. Procedures added +to this hook should accept two arguments: Numbers width and +height, the new dimensions of the window in pixels. +

+ +
+
Scheme Variable: window-close-hook
+

This hook is run when the close button is clicked. Note that this +event is simply a request from the user to close the window, it does +not mean that the window has actually been closed. Procedures added +to this hook should accept no arguments. +

+ +

The following procedures are used to open/close windows: +

+
+
Scheme Procedure: open-window [window]
+

Open the game window using the settings in window. +

+ +
+
Scheme Procedure: close-window
+

Close the currently open window. +

+ +
+
Scheme Syntax: with-window window body
+

Evaluate body in the context of window. window +is opened before evaluating body, and closed afterwards. +

+ +
+
+

+Next: , Up: Booting   [Contents][Index]

+
+ + + + + diff --git a/manuals/sly/index.html b/manuals/sly/index.html new file mode 100644 index 0000000..90adb63 --- /dev/null +++ b/manuals/sly/index.html @@ -0,0 +1,201 @@ + + + + + +Sly: Top + + + + + + + + + + + + + + + + + + +

Sly

+ + + +

Table of Contents

+ +
+ + +
+ + + +
+

+Next: , Up: (dir)   [Contents][Index]

+
+
+ +

Sly

+ +

Copyright © 2013, 2014 David Thompson davet@gnu.org +

+
+

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. +

+
+ +

The document was typeset with +GNU Texinfo. +

+ + + + + + + + + + + + + +
+
+

+Next: , Up: (dir)   [Contents][Index]

+
+ + + + + -- cgit v1.2.3