2.1 KiB
Principles
This document describes principles I have came up with. I don't think I'd be angry if you use them in your projects. This document is mostly for me to remember things.
Used terms and placeholders
(Very WIP) - This section is subject to change. - Placeholder for context arguments. Currently I didn't think of this but I acknowledge that I might need them. - Type that doesn't exist yet but is obvious in context of section.
The core principles are:
- Every plant can be represented as graph (sometimes as a tree).
- Every value of a node can be also a node (I might iterate on this one).
- Every node can have input and output.
- If node has input, and parent has output, parent must spread its output.
Genome
Gene
Genes are main logic elements of a plant. They're nodes of genetics graph. I might iterate over this, but in current implementation is a little bit functional due to complications of OOP in Rust. Gene structure consists of variables specific to gene, type and overridable methods for displaying itself and its children.
(Very WIP) Variables:
- Dictionary with some string type as a key and Argument enum.
- Argument enum consists of f32 and i64.
Type of gene is enum that provides different functions. Here is (Very WIP) list of every type and its provided functions:
Dummy - gene without behaviour.
Transfer - gene that defines rules of flow.
distribute_between_children(<context>,flow: mut <Flow>) -> <Distribution>
Pure Generator - gene that only creates flow.
create_flow(<context>,current_flow: mut <Flow>) -> <Flow>- won't be called if flow isn't empty.
Modifier - gene that modifies or creates flow.
modify_flow(<context>,current_flow: mut <Flow>) -> <Flow>
Consumer - gene that consumes flow.
consume(<context>)
Trigger - gene that interacts with context to conditionally progress flow.
check_trigger(<context>) -> bool
Observer - gene that observes flow.
observe(<context>,current_flow: mut <Flow>)
Flow
Flow is data that circulates across genome. If not consumed, goes to the void.
Currently it is something like Vec