From 9d875224a793112a75f6294970042c424aba443b Mon Sep 17 00:00:00 2001 From: Michael Raitza Date: Wed, 21 Dec 2022 21:19:43 +0100 Subject: [PATCH] xplane-12: Add X-World Asia Scenery --- default.nix | 3 +- x-plane/simHeaven/x-world-asia.nix | 93 ++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 x-plane/simHeaven/x-world-asia.nix diff --git a/default.nix b/default.nix index e9d44a6..19f832b 100644 --- a/default.nix +++ b/default.nix @@ -9,7 +9,7 @@ let xPlaneEnv = callPackage ./x-plane { xplanePathStr = "/home/games/xplane"; addons = [ headshake beautifulRoads samBasic samGlobalTrees flyWithLua vividSky airportEnvHD betterLights extendedNightLights toLissA321 ]; }; xPlane12Env = callPackage ./x-plane { xplanePathStr = "/home/games/xplane12"; name = "x-plane12-env"; - addons = [ x-world-vegetation x-world-europe ]; }; + addons = [ x-world-vegetation x-world-europe x-world-asia ]; }; xPlaneSDK = callPackage ./x-plane/sdk.nix {}; ortho4xp = callPackage ./x-plane/ortho4XPWrapper.nix { orthoPathStr = "/home/games/ortho4xp"; }; @@ -30,6 +30,7 @@ let # X-Plane 12 x-world-vegetation = callPackage ./x-plane/simHeaven/x-world-vegetation.nix {}; x-world-europe = callPackage ./x-plane/simHeaven/x-world-europe.nix {}; + x-world-asia = callPackage ./x-plane/simHeaven/x-world-asia.nix {}; pdfchain = callPackage ./pdfchain { }; prism = callPackage ./prism.nix {}; diff --git a/x-plane/simHeaven/x-world-asia.nix b/x-plane/simHeaven/x-world-asia.nix new file mode 100644 index 0000000..74842d7 --- /dev/null +++ b/x-plane/simHeaven/x-world-asia.nix @@ -0,0 +1,93 @@ +{ stdenv +, lib +, mkXPlaneAddon +, impureSrcPath ? "/home/games/xplane-scenery/simHeaven_X-World_Asia" +# Disable to improve frame rate +, enableDetails ? true +# dito +, enableExtras ? true +# Replace scenery objects with null-objects that are covered by ortho scenery +, useOrtho ? true +# Replace default tiles for regions with poor OSM data quality (e.g. remote forests not showing) +# example: [ "+38+001" "+71-009" ] +, replaceTiles ? [ ] +}: +let + inherit (lib) concatStringsSep optional; + dirName = "simHeaven_X-World_Asia"; + linkDirs = concatStringsSep " " ([ + "${dirName}-0-exclusions" + "${dirName}-1-vfr" + "${dirName}-5-footprints" + "${dirName}-6-scenery" + "${dirName}-7-forests" + "${dirName}-8-network" ] + ++ optional enableDetails "${dirName}-3-details" + ++ optional enableExtras "${dirName}-4-extras"); + + tiles = concatStringsSep " " replaceTiles; +in mkXPlaneAddon { + pname = "x-world-asia"; + version = "1.1"; + src = ""; + buildCommand = '' + mkdir -p "$out" + touch "$out/installed" + ''; + + passthru = { + build = ""; + prepare = '' + test -d "${impureSrcPath}" + for f in ${linkDirs} ; do + mkdir "$XPLANEPATH/Custom Scenery/$f" + for j in "${impureSrcPath}/$f"/* ; do + ln -s "$j" "$XPLANEPATH/Custom Scenery/$f/$(basename "$j")" + done + done + if [ "${toString useOrtho}" = 1 ]; then + f="$XPLANEPATH/Custom Scenery/${dirName}-6-scenery/library.txt" + rm "$f" + ln -s "${impureSrcPath}/${dirName}-6-scenery/library - orthos.txt" "$f" + fi + # In case we want to replace some tiles, link every tile indivdually + if [ -n "${tiles}" ]; then + rm "$XPLANEPATH/Custom Scenery/${dirName}-7-forests/Earth nav data" + for f in "${impureSrcPath}/${dirName}-7-forests/Earth nav data"/* ; do + mkdir -p "$XPLANEPATH/Custom Scenery/${dirName}-7-forests/Earth nav data/$(basename "$f")" + for k in "$f"/* ; do + ln -s "$k" "$XPLANEPATH/Custom Scenery/${dirName}-7-forests/Earth nav data/$(basename "$f")" + done + done + for f in ${tiles} ; do + # bash-ism, transform +HH+LLL -> +H0+LL0 + d=''${f:0:2}0''${f:3:3}0 + s="${impureSrcPath}/${dirName}-7-forests/Earth nav data - osm+autogen/$d/$f.dsf" + t="$XPLANEPATH/Custom Scenery/${dirName}-7-forests/Earth nav data/$d/$f.dsf" + if [ -e "$s" ]; then + rm "$t" + ln -s "$s" "$t" + else + printf "Warning: Replacement tile not found %s\n" "$f" >&2 + fi + done + fi + # Update scenery_packs.ini + ( + cd "$XPLANEPATH" + k= + sed -i -e '/^SCENERY_PACK Custom Scenery\/${dirName}-.*$/d' 'Custom Scenery/scenery_packs.ini' + sed -i -e "/^SCENERY_PACK Custom Scenery\/simHeaven_X-World_Vegetation_Library/i\ + $(for f in ${linkDirs} ; do + printf "''${k}SCENERY_PACK Custom Scenery/%s/" "$f" + k='\\n' + done)" 'Custom Scenery/scenery_packs.ini' + ) + ''; + revert = '' + for f in ${linkDirs} ; do + rm -r "$XPLANEPATH/Custom Scenery/$f" + done + ''; + }; +}