Atom Framework Documentations
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.
Structure of the Documentations
-
Architecture Design
-
General docs
-
Setup
-
Coding and project structure convention
-
Usages of SDK
-
-
Component’s docs
-
AtomCore
-
AtomEx
-
AtomSDK
-
TeeHee .. others
-
Download and Setup
Design documentation
Design & Architecture documentation page: design
The Code
Programming aspects
-
Java
-
Groovy
-
XML
Polygot programming
AtomCore (pure Java) supports:
-
Functional reactive programming
-
Flow based programming
-
Component based programming
-
Composite based programming
-
Data-driven & Model-driven & Domain-driven
Because AtomScripting and others use Groovy, so it inherit (a lot of) polygot capacity from Groovy.
How can I structure my code?
How can I structure my code in Atom framework and in JME3 games. What is the best practices, some patterns, pros cons and caveat?
More detailed, Code structure explained
You can also find a better examples here in my game examples: Atomix’s tutorials games
Code generation
Atom support code generation from multiple sources and to various targets to help speed up and unite production pipeline. CodeGen - Ultimate tools for code genration corporate with AtomExAsset - Ultimate tools for game assets management is 2 facilities in charge for the job.
Sources
-
UML
-
ECore
-
Java code or Java classes with annotations
-
Code gen diagrams (modified UML diagrams for games)
-
3D Model and assets
Targets
-
Other Model format - via ECore, UML
-
Groovy or Java - via ECore, UML, ANTLR
-
Java bytecode - via instrument and transformation ASM
-
JavaScript - via GWT, ANTLR (supervisor translation)
-
StringTemplate, XML, Text, Configurations … and other textbased - via StringTemplate
-
Assetpack and other kind of assets - via processing pipeline
More coding convention
Configurations
Atom support configs based in Apache Commons Configurations: http://commons.apache.org/proper/commons-configuration/
Apache Commons Configurations supported configuration format:
-
Properties
-
XML
-
JMX
Additionally Atom support configuration via:
-
Java Annotations
-
GroovyConfigs
Scripting
Default scripting language of Atom framework is Groovy.
Some optional groovy facilities are also included (gpars, ASM, ANTLR…)
You can also do scripting in other Java scripting frameworks like BeanScript or JavaScript.
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:
The Project
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.
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).
Project structure
The project also has a folder structure (directories and files) convention just like JME3. Aware of that when coding or making assets.
Code or Data?
First take a look at how Atom manage Data…
One question you may ask: if Atom was so Data+Model-driven and generative. Is code still code or is Data?
-
Code is still code in almost every situations.
-
Till it’s sent into generation pipelines (when you hit build or so), the new code and assets are generated.
-
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.
-
In the run-time enviroment again, they are data of the JVM to execute which instruct the machine to do something (your games)
-
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.
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!
Project settings
Usage of SDK
For 3D editing
For project management
For code generation
Components documentations
Atom Libraries
AtomCore
AtomSripting
AtomEditor
Atom2D
Atom2DEditor
CodeGen
CityGen
AtomEx
AtomExAsset
AtomLight
AtomAnim
AtomAI
AtomTestbed
Inside AtomSDK
TeeHeeComposer
CharacterCreator
MMO-Machines