Rust Eve FIttiNg Engine
The engine's purpose is validation of fits and calculation of item/fit/fleet stats. It does not do much else - i.e. there is no fit persistence, or anything related to UI (for instance, it is not aware of item/fit names).
Core calculation library with Rust interface.
Has synchronous interface, which allows to manipulate just what you want, and get just info you need.
Data handlers for core library, which provide access to EVE data.
Data cachers for core library, which allow it to store adapted data. Adapted data is EVE data which was processed for needs of the core library.
High-level async Rust interface.
Interface is built to unify multiple smaller changes into commands and command batches, and return info objects filled with data. Main goal of that is to reduce overhead: under the hood, the library manages thread pools and multi-threading; workers receive commands, and return command responses and infos.
High-level HTTP interface built on top of refine-rs.
The engine makes use of some hardware features like FMA (fused multiply-add). If they are not declared as available during compilation, there is a performance hit, even if minor one.
On x86-64, they are enabled by passing -C target-cpu=x86-64-v3 to the Rust compiler, via RUSTFLAGS or a .cargo/config.toml. Note that binaries built this way need a CPU no older than Intel Haswell (2013) or AMD Excavator (2015), and abort with an illegal instruction error on anything older. ARM64 needs no configuration, since FMA is a part of its baseline.
HTTP is considered as main interface, and it will be documented later. Until then, the easiest way to see how it works is to check tests and test framework client, as well as non-synthetic-data tests which use it.
In no particular order:
- separation between user data and game data. This allows switches between different data sources (e.g. Tranquility and Singularity), and leads to very few checks done when an item is added/changed, with most checks postponed till fit validation happens
- mutated modules/drones
- can specify attribute rolls via absolute values, or rolls (roll quality as a number between 0 and 1)
- attribute mutations are stored as rolls internally, so will properly update on base attribute/roll range changes between data sources
- environmental effects: system-wide (applied to all items in a system), fit-wide (applied to all items of a fit) and projected (applied only to selected items)
- booster side effects
- fighter abilities
- fleet buffs, including type-filtered fleet buffs (e.g. PANIC)
- automatically loaded charges by some effects (e.g. LR fighter bombs)
- auto-charges are exposed as regular items so that it's possible to check their attributes and effects (but there are some limits, e.g. you cannot remove them)
- fast & flexible fit validation
- "try fit items" functionality which accepts list of items, checks which can be fit to a fit according to passed validation settings, and returns those which can be fit
- fleet, fit and item stats. Some stats support various options, e.g.:
- it is possible to get raw DPS output of a fit, or only vorton DPS of a fit applied to a specific item
- some options allow temporary item changes, e.g. you can get combined mass of a fleet with prop modules shut down, or can get dps of a fighter which is not active
- reactive armor hardener support
- it is possible to fit multiple RAHs with different attributes (validation fails, but they are properly simulated nevertheless)
- modifications applied via space component EVE system: things like insurgency tackle range, skyhook silo link, nexus event buff "mines", Pochven subpylons, Odysseus-specific buffs are defined via it
- ability to disable most items (or special "disabled" state for modules, which can be needed for modules like cargo expanders applying their penalties even when offline) to completely disable modifications applied by them, with ability to check their attributes with all the received modifications
- modification resistance support
- falloff effect reduction
- drone propulsion mode (cruise/chase), which affects their speed and signature, and can affect ability of various items apply to them
- ability to override amount of fighters in a squad
- ability to control effect run mode (force stop, force run, state compliance, full compliance)
- list modifications applied upon an attribute, with meaningless modifications filtered out (e.g. multiplication by 1)
- security zone support for calculations (e.g. structure rigs)
- pilot security status support (e.g. for concord ships)