Files
blog/content/quickfacts-1/index.md
2026-03-24 01:13:13 +01:00

94 lines
3.5 KiB
Markdown

+++
title = "Quickfacts - Part 1: The Mental Model"
date = 2026-04-02
description = "Building a Mental Model"
draft = true
[taxonomies]
categories = ["Programming"]
tags = ["Factorio", "Rust"]
[extra]
toc = true
+++
The first real entry in my series about my quickfacts project.
For a small introduction, see the [intro blogpost](@/quickfacts-intro/index.md)
<!-- more -->
# Idea
- Everything is a graph
- Each Entity is a node in the graph
- What extra information to include
- Each Edge represents that certain items can move from one node to the other
- Specify what items can move over the edge (for example because of filters)
- Outgoing and incoming priority
- Capacity ?
- What extra information to include
# Interactions
The Construction basically comes down to a large table mapping the different interactions between all the types of entities.
## Belts
For the purpose of my analysis, you can split a belt into the two sides, as they act independent of one another.
### Belt-Belt
Direct 1-to-1 connection, is the simplest and most common way two belts are connected.
In this configuration you have 1 belt basically forwarding everything onto another belt, where each side of the source belt feeds into the corresponding side of the target belt.
For example if you have a simple line of belts forming a long line, they are all direct 1-to-1 connected.
Sideloading, is a more special case. This happens when the target belt already has another belt connected and now the new source belt is connected from the side (as the name suggests).
In this configuration both sides of the source belt are going into one side of the target belt.
### Belt-Splitter
The splitter can only accept direct 1-to-1 style connections going into it, from belts or the output of underground belts.
The ouput of a splitter basically acts the same way as a normal belt would.
### Belt-UndergroundBelt
The input side of the underground supports direct 1-to-1 connections, if the other source belt is coming from the same direction (so no turn is being made).
The input can also be sideloaded, however opposed to normal belt sideloading, only the upstream side of the source belt will feed into the target belt and the other side of the source belt will not be connected.
The output again acts like a normal belt.
### Belt-Direct output machines (miner, recycler, etc.)
Sideloading
TODO What to do if at the "head" of a beltline
## Inserter
### Inserter-Belt
TODO
# Modelling
Each node essentially has a set of input and output "slots", which have different priorities.
Each slot can have filters attached, from both the upstream and downstream side.
Filters from the upstream side are mostly dependent on configuration, like filters on splitters.
Filters from the downstream dependent on their slot filters and also their type, like machines will apply filters to their upstream slots that constrain it to items that it needs/can process.
For transport nodes (belts, inserter, etc.) they should forward their downward filters and combine them with their own filters
To collect input items, a node goes through its input slots in decreasing priority and collects everything that fits its own criteria.
To distribute the items, a node goes through its output slots in decreasing priority and puts as many items as possible in that slot.
# Running it manually
{% carousel() %}
{% carousel_item() %}
First - 1
{% end %}
{% carousel_item() %}
Second - 2
{% end %}
{% carousel_item() %}
Third - 3
{% end %}
{% carousel_item() %}
Fourth - 4
{% end %}
{% end %}