Wiring
General system overview
Shallow definitions:
- Circuit component is a backbone of whole system. It stores information about from where and to where data has to be passed.
 - Wire is part of Circuit (one circuit can have many wires) it stores data from what entity and under what field name value has to be passed to what entity and field name.
 - Wiring component is a "worker" it knows what data it has and what has to be performed when executing it.
 - OutputFormula takes inputs (and own config) and produces output.
 
If something can't be calculated, but given place has to result in some value - it will result in f32 0.
Each wiring component has 3 pieces of information:
- Inputs (data injected by Circuit)
 - Outputs (information of how to compute output)
 - Actions (information about what should happen if inputs are in given state)
 
Each wiring tick has 3 stages:
- Compute (take each Wiring component, feed inputs into output formulas, produce outputs)
 - Transport (get outputs of previous step and using Circuit pass them around)
 - Dispatch (get inputs (note that we are using modified state by transport) and dispatch logic)
 
Compute
- Take all wiring components and map them
 - Calculate each outputs output formula
 - Construct outputs with type 
HashMap<E, Hashmap<F, V>>where:- E is an 
specs::Entitythat holds certain wiring component. - F is a 
Stringrepresenting field name. - V is a resulting value of OutputFormula. (at the moment, all results are 
f32) 
 - E is an 
 
Transport
- Take circuits and for each circuit take attached wires *
 - Take every wire and for each wire *
 - Get 
from what entity,from what field,to what entityandto what fieldfrom wire. - Perform something like 
to what entity.inputs[to what field] =from what entity[from what field] ** 
* It is basically "take every wire" in loaded server data
** Keep in mind that we are using product of Compute step as right hand of this simplification.
Dispatch
- For each action in every wiring component
 - If wiring action formula output* is more or equal to action threshold...
 - Dispatch each effect attached to the wiring action
 
* Calculated using inputs
Output formulas
Constant
Outputs constant value.
Input
Outputs value of input field under given name.
Logic
Allows composing output formulas. It takes left and right output formulas which are calculated, and then performs logic on them.
Available logic kinds (I refer to left and right output as side):
- Min - return value of lower side.
 - Max - return value of higher side.
 - Sub - return value of 
left - right. - Sum - return value of 
left + right. - Mul - return value of 
left * right. 
Sine wave (not implemented)
Takes server time and returns sine of it.
OnCollide
If physics captures collision for attached entity (touching_entities) returns given value.
OnInteract (not implemented)
If something interacts (e.g. player is "pulling" lever) returns given value.
OnDeath
Returns value * count of entities that died in last tick in given radius.
Actions
Spawn projectile
Spawns projectile using projectile constructor.
Set block collidability (not implemented)
Modifies properties of block on certain coordinates.
Set light
Changes LightEmitter properties of attached entity.