Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revisionLast revisionBoth sides next revision | ||
en:toolworks:docs:apparatus:architecture [2021/09/01 16:10] – vladius | en:toolworks:docs:apparatus:architecture [2021/09/03 13:40] – [Iterating] vladius | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Apparatus Architecture Overview ====== | ====== Apparatus Architecture Overview ====== | ||
- | Apparatus is a complex tool. It's more of a framework with its own ecosystem then some simple plugin. In order to use it effectively and consciously you have to understand how it actually works. We're not talking about the very specifics of the implementation however but the main top-level architectural concepts. | + | Apparatus is a complex tool. It's more of a framework with its own ecosystem then a simple plugin. In order to use it effectively and consciously you have to understand how it actually works. We're not talking about the very specifics of the implementation however but the main top-level architectural concepts. |
===== Machine ===== | ===== Machine ===== | ||
- | Machine is the main system of Apparatus. It's a manager for all the things global and thereby is a global singleton itself. It's actually a UObject but its lifespan is defined by its internal state, not the standard garbage collecting procedures. If the Machine has some Mechanicals | + | Machine is the main system of Apparatus. It's a manager for all the things global and thereby is a global singleton itself. It's actually a UObject but its lifespan is defined by its internal state, not the standard garbage collecting procedures. If the Machine has some Mechanisms |
- | + | ||
- | Within the Machine in particular and inside Apparatus as a whole, two relating " | + | |
The [[appi> | The [[appi> | ||
Line 13: | Line 11: | ||
===== Mechanisms ===== | ===== Mechanisms ===== | ||
- | Mechanisms to Apparatus are what Worlds to Unreal Engine. They provide a somewhat global state, a " | + | // |
- | Mechanisms are bound tight to their Worlds. If there are some Mechanics or Subjectives | + | Mechanisms are bound tight to their (Unrelean) World counterparts. If there are some Mechanics or Subjectives |
- | Please, see the corresponding [[appi> | + | Within |
===== Low-Level Traits ===== | ===== Low-Level Traits ===== | ||
- | Let's start with the lower layer first. The //Traits// subsystem was actually developed later in time, but it's now at the core of the framework and provides the needed functionality for the upper layer to work properly. | + | Let's start with the lower layer first. The //[[en: |
ECS was once developed with performance in mind. Packing and storing the data linearly in memory, what could be simpler? While it's actually not that easy to implement this for dynamically structured entities and requires some sophisticated bookkeeping, | ECS was once developed with performance in mind. Packing and storing the data linearly in memory, what could be simpler? While it's actually not that easy to implement this for dynamically structured entities and requires some sophisticated bookkeeping, | ||
Line 45: | Line 43: | ||
One of the main technical goals of Apparatus is to effectively process some very large amounts of Subjects and Subjectives (our [[en: | One of the main technical goals of Apparatus is to effectively process some very large amounts of Subjects and Subjectives (our [[en: | ||
- | Enchaining is a process of collecting all of the currently available | + | Enchaining is a process of collecting all of the currently available |
- | Instead you have to use global (static) | + | Instead you have to use Mechanism' |
===== Locking ===== | ===== Locking ===== | ||
Line 57: | Line 55: | ||
===== Filtering ===== | ===== Filtering ===== | ||
- | // | + | //[[en: |
Apparatus uses all sorts of different optimization schemes and caches to make the filtering process as fast as possible. You shouldn' | Apparatus uses all sorts of different optimization schemes and caches to make the filtering process as fast as possible. You shouldn' | ||
- | |||
- | [[appi> | ||
===== Iterating ===== | ===== Iterating ===== | ||
- | Once you have your Subjects spawned and set. Belts or Chunks enchained you're ready to iterate on them to deliver the necessary logic of the game or application. This is done through a very common concept of // | + | Once you have your Subjects spawned and set. Belts or Chunks enchained you're ready to // |
Both Belt and Chunk have their own types of Iterators, but you would rarely use them directly. Instead you'll almost always use the Chain Cursors. They are essentially Iterators with a naming chosen to eliminate some possible ambiguity. For now you should only use the default (implicit) Cursor as the threading is still a planned feature and you would rarely need to iterate a Belt (or a Chunk) with multiple different Cursors. | Both Belt and Chunk have their own types of Iterators, but you would rarely use them directly. Instead you'll almost always use the Chain Cursors. They are essentially Iterators with a naming chosen to eliminate some possible ambiguity. For now you should only use the default (implicit) Cursor as the threading is still a planned feature and you would rarely need to iterate a Belt (or a Chunk) with multiple different Cursors. |