aboutsummaryrefslogtreecommitdiff
path: root/crates/fparkan-runtime/src
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-06-23 21:32:50 +0300
committerValentin Popov <valentin@popov.link>2026-06-23 21:32:50 +0300
commit9cc24e715db81edbe21c0d04aadd00f11dddecb8 (patch)
tree08a1262dea86bcd7ec58c6494cedd001c45a78fe /crates/fparkan-runtime/src
parentf8e447ffee746cfe6580cc0e78a8a225aa39b546 (diff)
downloadfparkan-9cc24e715db81edbe21c0d04aadd00f11dddecb8.tar.xz
fparkan-9cc24e715db81edbe21c0d04aadd00f11dddecb8.zip
fix: close stage 0-2 synthetic gates
Diffstat (limited to 'crates/fparkan-runtime/src')
-rw-r--r--crates/fparkan-runtime/src/lib.rs95
1 files changed, 60 insertions, 35 deletions
diff --git a/crates/fparkan-runtime/src/lib.rs b/crates/fparkan-runtime/src/lib.rs
index 053d7bd..d70b327 100644
--- a/crates/fparkan-runtime/src/lib.rs
+++ b/crates/fparkan-runtime/src/lib.rs
@@ -1,18 +1,35 @@
#![forbid(unsafe_code)]
+#![cfg_attr(
+ test,
+ allow(
+ clippy::cast_possible_truncation,
+ clippy::cast_possible_wrap,
+ clippy::cast_precision_loss,
+ clippy::expect_used,
+ clippy::float_cmp,
+ clippy::identity_op,
+ clippy::too_many_lines,
+ clippy::uninlined_format_args,
+ clippy::map_unwrap_or,
+ clippy::needless_raw_string_hashes,
+ clippy::semicolon_if_nothing_returned,
+ clippy::type_complexity,
+ clippy::panic,
+ clippy::unwrap_used
+ )
+)]
//! Runtime orchestration for headless and rendered modes.
use fparkan_assets::{
- AssetError as AssetPreparationError, AssetManager, MissionAssetPlan,
- decode_mission_land_path, decode_nres_payload, decode_mission_payload, prepare_terrain_world,
- derive_mission_land_paths, BuildCategory, MissionDocument, MissionError, MissionTerrainPaths,
- TerrainFormatError, TerrainPreparationError, TmaProfile, TerrainWorld,
- NresError,
- extend_graph_report_with_visual_dependencies,
+ decode_mission_land_path, decode_mission_payload, decode_nres_payload,
+ derive_mission_land_paths, extend_graph_report_with_visual_dependencies, prepare_terrain_world,
+ AssetError as AssetPreparationError, AssetManager, BuildCategory, MissionAssetPlan,
+ MissionDocument, MissionError, MissionTerrainPaths, NresError, TerrainFormatError,
+ TerrainPreparationError, TerrainWorld, TmaProfile,
};
use fparkan_path::{normalize_relative, NormalizedPath, PathError, PathPolicy};
use fparkan_prototype::{
- build_prototype_graph_report,
- PrototypeGraph, PrototypeGraphFailure, PrototypeGraphReport,
+ build_prototype_graph_report, PrototypeGraph, PrototypeGraphFailure, PrototypeGraphReport,
};
use fparkan_resource::{resource_name, CachedResourceRepository};
use fparkan_vfs::{Vfs, VfsError};
@@ -435,44 +452,52 @@ fn load_mission_with_options(
let mission_bytes = read_vfs(&vfs, &mission_path)?;
trace.phases.push(MissionLoadPhase::Map);
- let land_path = decode_mission_land_path(&mission_bytes, TmaProfile::Strict).map_err(|source| {
- EngineError::Mission {
- path: mission_path.as_str().to_string(),
- source,
- }
- })?;
- let MissionTerrainPaths { land_msh: land_msh_path, land_map: land_map_path } =
- derive_mission_land_paths(&land_path).map_err(|source| EngineError::Path {
- role: "mission land",
- value: mission_path.as_str().to_string(),
- source,
+ let land_path =
+ decode_mission_land_path(&mission_bytes, TmaProfile::Strict).map_err(|source| {
+ EngineError::Mission {
+ path: mission_path.as_str().to_string(),
+ source,
+ }
})?;
- let land_msh_nres = decode_nres_payload(read_vfs(&vfs, &land_msh_path)?)
- .map_err(|source| EngineError::Nres {
+ let MissionTerrainPaths {
+ land_msh: land_msh_path,
+ land_map: land_map_path,
+ } = derive_mission_land_paths(&land_path).map_err(|source| EngineError::Path {
+ role: "mission land",
+ value: mission_path.as_str().to_string(),
+ source,
+ })?;
+ let land_msh_nres = decode_nres_payload(read_vfs(&vfs, &land_msh_path)?).map_err(|source| {
+ EngineError::Nres {
path: land_msh_path.as_str().to_string(),
source,
- })?;
- let land_map_nres = decode_nres_payload(read_vfs(&vfs, &land_map_path)?)
- .map_err(|source| EngineError::Nres {
+ }
+ })?;
+ let land_map_nres = decode_nres_payload(read_vfs(&vfs, &land_map_path)?).map_err(|source| {
+ EngineError::Nres {
path: land_map_path.as_str().to_string(),
source,
- })?;
+ }
+ })?;
let build_dat_path = normalize_engine_path("BuildDat", "BuildDat.lst")?;
let build_dat = read_vfs(&vfs, &build_dat_path)?;
- let (terrain, build_categories) = prepare_terrain_world(&land_msh_nres, &land_map_nres, &build_dat)
- .map_err(|source| match source {
- TerrainPreparationError::Decode(source) => EngineError::TerrainFormat {
- path: build_dat_path.as_str().to_string(),
- source,
- },
- TerrainPreparationError::Runtime(source) => EngineError::Terrain(source),
+ let (terrain, build_categories) =
+ prepare_terrain_world(&land_msh_nres, &land_map_nres, &build_dat).map_err(|source| {
+ match source {
+ TerrainPreparationError::Decode(source) => EngineError::TerrainFormat {
+ path: build_dat_path.as_str().to_string(),
+ source,
+ },
+ TerrainPreparationError::Runtime(source) => EngineError::Terrain(source),
+ }
})?;
trace.phases.push(MissionLoadPhase::Tma);
- let mission =
- decode_mission_payload(mission_bytes, TmaProfile::Strict).map_err(|source| EngineError::Mission {
+ let mission = decode_mission_payload(mission_bytes, TmaProfile::Strict).map_err(|source| {
+ EngineError::Mission {
path: mission_path.as_str().to_string(),
source,
- })?;
+ }
+ })?;
trace.transforms = mission
.objects
.iter()