52 lines
2.1 KiB
Markdown
52 lines
2.1 KiB
Markdown
# 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.
|
|
<Context> - Placeholder for context arguments. Currently I didn't think of this but I acknowledge that I might need them.
|
|
<T> - 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<ProjectileData>
|