123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Asciidoctor 1.5.4"><title>docs</title><link rel="stylesheet" href="./asciidoctor.css">
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
- <link rel="stylesheet" href="./coderay-asciidoctor.css"></head><body class="article toc2 toc-left"><div id="header"><h1>docs</h1><div class="details"><span class="author" id="author"></span><br><span id="revnumber">version ,</span> <span id="revdate">2016/03/17 20:48</span></div><div id="toc" class="toc2"><div id="toolbar"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/src/docs/asciidoc/jme3/advanced/atom_framework/docs.adoc"><i class="fa fa-pencil-square" aria-hidden="true"></i></a><a href="https://github.com/jMonkeyEngine/wiki/new/master/src/docs/asciidoc/jme3/advanced/atom_framework/"><i class="fa fa-plus-square" aria-hidden="true"></i></a></div><div id="toctitle">Table of Contents</div><ul class="sectlevel1"><li><a href="#atom-framework-documentations">Atom Framework Documentations</a><ul class="sectlevel2"><li><a href="#structure-of-the-documentations">Structure of the Documentations</a></li></ul></li><li><a href="#download-and-setup">Download and Setup</a></li><li><a href="#design-documentation">Design documentation</a></li><li><a href="#the-code">The Code</a><ul class="sectlevel2"><li><a href="#programming-aspects">Programming aspects</a></li><li><a href="#polygot-programming">Polygot programming</a></li><li><a href="#how-can-i-structure-my-code">How can I structure my code?</a></li><li><a href="#code-generation">Code generation</a></li><li><a href="#more-coding-convention">More coding convention</a></li><li><a href="#configurations">Configurations</a></li><li><a href="#scripting">Scripting</a></li></ul></li><li><a href="#the-project">The Project</a><ul class="sectlevel2"><li><a href="#project-structure">Project structure</a></li><li><a href="#code-or-data">Code or Data?</a></li><li><a href="#project-settings">Project settings</a></li></ul></li><li><a href="#usage-of-sdk">Usage of SDK</a><ul class="sectlevel2"><li><a href="#for-3d-editing">For 3D editing</a></li><li><a href="#for-project-management">For project management</a></li><li><a href="#for-code-generation">For code generation</a></li></ul></li><li><a href="#components-documentations">Components documentations</a><ul class="sectlevel2"><li><a href="#atom-libraries">Atom Libraries</a></li><li><a href="#inside-atomsdk">Inside AtomSDK</a></li></ul></li></ul></div></div><div id="content"><div class="sect2"><h3 id="atom-framework-documentations">Atom Framework Documentations</h3><div class="paragraph"><p>Welcome this is the main entrance of Atom framework documentation. Here you will find all the resource you need to start developing with Atom framework. First take a look at the structure of the documentation.</p></div>
- <div class="sect2"><h3 id="structure-of-the-documentations">Structure of the Documentations</h3><div class="olist arabic"><ol class="arabic"><li><p>Architecture Design</p></li><li><p>General docs</p><div class="olist loweralpha"><ol class="loweralpha" type="a"><li><p>Setup</p></li><li><p>Coding and project structure convention</p></li><li><p>Usages of SDK</p></li></ol></div></li><li><p>Component’s docs</p><div class="olist loweralpha"><ol class="loweralpha" type="a"><li><p>AtomCore</p></li><li><p>AtomEx</p></li><li><p>AtomSDK</p></li><li><p>TeeHee .. others</p></li></ol></div></li></ol></div></div></div>
- <div class="sect1"><h2 id="download-and-setup">Download and Setup</h2><div class="sectionbody"><div class="paragraph"><p><a href="../../../jme3/advanced/atom_framework/docs/setup.html">Download and Setup instructions</a></p></div></div></div>
- <div class="sect1"><h2 id="design-documentation">Design documentation</h2><div class="sectionbody"><div class="paragraph"><p>Design & Architecture documentation page:
- <a href="../../../jme3/advanced/atom_framework/design.html">design</a></p></div></div></div>
- <div class="sect2"><h3 id="the-code">The Code</h3><div class="admonitionblock important"><table><tr><td class="icon"><i class="fa icon-important" title="Important"></i></td><td class="content"><div class="paragraph"><p>Make sure that you’ve read and understanded Atom’s Design part</p></div></td></tr></table></div>
- <div class="sect2"><h3 id="programming-aspects">Programming aspects</h3><div class="ulist"><ul><li><p>Java</p></li><li><p>Groovy</p></li><li><p>XML</p></li></ul></div></div>
- <div class="sect2"><h3 id="polygot-programming">Polygot programming</h3><div class="paragraph"><p>AtomCore (pure Java) supports:</p></div>
- <div class="ulist"><ul><li><p>Functional reactive programming</p></li><li><p>Flow based programming</p></li><li><p>Component based programming</p></li><li><p>Composite based programming</p></li><li><p>Data-driven & Model-driven & Domain-driven</p></li></ul></div>
- <div class="paragraph"><p>Because AtomScripting and others use Groovy, so it inherit (a lot of) polygot capacity from Groovy.</p></div>
- <div class="paragraph"><p>Read: <a href="http://groovy.codehaus.org/Polyglot+Programming+with+Groovy">http://groovy.codehaus.org/Polyglot+Programming+with+Groovy</a></p></div></div>
- <div class="sect2"><h3 id="how-can-i-structure-my-code">How can I structure my code?</h3><div class="literalblock"><div class="content"><pre>How can I structure my code in Atom framework and in JME3 games. What is the best practices, some patterns, pros cons and caveat?</pre></div></div>
- <div class="paragraph"><p><a href="http://hub.jmonkeyengine.org/forum/topic/how-to-structure-the-game-code/">http://hub.jmonkeyengine.org/forum/topic/how-to-structure-the-game-code/</a></p></div>
- <div class="paragraph"><p>More detailed, <a href="../../../jme3/advanced/atom_framework/docs/code/structure.html">Code structure explained</a></p></div>
- <div class="paragraph"><p>You can also find a better examples here in my game examples:
- <a href="../../../jme3/atomixtuts.html">Atomix’s tutorials games</a></p></div></div>
- <div class="sect2"><h3 id="code-generation">Code generation</h3><div class="paragraph"><p><a href="http://en.wikipedia.org/wiki/Code_generation_%28compiler%29">http://en.wikipedia.org/wiki/Code_generation_%28compiler%29</a></p></div>
- <div class="paragraph"><p>Atom support code generation from multiple sources and to various targets to help speed up and unite production pipeline. <a href="../../../jme3/advanced/atom_framework/codegen.html">CodeGen</a> - Ultimate tools for code genration corporate with <a href="../../../jme3/advanced/atom_framework/atomexasset.html">AtomExAsset</a> - Ultimate tools for game assets management is 2 facilities in charge for the job.</p></div>
- <div class="sect3"><h4 id="sources">Sources</h4><div class="ulist"><ul><li><p>UML</p></li><li><p>ECore</p></li><li><p>Java code or Java classes with annotations</p></li><li><p>Code gen diagrams (modified UML diagrams for games)</p></li><li><p>3D Model and assets</p></li></ul></div></div>
- <div class="sect3"><h4 id="targets">Targets</h4><div class="ulist"><ul><li><p>Other Model format - via ECore, UML</p></li><li><p>Groovy or Java - via ECore, UML, ANTLR</p></li><li><p>Java bytecode - via instrument and transformation ASM</p></li><li><p>JavaScript - via GWT, ANTLR (supervisor translation)</p></li><li><p>StringTemplate, XML, Text, Configurations … and other textbased - via StringTemplate</p></li><li><p>Assetpack and other kind of assets - via processing pipeline</p></li></ul></div></div></div>
- <div class="sect2"><h3 id="more-coding-convention">More coding convention</h3></div>
- <div class="sect2"><h3 id="configurations">Configurations</h3><div class="paragraph"><p>Atom support configs based in Apache Commons Configurations:
- <a href="http://commons.apache.org/proper/commons-configuration/">http://commons.apache.org/proper/commons-configuration/</a></p></div>
- <div class="paragraph"><p>Apache Commons Configurations supported configuration format:</p></div>
- <div class="ulist"><ul><li><p>Properties</p></li><li><p>XML</p></li><li><p>JMX</p></li></ul></div>
- <div class="paragraph"><p>Additionally Atom support configuration via:</p></div>
- <div class="ulist"><ul><li><p>Java Annotations</p></li><li><p>GroovyConfigs</p></li></ul></div></div>
- <div class="sect2"><h3 id="scripting">Scripting</h3><div class="paragraph"><p>Default scripting language of Atom framework is Groovy.</p></div>
- <div class="paragraph"><p>Some optional groovy facilities are also included (gpars, ASM, ANTLR…)</p></div>
- <div class="admonitionblock important"><table><tr><td class="icon"><i class="fa icon-important" title="Important"></i></td><td class="content"><div class="paragraph"><p>But note that AtomCore is not depend in Groovy.</p></div></td></tr></table></div>
- <div class="paragraph"><p>You can also do scripting in other Java scripting frameworks like BeanScript or JavaScript.</p></div>
- <div class="paragraph"><p>Scripting leverage game programming a lot. You can stay inside the running game and make changes into the game enviroment (is just one small advantage aside of other super cool features!). So read about how to do scripting here:</p></div>
- <div class="paragraph"><p><a href="http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:atom_framework:atomscripting">http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:atom_framework:atomscripting</a></p></div>
- <div class="paragraph"><p><a href="http://hub.jmonkeyengine.org/wiki/doku.php/jme3:scripting">http://hub.jmonkeyengine.org/wiki/doku.php/jme3:scripting</a></p></div></div></div>
- <div class="sect2"><h3 id="the-project">The Project</h3><div class="paragraph"><p>Atom provide two editing facilities : AtomEditor for ingame editing and AtomSDK for desktop swing based in Netbean. Both of them working with a Project format and structure defined in AtomEditor structure.</p></div>
- <div class="paragraph"><p>The main format to save Project informations is XML. With default settings format is normal XML, it can be set to used a multiversion XML tree (imagine git but effective in XML).</p></div>
- <div class="paragraph"><p><a href="../../../jme3/advanced/atom_framework/docs/project.html">Project details</a></p></div>
- <div class="sect2"><h3 id="project-structure">Project structure</h3><div class="paragraph"><p>The project also has a folder structure (directories and files) convention just like JME3. Aware of that when coding or making assets.</p></div>
- <div class="paragraph"><p><a href="../../../jme3/advanced/atom_framework/docs/project/structure.html">Project structure</a></p></div></div>
- <div class="sect2"><h3 id="code-or-data">Code or Data?</h3><div class="paragraph"><p>First take a look at how Atom manage Data…</p></div>
- <div class="paragraph"><p><a href="../../../jme3/advanced/atom_framework/atomexasset.html">AtomExAsset</a></p></div>
- <div class="paragraph"><p><strong>One question you may ask: if Atom was so Data+Model-driven and generative. Is code still code or is Data?</strong></p></div>
- <div class="olist arabic"><ol class="arabic"><li><p>Code is still code in almost every situations.</p></li><li><p>Till it’s sent into generation pipelines (when you hit build or so), the new code and assets are generated.</p></li><li><p>In pakaging phase, code (as byte code or scripts) are packed completely in jar (or packages format). Some of them are ofucased, zipped then translate via network. They are now data.</p></li><li><p>In the run-time enviroment again, they are data of the JVM to execute which instruct the machine to do something (your games)</p></li><li><p>Some of data are still data the whole time :Images or 3D Models and almost Assets for examples. But because some user data can be embeded in j3o (script for example) so they are also code in other perspective.</p></li></ol></div>
- <div class="paragraph"><p>The distingish between data and code just need to be clear if you like to process on them. As long as you don’t, they are same bit, forget about the differencies totally - who give a $%it!</p></div></div>
- <div class="sect2"><h3 id="project-settings">Project settings</h3></div></div>
- <div class="sect2"><h3 id="usage-of-sdk">Usage of SDK</h3><div class="sect2"><h3 id="for-3d-editing">For 3D editing</h3></div>
- <div class="sect2"><h3 id="for-project-management">For project management</h3></div>
- <div class="sect2"><h3 id="for-code-generation">For code generation</h3></div></div>
- <div class="sect2"><h3 id="components-documentations">Components documentations</h3><div class="sect2"><h3 id="atom-libraries">Atom Libraries</h3><div class="paragraph"><p>AtomCore</p></div>
- <div class="paragraph"><p>AtomSripting</p></div>
- <div class="paragraph"><p>AtomEditor</p></div>
- <div class="paragraph"><p>Atom2D</p></div>
- <div class="paragraph"><p>Atom2DEditor</p></div>
- <div class="paragraph"><p>CodeGen</p></div>
- <div class="paragraph"><p>CityGen</p></div>
- <div class="paragraph"><p>AtomEx</p></div>
- <div class="paragraph"><p>AtomExAsset</p></div>
- <div class="paragraph"><p>AtomLight</p></div>
- <div class="paragraph"><p>AtomAnim</p></div>
- <div class="paragraph"><p>AtomAI</p></div>
- <div class="paragraph"><p>AtomTestbed</p></div></div>
- <div class="sect2"><h3 id="inside-atomsdk">Inside AtomSDK</h3><div class="paragraph"><p>TeeHeeComposer</p></div>
- <div class="paragraph"><p>CharacterCreator</p></div>
- <div class="paragraph"><p>MMO-Machines</p></div></div></div></div><div id="footer"><div id="footer-text">Version <br>Last updated 2016-06-25 13:15:45 UTC</div></div></body></html>
|