NOTE: This is currently the pre-release. This means menus may be disabled, styling may be broken, routing may be disabled, and certain optimizations may still be missing.
An app to generate cellular automata
1D, 2D, and 3D cell populations can be fully rendered in a 2 or 3 dimension viewer. The cell population shape, state, rules, and neighbors can all be customized with a high degree of flexibility.
This repo contains the code for
- the
https://cellulose.studio
app, - a cellular automata generator
- a cellular automata visualizer
In the future, the generator and visualizer will be broken out into their own repos
With regards to the /src folder:
Images, fonts, etc...
Markdown files that are rendered into documentation for the app. These need to be registered in the Documentation
scene, which will allow the app to parse the files with the correct styling and configure the router to be aware of them.
Components that are scene agnostic. They don't know their positioning in the app or what other features are being shown in a scene. Their role is to encapsulate feature logic.
Code that should be broken out into independent repos.
automata
: The automata generator. This is a bottle neck at the moment and will likely be rewritten in OCaml and transpiled to JS or WASM.viewer
: The automata viewer. Specific viewers for 1D, 2D, 3D cells and 2D, 3D viewspopup
: React component to handle popups for this appindexMSTHistory
: A mobx model that records another models node history and stores the data under a unqiue key. This allows saving the history of a node over specific model attributes, and easily reaplying that node state for a set of attributesOrbitControls
: A third party lib to control movement around Three.js scenes. The Three.js community tends to do extensions as single files that you drop into your repo.query-string
andstrict-uri-encode
: are both third party libs which weren't bundled correctly and thus give problems during the build phase of the app if they are used as node_module dependencies. Thus, they have been moved into the app.
Routeable components that are composed of one or more feature. Scenes can be stacked or swapped for one another and custom transitions can be defined for movement between specific pairs.
Business and helper logic used by the app.
/services/router
contains the routing service which controls movement around the app and how router query strings are resolved
The mobx state tree (MST) models. These are used to sync application state between various features and services
- Hook mobx changes into automata viewer. AKA: changing a menu field will change the automata.
- Make popups appear correctly when the menu is docked in different positions
- Add media queries to the Documentation scene
- Add media queries to the View scene
- Improve styling of View scene (background opacity, padding around docked menu items, docked vs undocked styles, etc...)
- Add popup menu for rule selection
- Add popup menu for neighbor selection
- Add popup menu for genesis customization
- Add media player controls (pause, rewind, reverse direction, jump to time)
- Add snapshot tests to scenes and features
- Add unit tests for
services
,state
, customlibs
, and maybe a few components, if necessary - Add flowtypes
- Add the ability to record an automata
- Add the ability to share an automata
- Explore automata the community has created