Docs update

This commit is contained in:
Rendo 2026-03-28 17:29:00 +05:00
commit c5d69da608
3 changed files with 84 additions and 10 deletions

32
docs/algorithms.md Normal file
View file

@ -0,0 +1,32 @@
# Algorithms
In this document are listed some of algorithms for the sake of planning.
# Genome
## Generation examples
Examples section's goal is to document standard plant generation process.
Documented generation process is easier to visualize.
### Peashooter example
1. Create [generator] root
2. Add [transfer] stem
3. Add [trigger] head
4. Add [modifier] leaf
5. Return to head
6. Add [output] face
### Sunflower example
1. Create [dummy] root
2. Add [dummy] stem
3. Add [mixed] head
4. Add [output] face
### Cherry bomb example
1. Create [generator] root
2. Add [output] head
3. Add [dummy] face
4. Return to root
5. Repeat steps 3 and 4
### Potato mine example
1. Create [generator] root
2. Add [trigger] head
3. Add [dummy] face
### Wall-nut example
1. Create [dummy] root
2. Create [dummy] face

View file

@ -1,10 +0,0 @@
# 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.
## 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

52
docs/principles.md Normal file
View file

@ -0,0 +1,52 @@
# 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>