diff --git a/.gitignore b/.gitignore
index 32ddd07..12cd04e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,6 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
-# Vim swap files
-.*.swp
-
# User-specific files
*.suo
*.user
@@ -13,17 +10,12 @@
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
-[Rr]eleases/
x64/
-x86/
build/
bld/
[Bb]in/
[Oo]bj/
-# Roslyn cache directories
-*.ide/
-
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
@@ -99,6 +91,7 @@ _TeamCity*
*.dotCover
# NCrunch
+*.ncrunch*
_NCrunch_*
.*crunch*.local.xml
@@ -128,19 +121,15 @@ publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# If using the old MSBuild-Integrated Package Restore, uncomment this:
-#!**/packages/repositories.config
+
+# NuGet Packages Directory
+packages/
+## TODO: If the tool you use requires repositories.config uncomment the next line
+#!packages/repositories.config
+
+# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
+# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented)
+!packages/build/
# Windows Azure Build Output
csx/
@@ -165,9 +154,8 @@ node_modules/
# RIA/Silverlight projects
Generated_Code/
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
@@ -184,3 +172,64 @@ UpgradeLog*.htm
# Microsoft Fakes
FakesAssemblies/
+
+# =========================
+# Operating System Files
+# =========================
+
+# OSX
+# =========================
+
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must ends with two \r.
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear on external disk
+.Spotlight-V100
+.Trashes
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+
+# Windows
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+#
+# Vim files
+#
+*~
+*.swp
+*.dll
+*.pdb
+.vs
diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json
new file mode 100644
index 0000000..f8b4888
--- /dev/null
+++ b/.vs/ProjectSettings.json
@@ -0,0 +1,3 @@
+{
+ "CurrentProjectSetting": null
+}
\ No newline at end of file
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
new file mode 100644
index 0000000..b13c006
--- /dev/null
+++ b/.vs/VSWorkspaceState.json
@@ -0,0 +1,7 @@
+{
+ "ExpandedNodes": [
+ ""
+ ],
+ "SelectedNode": "\\WaypointManager.sln",
+ "PreviewInSolutionExplorer": false
+}
\ No newline at end of file
diff --git a/.vs/WaypointManager/config/applicationhost.config b/.vs/WaypointManager/config/applicationhost.config
new file mode 100644
index 0000000..b42cd34
--- /dev/null
+++ b/.vs/WaypointManager/config/applicationhost.config
@@ -0,0 +1,1030 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.vs/WaypointManager/project-colors.json b/.vs/WaypointManager/project-colors.json
new file mode 100644
index 0000000..ff9839a
--- /dev/null
+++ b/.vs/WaypointManager/project-colors.json
@@ -0,0 +1,21 @@
+{
+ "Version": 1,
+ "ProjectMap": {
+ "c2c97615-1b94-4a31-9a68-042f6457403e": {
+ "ProjectGuid": "c2c97615-1b94-4a31-9a68-042f6457403e",
+ "DisplayName": "WaypointManager",
+ "ColorIndex": 0
+ },
+ "e9463310-6814-47f6-8fbe-881501c4309c": {
+ "ProjectGuid": "e9463310-6814-47f6-8fbe-881501c4309c",
+ "DisplayName": "Solution Items",
+ "ColorIndex": 1
+ },
+ "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": {
+ "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3",
+ "DisplayName": "Miscellaneous Files",
+ "ColorIndex": -1
+ }
+ },
+ "NextColorIndex": 2
+}
\ No newline at end of file
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
new file mode 100644
index 0000000..e26a0f2
Binary files /dev/null and b/.vs/slnx.sqlite differ
diff --git a/BUGS.txt b/BUGS.txt
new file mode 100644
index 0000000..174ddc6
--- /dev/null
+++ b/BUGS.txt
@@ -0,0 +1,2 @@
+BUGS
+
diff --git a/Changelog.txt b/Changelog.txt
new file mode 100644
index 0000000..dc23a58
--- /dev/null
+++ b/Changelog.txt
@@ -0,0 +1,98 @@
+Changelog
+
+2.8.4.7
+ Updated fix to not show invalid waypoints on the Sun
+
+2.8.4.6
+ Thanks to github user @Clayell for this:
+ Edit a GUI label that is not specific to custom waypoints removing the "custom" since it's not related to custom waypoints
+ Added to bypass a Kopernicus error where it puts invalid waypoints into the system
+
+2.8.4.5
+ Added option to display Waypoint Coordinates, based on code from github user @David Shade
+
+2.8.4.4
+ Updated text in Settings window re. dragging the Nav Window
+ Small optimization regarding initializing styles, eliminating an extra function call during OnGUI
+ Fixed nav window initialization (was not setting background/opacity upon startup)
+
+2.8.4.3
+ Thanks to github user @eminterrupted for finding this bug:
+ displayOpacity was being read incorrectly from the saved config, causing the display background opacity to be reset to 50% every game restart
+ Added text to config window explaining how to drag the nav window
+ Updated version file to use github for version info
+
+2.8.4.2
+ Fixed Next flight without changing any settings, grey background is absent
+ Multiple initializions are needed because KSP/Unity is stupid and loses the background texture between scenes
+ Added ability to control the grey scale of the display background
+ Adjusted display lines to not overlap
+
+2.8.4.1
+ Fixed setting window not displaying (unintended sideeffect of the previous update)
+ Added colored background (grey) for onscreen display (controllable via slider in settings window)
+
+2.8.4
+ Added ability to drag the onscreen live display of status to anywhere on screen (need to hold down either left or right control screen)
+ Added reset button to settings page to reset the position of the live display to the default
+ cleaned up some really old code
+
+2.8.3.5
+ Fixed path for loading files (broken by new launcher)
+
+2.8.3.4
+ Fixed memory leak caused by the WaypointManagerGameEvents being unloaded
+
+2.8.3.3
+ Added AssemblyFileVersion
+ Updated version file for 1.12
+ Fixed custom icons
+
+2.8.3.1
+ Fixed loading of contract icons
+ Optimized display of onscreen text
+ Fixed display of onscreen text position & removed word wrapping
+
+2.8.3
+ Added new dependency, SpacetuxLibrary
+ Changed Debug.Log methods to Log.Info
+ Added UI Scaling
+
+2.8.2.7
+ Fixed modname on the toolbar button
+
+2.8.2.6
+ Removed extra .version file
+
+2.8.2.5
+ Updated coordinates & altitude for the Armstrong Memorial
+
+2.8.2.4
+ Another error in version file, was https instead of http
+
+2.8.2.3
+ Fixed version file
+
+2.8.2.2
+ Added page to select import of custom waypoints
+ Patchmanager configs removed
+ Moved icons into PluginData
+ Changed loading of icons to Toolbarcontroller.LoadImageFromFile
+ Added selection window to load custom waypoints
+ Split big CustomWaypoints.InterestingSites.cfg into planet specific files
+
+2.8.2.1
+ Added custom landing site configs, make active using PatchManager and then import into WaypointManager
+
+2.8.2
+ Adoption by LinuxGuruGamer
+ Added support for ToolbarController
+ Added support for ClickThroughBlocker
+ Patch from github user @SumGuyTwitches:
+ fix kraken location off by 8 degrees
+ Patch from Github user @taniwha:
+ Use dateTimeFormatter for time period lengths
+
+ Fixed RSS compatibility with changes listed in this issue on Github:
+ https://github.com/jrossignol/WaypointManager/issues/59
+
diff --git a/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg b/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg
index 9413bbd..77c9bdb 100644
--- a/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg
+++ b/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg
@@ -174,11 +174,11 @@ WAYPOINT
{
name = Armstrong Monument
celestialName = Mun
- latitude = 0.70269999999999999
- longitude = 22.747
+ latitude = 0.703
+ longitude = 22.7465
navigationId = 85b49f1e-7576-4c77-bb90-85b3ac62c91c
icon = custom
- altitude = 2.2737367544323206E-13
+ altitude = 568
index = 18
seed = 1197
}
@@ -678,7 +678,7 @@ WAYPOINT
{
name = Space Kraken
celestialName = Bop
- latitude = 60.435555559999997
+ latitude = 68.435555559999997
longitude = 117.02527778
navigationId = cedb4799-9cf7-4629-9f41-bcc47b733247
icon = thermometer
diff --git a/GameData/WaypointManager/CelestialBodies.cfg b/GameData/WaypointManager/CelestialBodies.cfg
index 19a0203..c37dd4c 100644
--- a/GameData/WaypointManager/CelestialBodies.cfg
+++ b/GameData/WaypointManager/CelestialBodies.cfg
@@ -8,5 +8,5 @@
WAYPOINT_MANAGER_BODIES
{
name = default
- url = WaypointManager/icons/CelestialBodies
+ url = WaypointManager/PluginData/icons/CelestialBodies
}
diff --git a/GameData/WaypointManager/CustomIcons.cfg b/GameData/WaypointManager/CustomIcons.cfg
index 25e10a1..ade5e6e 100644
--- a/GameData/WaypointManager/CustomIcons.cfg
+++ b/GameData/WaypointManager/CustomIcons.cfg
@@ -5,5 +5,5 @@
WAYPOINT_MANAGER_ICONS
{
name = WaypointManager
- url = WaypointManager/icons/Custom
+ url = WaypointManager/PluginData/icons
}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Bop.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Bop.cfg
new file mode 100644
index 0000000..610a2b4
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Bop.cfg
@@ -0,0 +1,52 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Large Orange Circle
+ celestialName = Bop
+ latitude = 4.7400000000000002
+ longitude = -72.769999999999996
+ navigationId = 7d860c42-e129-4efa-875f-df496be98762
+ icon = custom
+ altitude = 3.1263880373444408E-13
+ index = 55
+ seed = 37
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Bop
+ latitude = 23.8733
+ longitude = -64.566699999999997
+ navigationId = 96f0dd67-ecb0-43b4-aedb-5f8419c8362c
+ icon = pressure
+ altitude = 2.7966962079517543E-11
+ index = 56
+ seed = 159
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Bop
+ latitude = 37.584200000000003
+ longitude = -139.27369999999999
+ navigationId = 82bf0ff5-1117-483e-a0a2-7627b49f69c2
+ icon = pressure
+ altitude = 1.8189894035458601E-12
+ index = 57
+ seed = 105
+}
+WAYPOINT
+{
+ name = Space Kraken
+ celestialName = Bop
+ latitude = 68.435555559999997
+ longitude = 117.02527778
+ navigationId = cedb4799-9cf7-4629-9f41-bcc47b733247
+ icon = thermometer
+ altitude = -1.8189894035458565E-12
+ index = 65
+ seed = 426
+}
+WAYPOINT
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Dres.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Dres.cfg
new file mode 100644
index 0000000..5b086f4
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Dres.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Dres
+ latitude = -85.001199999999997
+ longitude = 42.637900000000002
+ navigationId = ca6e0206-e362-4b86-b55c-99480126b562
+ icon = pressure
+ altitude = -3.5988989566249074E-12
+ index = 45
+ seed = 972
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Dres
+ latitude = 19.017330000000001
+ longitude = -57.139899999999997
+ navigationId = 5bfc97f3-4d57-453d-916a-5a5a5f92b57c
+ icon = pressure
+ altitude = -1.06581410364015E-14
+ index = 46
+ seed = 972
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Duna.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Duna.cfg
new file mode 100644
index 0000000..5b48681
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Duna.cfg
@@ -0,0 +1,75 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Duna
+ latitude = 20.885000000000002
+ longitude = -106.79810000000001
+ navigationId = a864de06-27fe-452f-bf34-981b2113ae73
+ icon = pressure
+ altitude = 0
+ index = 37
+ seed = 16
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Duna
+ latitude = -5.9436
+ longitude = -50.548099999999998
+ navigationId = ae709377-a5cb-4b4f-b667-ba529cc7e253
+ icon = pressure
+ altitude = -2.7000623958883802E-13
+ index = 38
+ seed = 77
+}
+WAYPOINT
+{
+ name = Cyduna Face
+ celestialName = Duna
+ latitude = 17.048300000000001
+ longitude = -85.471699999999998
+ navigationId = 6b27e7ed-a143-47f0-a8a4-196083383aab
+ icon = custom
+ altitude = 6.8212102632969618E-13
+ index = 39
+ seed = 665
+}
+WAYPOINT
+{
+ name = Alien Camera
+ celestialName = Duna
+ latitude = -30.352499999999999
+ longitude = -28.6828
+ navigationId = 02334b66-5cd6-4a41-83b7-055627e944ba
+ icon = custom
+ altitude = -1.9895196601282805E-13
+ index = 40
+ seed = 37
+}
+WAYPOINT
+{
+ name = SSTV Hill
+ celestialName = Duna
+ latitude = -66.134399999999999
+ longitude = -160.7432
+ navigationId = 201424b1-dda6-45e6-947e-b8e35e9794ba
+ icon = custom
+ altitude = 0
+ index = 41
+ seed = 269
+}
+WAYPOINT
+{
+ name = Ike Zenith
+ celestialName = Duna
+ latitude = 0
+ longitude = 6
+ navigationId = 85ffab91-f80b-46f1-ae2e-d9679250bb69
+ icon = dish
+ altitude = 0
+ index = 44
+ seed = 569
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eeloo.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eeloo.cfg
new file mode 100644
index 0000000..50429ea
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eeloo.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Eeloo
+ latitude = 24.334700000000002
+ longitude = 27.9602
+ navigationId = 8c40f4bc-513c-4b26-a4ff-bc53e5d2975b
+ icon = pressure
+ altitude = -3.6379788070917101E-12
+ index = 60
+ seed = 1293
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Eeloo
+ latitude = 51.778599999999997
+ longitude = -32.288800000000002
+ navigationId = afca125c-6590-4206-9858-2597fd7cb16e
+ icon = pressure
+ altitude = -386.88580000000002
+ index = 61
+ seed = 1375
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eve.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eve.cfg
new file mode 100644
index 0000000..8772432
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Eve.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Eve
+ latitude = -25.015899999999998
+ longitude = -158.45580000000001
+ navigationId = df42fa13-cb8e-4306-a7cb-6f81bc5787ca
+ icon = pressure
+ altitude = 3.6379788070917101E-12
+ index = 33
+ seed = 876
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Eve
+ latitude = -44.747300000000003
+ longitude = -107.8528
+ navigationId = 43ef7049-05aa-49bf-8010-6d68dd0863ae
+ icon = pressure
+ altitude = -1876.8985
+ index = 34
+ seed = 904
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Gilly.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Gilly.cfg
new file mode 100644
index 0000000..6f0a3f6
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Gilly.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Gilly
+ latitude = 56.7883
+ longitude = -7.2400000000000002
+ navigationId = 78240bc6-495d-4791-8772-7ad64876ebf7
+ icon = pressure
+ altitude = -6.8212102632969598E-13
+ index = 35
+ seed = 679
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Gilly
+ latitude = -29.256599999999999
+ longitude = -123.8708
+ navigationId = 986c230f-10ec-40e1-82b6-bd085acac186
+ icon = pressure
+ altitude = 2.7284841053187799E-12
+ index = 36
+ seed = 501
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Ike.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Ike.cfg
new file mode 100644
index 0000000..c149cd4
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Ike.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Ike
+ latitude = 25.279499999999999
+ longitude = 178.2971
+ navigationId = 217d4365-f02c-4c2a-848e-ad5c75bf63b1
+ icon = pressure
+ altitude = -4.0017766878008797E-11
+ index = 42
+ seed = 51
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Ike
+ latitude = -14.425000000000001
+ longitude = 25.455300000000001
+ navigationId = 13426c20-bbb6-46dc-801b-b9bb60a588c4
+ icon = pressure
+ altitude = -4.5474735088646412E-13
+ index = 43
+ seed = 808
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg
new file mode 100644
index 0000000..26266af
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.InterestingPlaces.cfg
@@ -0,0 +1,1372 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints.
+
+WAYPOINT
+{
+ name = North Station One Tracking Station
+ celestialName = Kerbin
+ latitude = 63.095084361794797
+ longitude = -90.079893279056407
+ navigationId = 80698255-4e2f-4c14-88d5-7a0faeca3ab9
+ icon = dish
+ altitude = 2.7284841053187847E-12
+ index = 0
+ seed = 51
+}
+WAYPOINT
+{
+ name = Harvester Massif Tracking Station
+ celestialName = Kerbin
+ latitude = -11.9501036949728
+ longitude = 33.740039782730598
+ navigationId = 60053bff-d21f-4570-b8b3-e73cfea1bf26
+ icon = dish
+ altitude = 4.3078600020335216
+ index = 1
+ seed = 358
+}
+WAYPOINT
+{
+ name = Crater Rim Tracking Station
+ celestialName = Kerbin
+ latitude = 9.4500575394183706
+ longitude = -172.11006586553799
+ navigationId = d2f734ce-52f3-4dff-9d04-3b51940fb877
+ icon = dish
+ altitude = -2.7284841053187847E-12
+ index = 5
+ seed = 808
+}
+WAYPOINT
+{
+ name = Baikerbanur Tracking Station
+ celestialName = Kerbin
+ latitude = 20.681019179238699
+ longitude = -146.50146247265101
+ navigationId = ec0d87b9-4371-42d1-8bc1-0031b17fcf4e
+ icon = dish
+ altitude = 11.482591688283833
+ index = 6
+ seed = 241
+}
+WAYPOINT
+{
+ name = Mesa South Tracking Station
+ celestialName = Kerbin
+ latitude = -59.590011134603699
+ longitude = -25.869794095014601
+ navigationId = e3b35deb-8fe5-4864-8d27-1698097b98f3
+ icon = dish
+ altitude = 4.3227068297583173
+ index = 7
+ seed = 583
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Kerbin
+ latitude = 61.578400000000002
+ longitude = 46.3733
+ navigationId = d782c960-172d-4d5a-8743-9548c8a55e86
+ icon = pressure
+ altitude = 3.637978807091713E-12
+ index = 8
+ seed = 651
+}
+WAYPOINT
+{
+ name = Eastern Monolith
+ celestialName = Kerbin
+ latitude = -28.808299999999999
+ longitude = -13.440099999999999
+ navigationId = 1d620c17-aa6f-4492-bdb7-b72d01adae00
+ icon = custom
+ altitude = 4.5474735088646412E-12
+ index = 9
+ seed = 91
+}
+WAYPOINT
+{
+ name = Hidden Valley Monolith
+ celestialName = Kerbin
+ latitude = 35.570510763646503
+ longitude = -74.977286738143405
+ navigationId = 4d433a4d-60e1-42d6-b92e-424005c34705
+ icon = custom
+ altitude = 0.46431883214927439
+ index = 10
+ seed = 9
+}
+WAYPOINT
+{
+ name = Western Monolith
+ celestialName = Kerbin
+ latitude = -0.64011062426790699
+ longitude = -80.766738375291098
+ navigationId = a6803f1b-ca9a-43e9-98bd-b6cb321f6ab6
+ icon = custom
+ altitude = 15.919417221052754
+ index = 11
+ seed = 426
+}
+WAYPOINT
+{
+ name = Deepest Depth
+ celestialName = Kerbin
+ latitude = -28.905000000000001
+ longitude = -83.111599999999996
+ navigationId = 78bfd3da-a544-40bd-aecd-d61c24dde4aa
+ icon = pressure
+ altitude = -1390.9353000000001
+ index = 12
+ seed = 248
+}
+WAYPOINT
+{
+ name = Tut-Ur Jeb-Ahn
+ celestialName = Kerbin
+ latitude = -6.5056566716276301
+ longitude = -141.68561514627001
+ navigationId = 963243d9-2f0b-47c1-8f6a-e73efeea4436
+ icon = eva
+ altitude = 64.3599999999999
+ index = 13
+ seed = 358
+}
+WAYPOINT
+{
+ name = Crashed Saucer
+ celestialName = Kerbin
+ latitude = 81.955167431885798
+ longitude = -128.517572697502
+ navigationId = 1e8b1906-b7b6-484f-8775-ee92c0744be4
+ icon = custom
+ altitude = 3.4355408039409099
+ index = 15
+ seed = 159
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Mun
+ latitude = -82.518299999999996
+ longitude = -152.3254
+ navigationId = 82927aae-3d08-4419-874b-544e45d547af
+ icon = pressure
+ altitude = 2.7284841053187847E-12
+ index = 16
+ seed = 23
+}
+WAYPOINT
+{
+ name = Northwest Crater Arch
+ celestialName = Mun
+ latitude = 12.443199999999999
+ longitude = 39.177999999999997
+ navigationId = dce9943e-f7cf-4774-ab16-d156b2b0da87
+ icon = seismic
+ altitude = 3.4106051316484809E-12
+ index = 17
+ seed = 330
+}
+WAYPOINT
+{
+ name = Armstrong Monument
+ celestialName = Mun
+ latitude = 0.70269999999999999
+ longitude = 22.747
+ navigationId = 85b49f1e-7576-4c77-bb90-85b3ac62c91c
+ icon = custom
+ altitude = 2.2737367544323206E-13
+ index = 18
+ seed = 1197
+}
+WAYPOINT
+{
+ name = Nearside Monolith
+ celestialName = Mun
+ latitude = -9.8314000000000004
+ longitude = 25.917000000000002
+ navigationId = 6f063b5f-02a9-4e98-9422-ff2f679cb8d8
+ icon = custom
+ altitude = -2.1600499167107046E-12
+ index = 19
+ seed = 426
+}
+WAYPOINT
+{
+ name = South Polar Monolith
+ celestialName = Mun
+ latitude = -82.206299999999999
+ longitude = 102.93049999999999
+ navigationId = 0a319114-cc2d-4e6d-9902-7f64b8e68830
+ icon = custom
+ altitude = 0
+ index = 21
+ seed = 248
+}
+WAYPOINT
+{
+ name = Crashed Saucer
+ celestialName = Mun
+ latitude = -70.955600000000004
+ longitude = -68.137799999999999
+ navigationId = abe0c9a8-650f-4679-b875-d1fd19f68caf
+ icon = custom
+ altitude = -4.5474735088646404E-12
+ index = 22
+ seed = 501
+}
+WAYPOINT
+{
+ name = East Crater Arch
+ celestialName = Mun
+ latitude = 2.4695
+ longitude = 81.513300000000001
+ navigationId = d99b0e30-60ba-4bfb-ab4f-5fc2c66c8926
+ icon = seismic
+ altitude = -4.5474735088646412E-13
+ index = 23
+ seed = 501
+}
+WAYPOINT
+{
+ name = Northern Monolith
+ celestialName = Mun
+ latitude = 57.660400000000003
+ longitude = 9.1422000000000008
+ navigationId = 507bb506-4456-49c1-9579-cd1790bc463b
+ icon = custom
+ altitude = 4.5474735088646404E-12
+ index = 24
+ seed = 269
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Mun
+ latitude = 35.320999999999998
+ longitude = -76.629599999999996
+ navigationId = 14ae4a01-9d7a-494e-9d9b-e6dd8e721148
+ icon = pressure
+ altitude = -3.637978807091713E-12
+ index = 25
+ seed = 972
+}
+WAYPOINT
+{
+ name = East Farside Arch
+ celestialName = Mun
+ latitude = -12.443099999999999
+ longitude = -140.822
+ navigationId = aa547350-8932-4053-a8d6-900f5638869d
+ icon = seismic
+ altitude = 0
+ index = 26
+ seed = 119
+}
+WAYPOINT
+{
+ name = Kerbin Zenith
+ celestialName = Mun
+ latitude = 0
+ longitude = 47
+ navigationId = 61c70b61-5047-4fa8-b4ca-83877b886233
+ icon = dish
+ altitude = 4.0927261579781771E-12
+ index = 27
+ seed = 747
+}
+WAYPOINT
+{
+ name = Kerbin Nadir
+ celestialName = Mun
+ latitude = 0
+ longitude = -133
+ navigationId = aea94a99-3943-4693-875b-888350a2eb26
+ icon = dish
+ altitude = -2.7284841053187847E-12
+ index = 28
+ seed = 23
+}
+WAYPOINT
+{
+ name = Monolith
+ celestialName = Minmus
+ latitude = 23.776800000000001
+ longitude = 60.046199999999999
+ navigationId = fbf3d06b-3376-4af3-a102-d95f4534096c
+ icon = custom
+ altitude = -2.7284841053187847E-12
+ index = 29
+ seed = 248
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Minmus
+ latitude = -62.929699999999997
+ longitude = 74.728999999999999
+ navigationId = d3e788c7-3a91-4d51-b35b-501cdc1c7a74
+ icon = pressure
+ altitude = -2.7284841053187799E-12
+ index = 30
+ seed = 16
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Moho
+ latitude = -19.654499999999999
+ longitude = -166.23410000000001
+ navigationId = 362860d0-ebc4-4c49-b32b-e8ef4d2a3eef
+ icon = pressure
+ altitude = 1.7763568394002501E-14
+ index = 31
+ seed = 98
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Moho
+ latitude = 54.679000000000002
+ longitude = 153.49000000000001
+ navigationId = 3531bbc3-f488-457b-9ea4-406a919ffeb8
+ icon = pressure
+ altitude = -5.0022208597511053E-12
+ index = 32
+ seed = 241
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Eve
+ latitude = -25.015899999999998
+ longitude = -158.45580000000001
+ navigationId = df42fa13-cb8e-4306-a7cb-6f81bc5787ca
+ icon = pressure
+ altitude = 3.6379788070917101E-12
+ index = 33
+ seed = 876
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Eve
+ latitude = -44.747300000000003
+ longitude = -107.8528
+ navigationId = 43ef7049-05aa-49bf-8010-6d68dd0863ae
+ icon = pressure
+ altitude = -1876.8985
+ index = 34
+ seed = 904
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Gilly
+ latitude = 56.7883
+ longitude = -7.2400000000000002
+ navigationId = 78240bc6-495d-4791-8772-7ad64876ebf7
+ icon = pressure
+ altitude = -6.8212102632969598E-13
+ index = 35
+ seed = 679
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Gilly
+ latitude = -29.256599999999999
+ longitude = -123.8708
+ navigationId = 986c230f-10ec-40e1-82b6-bd085acac186
+ icon = pressure
+ altitude = 2.7284841053187799E-12
+ index = 36
+ seed = 501
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Duna
+ latitude = 20.885000000000002
+ longitude = -106.79810000000001
+ navigationId = a864de06-27fe-452f-bf34-981b2113ae73
+ icon = pressure
+ altitude = 0
+ index = 37
+ seed = 16
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Duna
+ latitude = -5.9436
+ longitude = -50.548099999999998
+ navigationId = ae709377-a5cb-4b4f-b667-ba529cc7e253
+ icon = pressure
+ altitude = -2.7000623958883802E-13
+ index = 38
+ seed = 77
+}
+WAYPOINT
+{
+ name = Cyduna Face
+ celestialName = Duna
+ latitude = 17.048300000000001
+ longitude = -85.471699999999998
+ navigationId = 6b27e7ed-a143-47f0-a8a4-196083383aab
+ icon = custom
+ altitude = 6.8212102632969618E-13
+ index = 39
+ seed = 665
+}
+WAYPOINT
+{
+ name = Alien Camera
+ celestialName = Duna
+ latitude = -30.352499999999999
+ longitude = -28.6828
+ navigationId = 02334b66-5cd6-4a41-83b7-055627e944ba
+ icon = custom
+ altitude = -1.9895196601282805E-13
+ index = 40
+ seed = 37
+}
+WAYPOINT
+{
+ name = SSTV Hill
+ celestialName = Duna
+ latitude = -66.134399999999999
+ longitude = -160.7432
+ navigationId = 201424b1-dda6-45e6-947e-b8e35e9794ba
+ icon = custom
+ altitude = 0
+ index = 41
+ seed = 269
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Ike
+ latitude = 25.279499999999999
+ longitude = 178.2971
+ navigationId = 217d4365-f02c-4c2a-848e-ad5c75bf63b1
+ icon = pressure
+ altitude = -4.0017766878008797E-11
+ index = 42
+ seed = 51
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Ike
+ latitude = -14.425000000000001
+ longitude = 25.455300000000001
+ navigationId = 13426c20-bbb6-46dc-801b-b9bb60a588c4
+ icon = pressure
+ altitude = -4.5474735088646412E-13
+ index = 43
+ seed = 808
+}
+WAYPOINT
+{
+ name = Ike Zenith
+ celestialName = Duna
+ latitude = 0
+ longitude = 6
+ navigationId = 85ffab91-f80b-46f1-ae2e-d9679250bb69
+ icon = dish
+ altitude = 0
+ index = 44
+ seed = 569
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Dres
+ latitude = -85.001199999999997
+ longitude = 42.637900000000002
+ navigationId = ca6e0206-e362-4b86-b55c-99480126b562
+ icon = pressure
+ altitude = -3.5988989566249074E-12
+ index = 45
+ seed = 972
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Dres
+ latitude = 19.017330000000001
+ longitude = -57.139899999999997
+ navigationId = 5bfc97f3-4d57-453d-916a-5a5a5f92b57c
+ icon = pressure
+ altitude = -1.06581410364015E-14
+ index = 46
+ seed = 972
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Laythe
+ latitude = -17.589099999999998
+ longitude = 172.58420000000001
+ navigationId = b658c0e4-a5b3-4264-99dd-7432eee05018
+ icon = pressure
+ altitude = -1.3642420526593924E-12
+ index = 47
+ seed = 344
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Laythe
+ latitude = 29.4543
+ longitude = 7.3498999999999999
+ navigationId = c76bb712-b752-4c4a-86fd-0cf2a4bbfed9
+ icon = pressure
+ altitude = -2799.8879000000002
+ index = 48
+ seed = 384
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Vall
+ latitude = 11.634499999999999
+ longitude = 145.49189999999999
+ navigationId = cf72209a-2994-42af-a970-49182ecae345
+ icon = pressure
+ altitude = -394.33319999999998
+ index = 49
+ seed = 316
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Vall
+ latitude = -57.491500000000002
+ longitude = -144.45920000000001
+ navigationId = 21dfc4a1-43ed-4612-92df-eb181282f1c1
+ icon = pressure
+ altitude = 4.6895820560166612E-12
+ index = 50
+ seed = 1375
+}
+WAYPOINT
+{
+ name = Vallhenge
+ celestialName = Vall
+ latitude = -60.328899999999997
+ longitude = 84.057900000000004
+ navigationId = e125af95-0f29-4a2d-8b30-3b774771a5e2
+ icon = custom
+ altitude = 9.0949470177292824E-13
+ index = 51
+ seed = 384
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Tylo
+ latitude = -51.778599999999997
+ longitude = 20.577400000000001
+ navigationId = 5a6fce06-63df-47b9-ad8f-a5a43a817570
+ icon = pressure
+ altitude = 2.7284841053187799E-12
+ index = 52
+ seed = 679
+}
+WAYPOINT
+{
+ name = Cave
+ celestialName = Tylo
+ latitude = 40.267099999999999
+ longitude = 174.04669999999999
+ navigationId = 12910cef-d4a3-466e-b96f-90d190566dd2
+ icon = report
+ altitude = 2.5579538487363607E-12
+ index = 54
+ seed = 187
+}
+WAYPOINT
+{
+ name = Large Orange Circle
+ celestialName = Bop
+ latitude = 4.7400000000000002
+ longitude = -72.769999999999996
+ navigationId = 7d860c42-e129-4efa-875f-df496be98762
+ icon = custom
+ altitude = 3.1263880373444408E-13
+ index = 55
+ seed = 37
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Bop
+ latitude = 23.8733
+ longitude = -64.566699999999997
+ navigationId = 96f0dd67-ecb0-43b4-aedb-5f8419c8362c
+ icon = pressure
+ altitude = 2.7966962079517543E-11
+ index = 56
+ seed = 159
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Bop
+ latitude = 37.584200000000003
+ longitude = -139.27369999999999
+ navigationId = 82bf0ff5-1117-483e-a0a2-7627b49f69c2
+ icon = pressure
+ altitude = 1.8189894035458601E-12
+ index = 57
+ seed = 105
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Pol
+ latitude = -25.125699999999998
+ longitude = 173.77080000000001
+ navigationId = cf7e900b-4995-4ffe-b801-64dc9e8bbcfc
+ icon = pressure
+ altitude = -4.2632564145605999E-14
+ index = 58
+ seed = 337
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Pol
+ latitude = -62.830800000000004
+ longitude = 164.58619999999999
+ navigationId = e6fbae07-f2ba-4ab8-bd60-44b7b6398c39
+ icon = pressure
+ altitude = -4.5474735088646404E-12
+ index = 59
+ seed = 1197
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Eeloo
+ latitude = 24.334700000000002
+ longitude = 27.9602
+ navigationId = 8c40f4bc-513c-4b26-a4ff-bc53e5d2975b
+ icon = pressure
+ altitude = -3.6379788070917101E-12
+ index = 60
+ seed = 1293
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Eeloo
+ latitude = 51.778599999999997
+ longitude = -32.288800000000002
+ navigationId = afca125c-6590-4206-9858-2597fd7cb16e
+ icon = pressure
+ altitude = -386.88580000000002
+ index = 61
+ seed = 1375
+}
+WAYPOINT
+{
+ name = Space Kraken
+ celestialName = Bop
+ latitude = 68.435555559999997
+ longitude = 117.02527778
+ navigationId = cedb4799-9cf7-4629-9f41-bcc47b733247
+ icon = thermometer
+ altitude = -1.8189894035458565E-12
+ index = 65
+ seed = 426
+}
+WAYPOINT
+{
+ name = KSC VAB Helipad West
+ celestialName = Kerbin
+ latitude = -0.096774291835035595
+ longitude = 285.379923596384
+ navigationId = 7cfe6007-8dff-4dad-8078-dfe83f58a469
+ icon = balloon
+ altitude = -1.4210854715202004E-14
+ index = 67
+ seed = 255
+}
+WAYPOINT
+{
+ name = KSC VAB Helipad East
+ celestialName = Kerbin
+ latitude = -0.096789186370403402
+ longitude = 285.38258125436499
+ navigationId = 9e90fd65-8879-40f8-ad10-11991ef655c9
+ icon = balloon
+ altitude = 1.4210854715202004E-14
+ index = 68
+ seed = 51
+}
+WAYPOINT
+{
+ name = KSC Launchpad
+ celestialName = Kerbin
+ latitude = -0.0972059472729188
+ longitude = -74.557678525428102
+ navigationId = ec73f087-3cc8-49a7-ab26-6324f491f5e1
+ icon = balloon
+ altitude = 8.0341943049570403
+ index = 109
+ seed = 330
+}
+WAYPOINT
+{
+ name = KSC Launchpad Flagpole
+ celestialName = Kerbin
+ latitude = -0.090084646929245504
+ longitude = -74.558323606357305
+ navigationId = ca0ab3d5-8767-41de-bb33-e32c73429dae
+ icon = custom
+ altitude = 40.690020784153745
+ index = 110
+ seed = 1293
+}
+WAYPOINT
+{
+ name = KSC Launchpad Tower
+ celestialName = Kerbin
+ latitude = -0.092162061050975796
+ longitude = -74.552601310656698
+ navigationId = b0202784-910b-4e43-8b5f-31e9eecdb006
+ icon = custom
+ altitude = 4.0237118559889637
+ index = 111
+ seed = 876
+}
+WAYPOINT
+{
+ name = KSC Launchpad Tanks
+ celestialName = Kerbin
+ latitude = -0.100159477059805
+ longitude = -74.551233776036199
+ navigationId = 7b0183f6-adfd-4de5-b0be-926d7b6c40cd
+ icon = custom
+ altitude = 7.8061098207253963
+ index = 112
+ seed = 98
+}
+WAYPOINT
+{
+ name = KSC Launchpad Round Tank
+ celestialName = Kerbin
+ latitude = -0.10360694580957799
+ longitude = -74.554894432730194
+ navigationId = 069b60bc-f05a-4d46-8202-3c78ea7de05e
+ icon = custom
+ altitude = 12.866016028798228
+ index = 113
+ seed = 384
+}
+WAYPOINT
+{
+ name = KSC Runway West
+ celestialName = Kerbin
+ latitude = -0.048551152501917001
+ longitude = 285.27366496477202
+ navigationId = 96e5530a-947b-4004-8ff2-e67d6db70073
+ icon = balloon
+ altitude = 1.4210854715202004E-14
+ index = 114
+ seed = 1375
+}
+WAYPOINT
+{
+ name = KSC Runway East
+ celestialName = Kerbin
+ latitude = -0.0502284824994308
+ longitude = 285.50930442201098
+ navigationId = 5318f57b-8736-44f7-b9af-2121e5babf53
+ icon = balloon
+ altitude = -1.4210854715202004E-14
+ index = 115
+ seed = 904
+}
+WAYPOINT
+{
+ name = Island Runway 09
+ celestialName = Kerbin
+ latitude = -1.5182753759709999
+ longitude = -71.968234330081401
+ navigationId = feac6113-ff8d-48d7-8107-add22a80e3b1
+ icon = balloon
+ altitude = 24.550378443705853
+ index = 116
+ seed = 173
+}
+WAYPOINT
+{
+ name = Island Runway 27
+ celestialName = Kerbin
+ latitude = -1.51552116418601
+ longitude = -71.851643021159404
+ navigationId = a4e75aa9-d428-4c05-8a6b-9fb62104c859
+ icon = balloon
+ altitude = 37.808130879536861
+ index = 117
+ seed = 665
+}
+WAYPOINT
+{
+ name = KSC Admin Helipad
+ celestialName = Kerbin
+ latitude = -0.092585741383718806
+ longitude = 285.336888947055
+ navigationId = 60c408f6-0c3f-4b9e-a390-33ceeef7501d
+ icon = balloon
+ altitude = 17.094428896438302
+ index = 118
+ seed = 665
+}
+WAYPOINT
+{
+ name = KSC Crawlerway
+ celestialName = Kerbin
+ latitude = -0.096971050269359094
+ longitude = 285.40972797335201
+ navigationId = 6b427f70-e8a2-464b-a6de-30497113ed72
+ icon = report
+ altitude = 4.2632564145606011E-14
+ index = 119
+ seed = 1375
+}
+WAYPOINT
+{
+ name = KSC VAB
+ celestialName = Kerbin
+ latitude = -0.096801300186681399
+ longitude = 285.38647041267399
+ navigationId = becf54a9-a246-4200-be19-02ad3f15606c
+ icon = report
+ altitude = -1.4210854715202004E-14
+ index = 120
+ seed = 23
+}
+WAYPOINT
+{
+ name = KSC SPH Tanks
+ celestialName = Kerbin
+ latitude = -0.056140292627044702
+ longitude = 285.36006625169398
+ navigationId = 18a36138-53dc-40a5-aeaa-6660dbadd395
+ icon = report
+ altitude = 2.8421709430404007E-14
+ index = 129
+ seed = 77
+}
+WAYPOINT
+{
+ name = KSC VAB Tanks
+ celestialName = Kerbin
+ latitude = -0.089697105577885197
+ longitude = 285.39057192040502
+ navigationId = f25a6bcf-4663-4b69-b216-32b7ddbc0c33
+ icon = report
+ altitude = 8.9146826120559304
+ index = 121
+ seed = 316
+}
+WAYPOINT
+{
+ name = KSC VAB Round Tank
+ celestialName = Kerbin
+ latitude = -0.089861819444973901
+ longitude = 285.37263249925297
+ navigationId = eb1eb621-9907-4b7d-9930-c0ce13bdebb4
+ icon = report
+ altitude = 20.750444516190299
+ index = 122
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC VAB Pod Memorial
+ celestialName = Kerbin
+ latitude = -0.091780704399143306
+ longitude = 285.37034881251401
+ navigationId = 53f0a2ae-c400-4ddc-b3e9-169fafab8383
+ icon = report
+ altitude = 6.8803951606387699
+ index = 123
+ seed = 822
+}
+WAYPOINT
+{
+ name = KSC VAB Main Building
+ celestialName = Kerbin
+ latitude = -0.096774292553383504
+ longitude = 285.379939331976
+ navigationId = d4113c8a-4320-4396-befd-90fba6bc7d14
+ icon = report
+ altitude = 110.858032149263
+ index = 124
+ seed = 337
+}
+WAYPOINT
+{
+ name = KSC Mission Control
+ celestialName = Kerbin
+ latitude = -0.074839837287863406
+ longitude = 285.38555081350199
+ navigationId = 07f588a2-8a26-42f3-86ca-51279c679f88
+ icon = report
+ altitude = 22.904211186803899
+ index = 125
+ seed = 37
+}
+WAYPOINT
+{
+ name = KSC SPH
+ celestialName = Kerbin
+ latitude = -0.068314560757950796
+ longitude = 285.37262543456501
+ navigationId = 953653f6-86b9-4ad1-8ef7-2935452d482d
+ icon = report
+ altitude = 3.0041069599100898
+ index = 126
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC SPH Round Tank
+ celestialName = Kerbin
+ latitude = -0.070576929301162897
+ longitude = 285.35602146324197
+ navigationId = e753894e-314a-46cd-907e-bf96c3232cf1
+ icon = report
+ altitude = 20.9372527650557
+ index = 127
+ seed = 747
+}
+WAYPOINT
+{
+ name = KSC SPH Water Tower
+ celestialName = Kerbin
+ latitude = -0.058021625483335899
+ longitude = 285.35857267653398
+ navigationId = b52fe15b-9036-4cc7-a386-15636ba19d67
+ icon = report
+ altitude = 29.350859563797702
+ index = 128
+ seed = 269
+}
+WAYPOINT
+{
+ name = KSC SPH Main Building
+ celestialName = Kerbin
+ latitude = -0.062774915944332793
+ longitude = 285.36676573215601
+ navigationId = 927dd6c3-344d-4a2b-a37b-45cbe2128254
+ icon = report
+ altitude = 81.851956957950904
+ index = 130
+ seed = 1115
+}
+WAYPOINT
+{
+ name = KSC Administration
+ celestialName = Kerbin
+ latitude = -0.092581025949561496
+ longitude = 285.33689206467801
+ navigationId = 255007c2-88e2-4207-8d85-10fca7601687
+ icon = report
+ altitude = 17.094428881886401
+ index = 132
+ seed = 255
+}
+WAYPOINT
+{
+ name = KSC Flag Pole
+ celestialName = Kerbin
+ latitude = -0.094144984707098006
+ longitude = 285.34647714111202
+ navigationId = 5fb4c97d-0f78-45a9-b1c0-11e3b8c25730
+ icon = custom
+ altitude = 48.889007763238503
+ index = 133
+ seed = 105
+}
+WAYPOINT
+{
+ name = KSC Astronaut Complex
+ celestialName = Kerbin
+ latitude = -0.089909523836995006
+ longitude = 285.353940720249
+ navigationId = a7c33410-1fce-4ba3-ba48-b750f05919f7
+ icon = report
+ altitude = 25.070338910562
+ index = 134
+ seed = 398
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Hub
+ celestialName = Kerbin
+ latitude = -0.12719847030462
+ longitude = 285.39462404211099
+ navigationId = b58ce3bb-8e37-465e-a6d4-aeebeb01587a
+ icon = report
+ altitude = 16.8013761916664
+ index = 135
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish North
+ celestialName = Kerbin
+ latitude = -0.11823770130627
+ longitude = 285.38962938277001
+ navigationId = 060ec8fb-fe4e-4238-9f75-17443832bacb
+ icon = dish
+ altitude = 24.281359310727499
+ index = 136
+ seed = 16
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish South
+ celestialName = Kerbin
+ latitude = -0.13589354435676801
+ longitude = 285.38949332033002
+ navigationId = be2e0352-66ed-47a7-ba92-e35e9a4cc049
+ icon = dish
+ altitude = 24.315369184245402
+ index = 137
+ seed = 337
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish East
+ celestialName = Kerbin
+ latitude = -0.12731756091773699
+ longitude = 285.404782995262
+ navigationId = 9ebc63c1-7a97-4108-8668-564d1884de5c
+ icon = dish
+ altitude = 24.281390124116999
+ index = 138
+ seed = 276
+}
+WAYPOINT
+{
+ name = KSC Tracking Station
+ celestialName = Kerbin
+ latitude = -0.12443331920301801
+ longitude = 285.39623886670398
+ navigationId = a7c5d8a6-1028-4c73-af63-c406d3e6cbf6
+ icon = report
+ altitude = 4.3622092258883596
+ index = 139
+ seed = 890
+}
+WAYPOINT
+{
+ name = KSC R&D Small Lab
+ celestialName = Kerbin
+ latitude = -0.10354780221486801
+ longitude = 285.355025695145
+ navigationId = 89dec67e-1c11-4b47-b536-1a6dadd6885b
+ icon = report
+ altitude = 9.5331524281063995
+ index = 140
+ seed = 597
+}
+WAYPOINT
+{
+ name = KSC R&D Side Lab
+ celestialName = Kerbin
+ latitude = -0.11053661135989
+ longitude = 285.34447758648201
+ navigationId = 05c8ab58-ea3b-4fa0-9d2b-4a63072a502d
+ icon = report
+ altitude = 22.641339755500699
+ index = 141
+ seed = 77
+}
+WAYPOINT
+{
+ name = KSC R&D Central Building
+ celestialName = Kerbin
+ latitude = -0.109071838317709
+ longitude = 285.352970668154
+ navigationId = 91195f2c-90b9-4727-9e4d-6a3335b250d0
+ icon = report
+ altitude = 34.309831616352298
+ index = 142
+ seed = 597
+}
+WAYPOINT
+{
+ name = KSC R&D Main Building
+ celestialName = Kerbin
+ latitude = -0.10848324834083301
+ longitude = 285.36248063932999
+ navigationId = afaac97f-e05d-4197-a944-bef8ffed32c3
+ icon = report
+ altitude = 28.734739397070399
+ index = 143
+ seed = 98
+}
+WAYPOINT
+{
+ name = KSC R&D Corner Lab
+ celestialName = Kerbin
+ latitude = -0.118624032947731
+ longitude = 285.366529153474
+ navigationId = f8f3a000-c977-4c93-87dc-d6e2cd34360a
+ icon = report
+ altitude = 34.784655628493098
+ index = 144
+ seed = 501
+}
+WAYPOINT
+{
+ name = KSC R&D Wind Tunnel
+ celestialName = Kerbin
+ latitude = -0.123517638824824
+ longitude = 285.360777245132
+ navigationId = d1d95275-9a34-4730-8d8a-eac89ddb8e44
+ icon = report
+ altitude = 0
+ index = 145
+ seed = 808
+}
+WAYPOINT
+{
+ name = KSC R&D Tanks
+ celestialName = Kerbin
+ latitude = -0.12137868545054201
+ longitude = 285.35374778114402
+ navigationId = 41be0955-16bb-4e87-b4b0-0f693719cd83
+ icon = report
+ altitude = 9.1798749957233401
+ index = 146
+ seed = 37
+}
+WAYPOINT
+{
+ name = KSC R&D Observatory
+ celestialName = Kerbin
+ latitude = -0.122488061527529
+ longitude = 285.347702897479
+ navigationId = 3dfc5ddb-b42b-4fc2-ad7d-cd788718c530
+ icon = report
+ altitude = 35.593318588914997
+ index = 147
+ seed = 822
+}
+WAYPOINT
+{
+ name = KSC R&D
+ celestialName = Kerbin
+ latitude = -0.10884933370783199
+ longitude = 285.358611235723
+ navigationId = 6bf4e0b5-ae96-4e83-8082-a8d7169cf142
+ icon = report
+ altitude = 3.01313023851257
+ index = 148
+ seed = 180
+}
+WAYPOINT
+{
+ name = KSC
+ celestialName = Kerbin
+ latitude = -0.079292882337452006
+ longitude = 285.40410323138201
+ navigationId = 7d8b0263-e4ab-40f6-af63-3f74f5a8f15e
+ icon = report
+ altitude = -1.09118695906368
+ index = 149
+ seed = 583
+}
+WAYPOINT
+{
+ name = KSC VAB South Complex
+ celestialName = Kerbin
+ latitude = -0.106497259621255
+ longitude = 285.380791209351
+ navigationId = 2f7d2497-291a-4fe5-817d-84a543833398
+ icon = report
+ altitude = 8.6853406010195595
+ index = 150
+ seed = 316
+}
+WAYPOINT
+{
+ name = Island Launchsite
+ celestialName = Kerbin
+ latitude = -1.5292755201464101
+ longitude = -71.885305541255093
+ navigationId = bb4d2e1e-1fb0-4d93-b1fc-ff2831454093
+ icon = balloon
+ altitude = 18.343590766541126
+ index = 151
+ seed = 119
+}
+WAYPOINT
+{
+ name = Woomerang Launchpad
+ celestialName = Kerbin
+ latitude = 45.290008610357802
+ longitude = 136.11000269884599
+ navigationId = 48148dd2-e673-4285-aac5-a055b6f411e2
+ icon = balloon
+ altitude = 5.5465857695093064
+ index = 152
+ seed = 876
+}
+WAYPOINT
+{
+ name = Woomerang Tracking Station
+ celestialName = Kerbin
+ latitude = 44.720015892778001
+ longitude = 137.029843878425
+ navigationId = 5049d71c-6976-4bea-bb6b-7b2049a63845
+ icon = dish
+ altitude = 1.7446588787679502
+ index = 153
+ seed = 876
+}
+WAYPOINT
+{
+ name = KSC Runway 09
+ celestialName = Kerbin
+ latitude = -0.048600385045034701
+ longitude = -74.724409241422194
+ navigationId = 96e5530a-947b-4004-8ff2-e67d6db70073
+ icon = balloon
+ altitude = 4.5361671554856429
+ index = 114
+ seed = 1375
+}
+WAYPOINT
+{
+ name = K2 Summit
+ celestialName = Kerbin
+ latitude = 0.062761120686451302
+ longitude = -79.349539300638199
+ navigationId = 04c0866a-8a74-40eb-a248-764e551e6a8a
+ icon = pressure
+ altitude = 0.038140040009238874
+ index = 154
+ seed = 384
+}
+WAYPOINT
+{
+ name = Island Airfield Tower
+ celestialName = Kerbin
+ latitude = -1.52331871899049
+ longitude = -71.911111810017005
+ navigationId = 73caeafd-cfa1-49cc-9669-ab415133bce0
+ icon = custom
+ altitude = 66.558396332664415
+ index = 155
+ seed = 426
+}
+WAYPOINT
+{
+ name = Smiley Face
+ celestialName = Kerbin
+ latitude = -30
+ longitude = -80
+ navigationId = 66652944-f478-430f-87a3-48b1fd658d19
+ icon = gravity
+ altitude = 0
+ index = 156
+ seed = 276
+}
+WAYPOINT
+{
+ name = Baikerbanur Monolith
+ celestialName = Kerbin
+ latitude = 20.6708947559456
+ longitude = -146.49685403868901
+ navigationId = 5ce4f5b1-e46e-4538-ab9a-32c4f82fc413
+ icon = custom
+ altitude = -1.323019093834148
+ index = 157
+ seed = 651
+}
+WAYPOINT
+{
+ name = Baikerbanur VAB
+ celestialName = Kerbin
+ latitude = 20.635392812880202
+ longitude = -146.430052175329
+ navigationId = 5974e347-7e88-46e8-a6a8-921bfc061f16
+ icon = custom
+ altitude = 57.133920537540462
+ index = 158
+ seed = 412
+}
+WAYPOINT
+{
+ name = Baikerbanur Launchpad
+ celestialName = Kerbin
+ latitude = 20.663490720665202
+ longitude = -146.42099044111399
+ navigationId = 4651d52b-6a9a-4eee-b08c-1ef3bb56e91e
+ icon = balloon
+ altitude = 4.0092718037774944
+ index = 159
+ seed = 679
+}
+WAYPOINT
+{
+ name = KSC Monolith
+ celestialName = Kerbin
+ latitude = 0.102329810251359
+ longitude = -74.568421012228896
+ navigationId = c1dbd986-6335-4cdb-91f3-557efeb9815b
+ icon = custom
+ altitude = 0.65132247610021921
+ index = 160
+ seed = 358
+}
+WAYPOINT
+{
+ name = Nye Island Tracking Station
+ celestialName = Kerbin
+ latitude = 5.3599316110916302
+ longitude = 108.54992089948
+ navigationId = 29502e94-2f35-4163-aa39-6a4fcef970a7
+ icon = dish
+ altitude = -9.8039397293468937
+ index = 3
+ seed = 597
+}
+WAYPOINT
+{
+ name = Prime Meridian
+ celestialName = Kerbin
+ latitude = 0
+ longitude = 0
+ navigationId = 5263820b-44c1-4c08-bf86-9f2ff465ba06
+ icon = thermometer
+ altitude = 0
+ index = 161
+ seed = 651
+}
+WAYPOINT
+{
+ name = Northern Sinkhole
+ celestialName = Moho
+ latitude = 90
+ longitude = 0
+ navigationId = 0614db8a-7fab-48e6-874f-dc2c7d8e900d
+ icon = pressure
+ altitude = -4600.0887722168118
+ index = 162
+ seed = 1197
+}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.KSCBiomes.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.KSCBiomes.cfg
new file mode 100644
index 0000000..fc977dd
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.KSCBiomes.cfg
@@ -0,0 +1,367 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints.
+
+WAYPOINT
+{
+ name = LaunchPad
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0972077857261656
+ longitude = 285.442324681089
+ altitude = 7.80529459452723
+ index = 0
+ seed = 23
+}
+WAYPOINT
+{
+ name = Crawlerway
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0969710502693591
+ longitude = 285.409727973352
+ altitude = 2.91531068265904
+ index = 1
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0968013001866814
+ longitude = 285.386470412674
+ altitude = 2.83937782328579
+ index = 2
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB Tanks
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0896971055778852
+ longitude = 285.390571920405
+ altitude = 8.91468261205593
+ index = 3
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB Round Tank
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0898618194449739
+ longitude = 285.372632499253
+ altitude = 20.7504445161903
+ index = 4
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB Pod Memorial
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0917807043991433
+ longitude = 285.370348812514
+ altitude = 6.88039516063877
+ index = 5
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB Main Building
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0967742925533835
+ longitude = 285.379939331976
+ altitude = 110.858032149263
+ index = 6
+ seed = 23
+}
+WAYPOINT
+{
+ name = Mission Control
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0748398372878634
+ longitude = 285.385550813502
+ altitude = 22.9042111868039
+ index = 7
+ seed = 23
+}
+WAYPOINT
+{
+ name = SPH
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0683145607579508
+ longitude = 285.372625434565
+ altitude = 3.00410695991009
+ index = 8
+ seed = 23
+}
+WAYPOINT
+{
+ name = SPH Round Tank
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0705769293011629
+ longitude = 285.356021463242
+ altitude = 20.9372527650557
+ index = 9
+ seed = 23
+}
+WAYPOINT
+{
+ name = SPH Water Tower
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0580216254833359
+ longitude = 285.358572676534
+ altitude = 29.3508595637977
+ index = 10
+ seed = 23
+}
+WAYPOINT
+{
+ name = SPH Tanks
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0561402926270447
+ longitude = 285.360066251694
+ altitude = 9.23774899286222
+ index = 11
+ seed = 23
+}
+WAYPOINT
+{
+ name = SPH Main Building
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0627749159443328
+ longitude = 285.366765732156
+ altitude = 81.8519569579509
+ index = 12
+ seed = 23
+}
+WAYPOINT
+{
+ name = Runway
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0485519156600059
+ longitude = 285.273541622916
+ altitude = 4.52002578240354
+ index = 13
+ seed = 23
+}
+WAYPOINT
+{
+ name = Administration
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.0925810259495615
+ longitude = 285.336892064678
+ altitude = 17.0944288818864
+ index = 14
+ seed = 23
+}
+WAYPOINT
+{
+ name = Flag Pole
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.094144984707098
+ longitude = 285.346477141112
+ altitude = 48.8890077632385
+ index = 15
+ seed = 23
+}
+WAYPOINT
+{
+ name = Astronaut Complex
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.089909523836995
+ longitude = 285.353940720249
+ altitude = 25.070338910562
+ index = 16
+ seed = 23
+}
+WAYPOINT
+{
+ name = Tracking Station Hub
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.12719847030462
+ longitude = 285.394624042111
+ altitude = 16.8013761916664
+ index = 17
+ seed = 23
+}
+WAYPOINT
+{
+ name = Tracking Station Dish North
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.11823770130627
+ longitude = 285.38962938277
+ altitude = 24.2813593107275
+ index = 18
+ seed = 23
+}
+WAYPOINT
+{
+ name = Tracking Station Dish South
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.135893544356768
+ longitude = 285.38949332033
+ altitude = 24.3153691842454
+ index = 19
+ seed = 23
+}
+WAYPOINT
+{
+ name = Tracking Station Dish East
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.127317560917737
+ longitude = 285.404782995262
+ altitude = 24.281390124117
+ index = 20
+ seed = 23
+}
+WAYPOINT
+{
+ name = Tracking Station
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.124433319203018
+ longitude = 285.396238866704
+ altitude = 4.36220922588836
+ index = 21
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Small Lab
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.103547802214868
+ longitude = 285.355025695145
+ altitude = 9.5331524281064
+ index = 22
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Side Lab
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.11053661135989
+ longitude = 285.344477586482
+ altitude = 22.6413397555007
+ index = 23
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Central Building
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.109071838317709
+ longitude = 285.352970668154
+ altitude = 34.3098316163523
+ index = 24
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Main Building
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.108483248340833
+ longitude = 285.36248063933
+ altitude = 28.7347393970704
+ index = 25
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Corner Lab
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.118624032947731
+ longitude = 285.366529153474
+ altitude = 34.7846556284931
+ index = 26
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Wind Tunnel
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.123517638824824
+ longitude = 285.360777245132
+ altitude = 29.7992018720834
+ index = 27
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Tanks
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.121378685450542
+ longitude = 285.353747781144
+ altitude = 9.17987499572334
+ index = 28
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D Observatory
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.122488061527529
+ longitude = 285.347702897479
+ altitude = 35.593318588915
+ index = 29
+ seed = 23
+}
+WAYPOINT
+{
+ name = R&D
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.108849333707832
+ longitude = 285.358611235723
+ altitude = 3.01313023851257
+ index = 30
+ seed = 23
+}
+WAYPOINT
+{
+ name = KSC
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.079292882337452
+ longitude = 285.404103231382
+ altitude = -1.09118695906368
+ index = 31
+ seed = 23
+}
+WAYPOINT
+{
+ name = VAB South Complex
+ celestialName = Kerbin
+ icon = report
+ latitude = -0.106497259621255
+ longitude = 285.380791209351
+ altitude = 8.68534060101956
+ index = 32
+ seed = 23
+}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Kerbin.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Kerbin.cfg
new file mode 100644
index 0000000..ac37d30
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Kerbin.cfg
@@ -0,0 +1,820 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints.
+
+WAYPOINT
+{
+ name = North Station One Tracking Station
+ celestialName = Kerbin
+ latitude = 63.095084361794797
+ longitude = -90.079893279056407
+ navigationId = 80698255-4e2f-4c14-88d5-7a0faeca3ab9
+ icon = dish
+ altitude = 2.7284841053187847E-12
+ index = 0
+ seed = 51
+}
+WAYPOINT
+{
+ name = Harvester Massif Tracking Station
+ celestialName = Kerbin
+ latitude = -11.9501036949728
+ longitude = 33.740039782730598
+ navigationId = 60053bff-d21f-4570-b8b3-e73cfea1bf26
+ icon = dish
+ altitude = 4.3078600020335216
+ index = 1
+ seed = 358
+}
+WAYPOINT
+{
+ name = Crater Rim Tracking Station
+ celestialName = Kerbin
+ latitude = 9.4500575394183706
+ longitude = -172.11006586553799
+ navigationId = d2f734ce-52f3-4dff-9d04-3b51940fb877
+ icon = dish
+ altitude = -2.7284841053187847E-12
+ index = 5
+ seed = 808
+}
+WAYPOINT
+{
+ name = Baikerbanur Tracking Station
+ celestialName = Kerbin
+ latitude = 20.681019179238699
+ longitude = -146.50146247265101
+ navigationId = ec0d87b9-4371-42d1-8bc1-0031b17fcf4e
+ icon = dish
+ altitude = 11.482591688283833
+ index = 6
+ seed = 241
+}
+WAYPOINT
+{
+ name = Mesa South Tracking Station
+ celestialName = Kerbin
+ latitude = -59.590011134603699
+ longitude = -25.869794095014601
+ navigationId = e3b35deb-8fe5-4864-8d27-1698097b98f3
+ icon = dish
+ altitude = 4.3227068297583173
+ index = 7
+ seed = 583
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Kerbin
+ latitude = 61.578400000000002
+ longitude = 46.3733
+ navigationId = d782c960-172d-4d5a-8743-9548c8a55e86
+ icon = pressure
+ altitude = 3.637978807091713E-12
+ index = 8
+ seed = 651
+}
+WAYPOINT
+{
+ name = Eastern Monolith
+ celestialName = Kerbin
+ latitude = -28.808299999999999
+ longitude = -13.440099999999999
+ navigationId = 1d620c17-aa6f-4492-bdb7-b72d01adae00
+ icon = custom
+ altitude = 4.5474735088646412E-12
+ index = 9
+ seed = 91
+}
+WAYPOINT
+{
+ name = Hidden Valley Monolith
+ celestialName = Kerbin
+ latitude = 35.570510763646503
+ longitude = -74.977286738143405
+ navigationId = 4d433a4d-60e1-42d6-b92e-424005c34705
+ icon = custom
+ altitude = 0.46431883214927439
+ index = 10
+ seed = 9
+}
+WAYPOINT
+{
+ name = Western Monolith
+ celestialName = Kerbin
+ latitude = -0.64011062426790699
+ longitude = -80.766738375291098
+ navigationId = a6803f1b-ca9a-43e9-98bd-b6cb321f6ab6
+ icon = custom
+ altitude = 15.919417221052754
+ index = 11
+ seed = 426
+}
+WAYPOINT
+{
+ name = Deepest Depth
+ celestialName = Kerbin
+ latitude = -28.905000000000001
+ longitude = -83.111599999999996
+ navigationId = 78bfd3da-a544-40bd-aecd-d61c24dde4aa
+ icon = pressure
+ altitude = -1390.9353000000001
+ index = 12
+ seed = 248
+}
+WAYPOINT
+{
+ name = Tut-Ur Jeb-Ahn
+ celestialName = Kerbin
+ latitude = -6.5056566716276301
+ longitude = -141.68561514627001
+ navigationId = 963243d9-2f0b-47c1-8f6a-e73efeea4436
+ icon = eva
+ altitude = 64.3599999999999
+ index = 13
+ seed = 358
+}
+WAYPOINT
+{
+ name = Crashed Saucer
+ celestialName = Kerbin
+ latitude = 81.955167431885798
+ longitude = -128.517572697502
+ navigationId = 1e8b1906-b7b6-484f-8775-ee92c0744be4
+ icon = custom
+ altitude = 3.4355408039409099
+ index = 15
+ seed = 159
+}
+WAYPOINT
+{
+ name = KSC VAB Helipad West
+ celestialName = Kerbin
+ latitude = -0.096774291835035595
+ longitude = 285.379923596384
+ navigationId = 7cfe6007-8dff-4dad-8078-dfe83f58a469
+ icon = balloon
+ altitude = -1.4210854715202004E-14
+ index = 67
+ seed = 255
+}
+WAYPOINT
+{
+ name = KSC VAB Helipad East
+ celestialName = Kerbin
+ latitude = -0.096789186370403402
+ longitude = 285.38258125436499
+ navigationId = 9e90fd65-8879-40f8-ad10-11991ef655c9
+ icon = balloon
+ altitude = 1.4210854715202004E-14
+ index = 68
+ seed = 51
+}
+WAYPOINT
+{
+ name = KSC Launchpad
+ celestialName = Kerbin
+ latitude = -0.0972059472729188
+ longitude = -74.557678525428102
+ navigationId = ec73f087-3cc8-49a7-ab26-6324f491f5e1
+ icon = balloon
+ altitude = 8.0341943049570403
+ index = 109
+ seed = 330
+}
+WAYPOINT
+{
+ name = KSC Launchpad Flagpole
+ celestialName = Kerbin
+ latitude = -0.090084646929245504
+ longitude = -74.558323606357305
+ navigationId = ca0ab3d5-8767-41de-bb33-e32c73429dae
+ icon = custom
+ altitude = 40.690020784153745
+ index = 110
+ seed = 1293
+}
+WAYPOINT
+{
+ name = KSC Launchpad Tower
+ celestialName = Kerbin
+ latitude = -0.092162061050975796
+ longitude = -74.552601310656698
+ navigationId = b0202784-910b-4e43-8b5f-31e9eecdb006
+ icon = custom
+ altitude = 4.0237118559889637
+ index = 111
+ seed = 876
+}
+WAYPOINT
+{
+ name = KSC Launchpad Tanks
+ celestialName = Kerbin
+ latitude = -0.100159477059805
+ longitude = -74.551233776036199
+ navigationId = 7b0183f6-adfd-4de5-b0be-926d7b6c40cd
+ icon = custom
+ altitude = 7.8061098207253963
+ index = 112
+ seed = 98
+}
+WAYPOINT
+{
+ name = KSC Launchpad Round Tank
+ celestialName = Kerbin
+ latitude = -0.10360694580957799
+ longitude = -74.554894432730194
+ navigationId = 069b60bc-f05a-4d46-8202-3c78ea7de05e
+ icon = custom
+ altitude = 12.866016028798228
+ index = 113
+ seed = 384
+}
+WAYPOINT
+{
+ name = KSC Runway West
+ celestialName = Kerbin
+ latitude = -0.048551152501917001
+ longitude = 285.27366496477202
+ navigationId = 96e5530a-947b-4004-8ff2-e67d6db70073
+ icon = balloon
+ altitude = 1.4210854715202004E-14
+ index = 114
+ seed = 1375
+}
+WAYPOINT
+{
+ name = KSC Runway East
+ celestialName = Kerbin
+ latitude = -0.0502284824994308
+ longitude = 285.50930442201098
+ navigationId = 5318f57b-8736-44f7-b9af-2121e5babf53
+ icon = balloon
+ altitude = -1.4210854715202004E-14
+ index = 115
+ seed = 904
+}
+WAYPOINT
+{
+ name = Island Runway 09
+ celestialName = Kerbin
+ latitude = -1.5182753759709999
+ longitude = -71.968234330081401
+ navigationId = feac6113-ff8d-48d7-8107-add22a80e3b1
+ icon = balloon
+ altitude = 24.550378443705853
+ index = 116
+ seed = 173
+}
+WAYPOINT
+{
+ name = Island Runway 27
+ celestialName = Kerbin
+ latitude = -1.51552116418601
+ longitude = -71.851643021159404
+ navigationId = a4e75aa9-d428-4c05-8a6b-9fb62104c859
+ icon = balloon
+ altitude = 37.808130879536861
+ index = 117
+ seed = 665
+}
+WAYPOINT
+{
+ name = KSC Admin Helipad
+ celestialName = Kerbin
+ latitude = -0.092585741383718806
+ longitude = 285.336888947055
+ navigationId = 60c408f6-0c3f-4b9e-a390-33ceeef7501d
+ icon = balloon
+ altitude = 17.094428896438302
+ index = 118
+ seed = 665
+}
+WAYPOINT
+{
+ name = KSC Crawlerway
+ celestialName = Kerbin
+ latitude = -0.096971050269359094
+ longitude = 285.40972797335201
+ navigationId = 6b427f70-e8a2-464b-a6de-30497113ed72
+ icon = report
+ altitude = 4.2632564145606011E-14
+ index = 119
+ seed = 1375
+}
+WAYPOINT
+{
+ name = KSC VAB
+ celestialName = Kerbin
+ latitude = -0.096801300186681399
+ longitude = 285.38647041267399
+ navigationId = becf54a9-a246-4200-be19-02ad3f15606c
+ icon = report
+ altitude = -1.4210854715202004E-14
+ index = 120
+ seed = 23
+}
+WAYPOINT
+{
+ name = KSC SPH Tanks
+ celestialName = Kerbin
+ latitude = -0.056140292627044702
+ longitude = 285.36006625169398
+ navigationId = 18a36138-53dc-40a5-aeaa-6660dbadd395
+ icon = report
+ altitude = 2.8421709430404007E-14
+ index = 129
+ seed = 77
+}
+WAYPOINT
+{
+ name = KSC VAB Tanks
+ celestialName = Kerbin
+ latitude = -0.089697105577885197
+ longitude = 285.39057192040502
+ navigationId = f25a6bcf-4663-4b69-b216-32b7ddbc0c33
+ icon = report
+ altitude = 8.9146826120559304
+ index = 121
+ seed = 316
+}
+WAYPOINT
+{
+ name = KSC VAB Round Tank
+ celestialName = Kerbin
+ latitude = -0.089861819444973901
+ longitude = 285.37263249925297
+ navigationId = eb1eb621-9907-4b7d-9930-c0ce13bdebb4
+ icon = report
+ altitude = 20.750444516190299
+ index = 122
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC VAB Pod Memorial
+ celestialName = Kerbin
+ latitude = -0.091780704399143306
+ longitude = 285.37034881251401
+ navigationId = 53f0a2ae-c400-4ddc-b3e9-169fafab8383
+ icon = report
+ altitude = 6.8803951606387699
+ index = 123
+ seed = 822
+}
+WAYPOINT
+{
+ name = KSC VAB Main Building
+ celestialName = Kerbin
+ latitude = -0.096774292553383504
+ longitude = 285.379939331976
+ navigationId = d4113c8a-4320-4396-befd-90fba6bc7d14
+ icon = report
+ altitude = 110.858032149263
+ index = 124
+ seed = 337
+}
+WAYPOINT
+{
+ name = KSC Mission Control
+ celestialName = Kerbin
+ latitude = -0.074839837287863406
+ longitude = 285.38555081350199
+ navigationId = 07f588a2-8a26-42f3-86ca-51279c679f88
+ icon = report
+ altitude = 22.904211186803899
+ index = 125
+ seed = 37
+}
+WAYPOINT
+{
+ name = KSC SPH
+ celestialName = Kerbin
+ latitude = -0.068314560757950796
+ longitude = 285.37262543456501
+ navigationId = 953653f6-86b9-4ad1-8ef7-2935452d482d
+ icon = report
+ altitude = 3.0041069599100898
+ index = 126
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC SPH Round Tank
+ celestialName = Kerbin
+ latitude = -0.070576929301162897
+ longitude = 285.35602146324197
+ navigationId = e753894e-314a-46cd-907e-bf96c3232cf1
+ icon = report
+ altitude = 20.9372527650557
+ index = 127
+ seed = 747
+}
+WAYPOINT
+{
+ name = KSC SPH Water Tower
+ celestialName = Kerbin
+ latitude = -0.058021625483335899
+ longitude = 285.35857267653398
+ navigationId = b52fe15b-9036-4cc7-a386-15636ba19d67
+ icon = report
+ altitude = 29.350859563797702
+ index = 128
+ seed = 269
+}
+WAYPOINT
+{
+ name = KSC SPH Main Building
+ celestialName = Kerbin
+ latitude = -0.062774915944332793
+ longitude = 285.36676573215601
+ navigationId = 927dd6c3-344d-4a2b-a37b-45cbe2128254
+ icon = report
+ altitude = 81.851956957950904
+ index = 130
+ seed = 1115
+}
+WAYPOINT
+{
+ name = KSC Administration
+ celestialName = Kerbin
+ latitude = -0.092581025949561496
+ longitude = 285.33689206467801
+ navigationId = 255007c2-88e2-4207-8d85-10fca7601687
+ icon = report
+ altitude = 17.094428881886401
+ index = 132
+ seed = 255
+}
+WAYPOINT
+{
+ name = KSC Flag Pole
+ celestialName = Kerbin
+ latitude = -0.094144984707098006
+ longitude = 285.34647714111202
+ navigationId = 5fb4c97d-0f78-45a9-b1c0-11e3b8c25730
+ icon = custom
+ altitude = 48.889007763238503
+ index = 133
+ seed = 105
+}
+WAYPOINT
+{
+ name = KSC Astronaut Complex
+ celestialName = Kerbin
+ latitude = -0.089909523836995006
+ longitude = 285.353940720249
+ navigationId = a7c33410-1fce-4ba3-ba48-b750f05919f7
+ icon = report
+ altitude = 25.070338910562
+ index = 134
+ seed = 398
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Hub
+ celestialName = Kerbin
+ latitude = -0.12719847030462
+ longitude = 285.39462404211099
+ navigationId = b58ce3bb-8e37-465e-a6d4-aeebeb01587a
+ icon = report
+ altitude = 16.8013761916664
+ index = 135
+ seed = 358
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish North
+ celestialName = Kerbin
+ latitude = -0.11823770130627
+ longitude = 285.38962938277001
+ navigationId = 060ec8fb-fe4e-4238-9f75-17443832bacb
+ icon = dish
+ altitude = 24.281359310727499
+ index = 136
+ seed = 16
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish South
+ celestialName = Kerbin
+ latitude = -0.13589354435676801
+ longitude = 285.38949332033002
+ navigationId = be2e0352-66ed-47a7-ba92-e35e9a4cc049
+ icon = dish
+ altitude = 24.315369184245402
+ index = 137
+ seed = 337
+}
+WAYPOINT
+{
+ name = KSC Tracking Station Dish East
+ celestialName = Kerbin
+ latitude = -0.12731756091773699
+ longitude = 285.404782995262
+ navigationId = 9ebc63c1-7a97-4108-8668-564d1884de5c
+ icon = dish
+ altitude = 24.281390124116999
+ index = 138
+ seed = 276
+}
+WAYPOINT
+{
+ name = KSC Tracking Station
+ celestialName = Kerbin
+ latitude = -0.12443331920301801
+ longitude = 285.39623886670398
+ navigationId = a7c5d8a6-1028-4c73-af63-c406d3e6cbf6
+ icon = report
+ altitude = 4.3622092258883596
+ index = 139
+ seed = 890
+}
+WAYPOINT
+{
+ name = KSC R&D Small Lab
+ celestialName = Kerbin
+ latitude = -0.10354780221486801
+ longitude = 285.355025695145
+ navigationId = 89dec67e-1c11-4b47-b536-1a6dadd6885b
+ icon = report
+ altitude = 9.5331524281063995
+ index = 140
+ seed = 597
+}
+WAYPOINT
+{
+ name = KSC R&D Side Lab
+ celestialName = Kerbin
+ latitude = -0.11053661135989
+ longitude = 285.34447758648201
+ navigationId = 05c8ab58-ea3b-4fa0-9d2b-4a63072a502d
+ icon = report
+ altitude = 22.641339755500699
+ index = 141
+ seed = 77
+}
+WAYPOINT
+{
+ name = KSC R&D Central Building
+ celestialName = Kerbin
+ latitude = -0.109071838317709
+ longitude = 285.352970668154
+ navigationId = 91195f2c-90b9-4727-9e4d-6a3335b250d0
+ icon = report
+ altitude = 34.309831616352298
+ index = 142
+ seed = 597
+}
+WAYPOINT
+{
+ name = KSC R&D Main Building
+ celestialName = Kerbin
+ latitude = -0.10848324834083301
+ longitude = 285.36248063932999
+ navigationId = afaac97f-e05d-4197-a944-bef8ffed32c3
+ icon = report
+ altitude = 28.734739397070399
+ index = 143
+ seed = 98
+}
+WAYPOINT
+{
+ name = KSC R&D Corner Lab
+ celestialName = Kerbin
+ latitude = -0.118624032947731
+ longitude = 285.366529153474
+ navigationId = f8f3a000-c977-4c93-87dc-d6e2cd34360a
+ icon = report
+ altitude = 34.784655628493098
+ index = 144
+ seed = 501
+}
+WAYPOINT
+{
+ name = KSC R&D Wind Tunnel
+ celestialName = Kerbin
+ latitude = -0.123517638824824
+ longitude = 285.360777245132
+ navigationId = d1d95275-9a34-4730-8d8a-eac89ddb8e44
+ icon = report
+ altitude = 0
+ index = 145
+ seed = 808
+}
+WAYPOINT
+{
+ name = KSC R&D Tanks
+ celestialName = Kerbin
+ latitude = -0.12137868545054201
+ longitude = 285.35374778114402
+ navigationId = 41be0955-16bb-4e87-b4b0-0f693719cd83
+ icon = report
+ altitude = 9.1798749957233401
+ index = 146
+ seed = 37
+}
+WAYPOINT
+{
+ name = KSC R&D Observatory
+ celestialName = Kerbin
+ latitude = -0.122488061527529
+ longitude = 285.347702897479
+ navigationId = 3dfc5ddb-b42b-4fc2-ad7d-cd788718c530
+ icon = report
+ altitude = 35.593318588914997
+ index = 147
+ seed = 822
+}
+WAYPOINT
+{
+ name = KSC R&D
+ celestialName = Kerbin
+ latitude = -0.10884933370783199
+ longitude = 285.358611235723
+ navigationId = 6bf4e0b5-ae96-4e83-8082-a8d7169cf142
+ icon = report
+ altitude = 3.01313023851257
+ index = 148
+ seed = 180
+}
+WAYPOINT
+{
+ name = KSC
+ celestialName = Kerbin
+ latitude = -0.079292882337452006
+ longitude = 285.40410323138201
+ navigationId = 7d8b0263-e4ab-40f6-af63-3f74f5a8f15e
+ icon = report
+ altitude = -1.09118695906368
+ index = 149
+ seed = 583
+}
+WAYPOINT
+{
+ name = KSC VAB South Complex
+ celestialName = Kerbin
+ latitude = -0.106497259621255
+ longitude = 285.380791209351
+ navigationId = 2f7d2497-291a-4fe5-817d-84a543833398
+ icon = report
+ altitude = 8.6853406010195595
+ index = 150
+ seed = 316
+}
+WAYPOINT
+{
+ name = Island Launchsite
+ celestialName = Kerbin
+ latitude = -1.5292755201464101
+ longitude = -71.885305541255093
+ navigationId = bb4d2e1e-1fb0-4d93-b1fc-ff2831454093
+ icon = balloon
+ altitude = 18.343590766541126
+ index = 151
+ seed = 119
+}
+WAYPOINT
+{
+ name = Woomerang Launchpad
+ celestialName = Kerbin
+ latitude = 45.290008610357802
+ longitude = 136.11000269884599
+ navigationId = 48148dd2-e673-4285-aac5-a055b6f411e2
+ icon = balloon
+ altitude = 5.5465857695093064
+ index = 152
+ seed = 876
+}
+WAYPOINT
+{
+ name = Woomerang Tracking Station
+ celestialName = Kerbin
+ latitude = 44.720015892778001
+ longitude = 137.029843878425
+ navigationId = 5049d71c-6976-4bea-bb6b-7b2049a63845
+ icon = dish
+ altitude = 1.7446588787679502
+ index = 153
+ seed = 876
+}
+WAYPOINT
+{
+ name = KSC Runway 09
+ celestialName = Kerbin
+ latitude = -0.048600385045034701
+ longitude = -74.724409241422194
+ navigationId = 96e5530a-947b-4004-8ff2-e67d6db70073
+ icon = balloon
+ altitude = 4.5361671554856429
+ index = 114
+ seed = 1375
+}
+WAYPOINT
+{
+ name = K2 Summit
+ celestialName = Kerbin
+ latitude = 0.062761120686451302
+ longitude = -79.349539300638199
+ navigationId = 04c0866a-8a74-40eb-a248-764e551e6a8a
+ icon = pressure
+ altitude = 0.038140040009238874
+ index = 154
+ seed = 384
+}
+WAYPOINT
+{
+ name = Island Airfield Tower
+ celestialName = Kerbin
+ latitude = -1.52331871899049
+ longitude = -71.911111810017005
+ navigationId = 73caeafd-cfa1-49cc-9669-ab415133bce0
+ icon = custom
+ altitude = 66.558396332664415
+ index = 155
+ seed = 426
+}
+WAYPOINT
+{
+ name = Smiley Face
+ celestialName = Kerbin
+ latitude = -30
+ longitude = -80
+ navigationId = 66652944-f478-430f-87a3-48b1fd658d19
+ icon = gravity
+ altitude = 0
+ index = 156
+ seed = 276
+}
+WAYPOINT
+{
+ name = Baikerbanur Monolith
+ celestialName = Kerbin
+ latitude = 20.6708947559456
+ longitude = -146.49685403868901
+ navigationId = 5ce4f5b1-e46e-4538-ab9a-32c4f82fc413
+ icon = custom
+ altitude = -1.323019093834148
+ index = 157
+ seed = 651
+}
+WAYPOINT
+{
+ name = Baikerbanur VAB
+ celestialName = Kerbin
+ latitude = 20.635392812880202
+ longitude = -146.430052175329
+ navigationId = 5974e347-7e88-46e8-a6a8-921bfc061f16
+ icon = custom
+ altitude = 57.133920537540462
+ index = 158
+ seed = 412
+}
+WAYPOINT
+{
+ name = Baikerbanur Launchpad
+ celestialName = Kerbin
+ latitude = 20.663490720665202
+ longitude = -146.42099044111399
+ navigationId = 4651d52b-6a9a-4eee-b08c-1ef3bb56e91e
+ icon = balloon
+ altitude = 4.0092718037774944
+ index = 159
+ seed = 679
+}
+WAYPOINT
+{
+ name = KSC Monolith
+ celestialName = Kerbin
+ latitude = 0.102329810251359
+ longitude = -74.568421012228896
+ navigationId = c1dbd986-6335-4cdb-91f3-557efeb9815b
+ icon = custom
+ altitude = 0.65132247610021921
+ index = 160
+ seed = 358
+}
+WAYPOINT
+{
+ name = Nye Island Tracking Station
+ celestialName = Kerbin
+ latitude = 5.3599316110916302
+ longitude = 108.54992089948
+ navigationId = 29502e94-2f35-4163-aa39-6a4fcef970a7
+ icon = dish
+ altitude = -9.8039397293468937
+ index = 3
+ seed = 597
+}
+WAYPOINT
+{
+ name = Prime Meridian
+ celestialName = Kerbin
+ latitude = 0
+ longitude = 0
+ navigationId = 5263820b-44c1-4c08-bf86-9f2ff465ba06
+ icon = thermometer
+ altitude = 0
+ index = 161
+ seed = 651
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.LandingSites.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.LandingSites.cfg
new file mode 100644
index 0000000..898f4d5
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.LandingSites.cfg
@@ -0,0 +1,92 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints.
+
+WAYPOINT
+{
+ name = LaunchPad
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.0972077872620665
+ longitude = 285.44232116398
+ altitude = 7.81325398734771
+ index = 0
+ seed = 344
+}
+WAYPOINT
+{
+ name = KSC Runway West
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.048551152501917
+ longitude = 285.273664964772
+ altitude = 4.55218112771401
+ index = 0
+ seed = 344
+}
+WAYPOINT
+{
+ name = KSC Runway East
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.0502284824994308
+ longitude = 285.509304422011
+ altitude = 9.3232208619593
+ index = 1
+ seed = 344
+}
+WAYPOINT
+{
+ name = Island Runway West
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -1.51815682425884
+ longitude = 288.032887160133
+ altitude = 23.2588613616535
+ index = 2
+ seed = 344
+}
+WAYPOINT
+{
+ name = Island Runway East
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -1.51557302720493
+ longitude = 288.148166478254
+ altitude = 37.3101546143885
+ index = 3
+ seed = 344
+}
+WAYPOINT
+{
+ name = VAB Helipad East
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.0967891863704034
+ longitude = 285.382581254365
+ altitude = 110.841032719705
+ index = 4
+ seed = 344
+}
+WAYPOINT
+{
+ name = VAB Helipad West
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.0967742918350356
+ longitude = 285.379923596384
+ altitude = 110.84978304978
+ index = 5
+ seed = 344
+}
+WAYPOINT
+{
+ name = Administration Helipad
+ celestialName = Kerbin
+ icon = balloon
+ latitude = -0.0925857413837188
+ longitude = 285.336888947055
+ altitude = 17.1359844910912
+ index = 6
+ seed = 344
+}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Laythe.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Laythe.cfg
new file mode 100644
index 0000000..38b83a2
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Laythe.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Laythe
+ latitude = -17.589099999999998
+ longitude = 172.58420000000001
+ navigationId = b658c0e4-a5b3-4264-99dd-7432eee05018
+ icon = pressure
+ altitude = -1.3642420526593924E-12
+ index = 47
+ seed = 344
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Laythe
+ latitude = 29.4543
+ longitude = 7.3498999999999999
+ navigationId = c76bb712-b752-4c4a-86fd-0cf2a4bbfed9
+ icon = pressure
+ altitude = -2799.8879000000002
+ index = 48
+ seed = 384
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Minmus.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Minmus.cfg
new file mode 100644
index 0000000..3e2fd9f
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Minmus.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Monolith
+ celestialName = Minmus
+ latitude = 23.776800000000001
+ longitude = 60.046199999999999
+ navigationId = fbf3d06b-3376-4af3-a102-d95f4534096c
+ icon = custom
+ altitude = -2.7284841053187847E-12
+ index = 29
+ seed = 248
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Minmus
+ latitude = -62.929699999999997
+ longitude = 74.728999999999999
+ navigationId = d3e788c7-3a91-4d51-b35b-501cdc1c7a74
+ icon = pressure
+ altitude = -2.7284841053187799E-12
+ index = 30
+ seed = 16
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Moho.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Moho.cfg
new file mode 100644
index 0000000..8a2f5b2
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Moho.cfg
@@ -0,0 +1,39 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Moho
+ latitude = -19.654499999999999
+ longitude = -166.23410000000001
+ navigationId = 362860d0-ebc4-4c49-b32b-e8ef4d2a3eef
+ icon = pressure
+ altitude = 1.7763568394002501E-14
+ index = 31
+ seed = 98
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Moho
+ latitude = 54.679000000000002
+ longitude = 153.49000000000001
+ navigationId = 3531bbc3-f488-457b-9ea4-406a919ffeb8
+ icon = pressure
+ altitude = -5.0022208597511053E-12
+ index = 32
+ seed = 241
+}
+WAYPOINT
+{
+ name = Northern Sinkhole
+ celestialName = Moho
+ latitude = 90
+ longitude = 0
+ navigationId = 0614db8a-7fab-48e6-874f-dc2c7d8e900d
+ icon = pressure
+ altitude = -4600.0887722168118
+ index = 162
+ seed = 1197
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Mun.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Mun.cfg
new file mode 100644
index 0000000..c5ed271
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Mun.cfg
@@ -0,0 +1,147 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Mun
+ latitude = -82.518299999999996
+ longitude = -152.3254
+ navigationId = 82927aae-3d08-4419-874b-544e45d547af
+ icon = pressure
+ altitude = 2.7284841053187847E-12
+ index = 16
+ seed = 23
+}
+WAYPOINT
+{
+ name = Northwest Crater Arch
+ celestialName = Mun
+ latitude = 12.443199999999999
+ longitude = 39.177999999999997
+ navigationId = dce9943e-f7cf-4774-ab16-d156b2b0da87
+ icon = seismic
+ altitude = 3.4106051316484809E-12
+ index = 17
+ seed = 330
+}
+WAYPOINT
+{
+ name = Armstrong Monument
+ celestialName = Mun
+ latitude = 0.70269999999999999
+ longitude = 22.747
+ navigationId = 85b49f1e-7576-4c77-bb90-85b3ac62c91c
+ icon = custom
+ altitude = 2.2737367544323206E-13
+ index = 18
+ seed = 1197
+}
+WAYPOINT
+{
+ name = Nearside Monolith
+ celestialName = Mun
+ latitude = -9.8314000000000004
+ longitude = 25.917000000000002
+ navigationId = 6f063b5f-02a9-4e98-9422-ff2f679cb8d8
+ icon = custom
+ altitude = -2.1600499167107046E-12
+ index = 19
+ seed = 426
+}
+WAYPOINT
+{
+ name = South Polar Monolith
+ celestialName = Mun
+ latitude = -82.206299999999999
+ longitude = 102.93049999999999
+ navigationId = 0a319114-cc2d-4e6d-9902-7f64b8e68830
+ icon = custom
+ altitude = 0
+ index = 21
+ seed = 248
+}
+WAYPOINT
+{
+ name = Crashed Saucer
+ celestialName = Mun
+ latitude = -70.955600000000004
+ longitude = -68.137799999999999
+ navigationId = abe0c9a8-650f-4679-b875-d1fd19f68caf
+ icon = custom
+ altitude = -4.5474735088646404E-12
+ index = 22
+ seed = 501
+}
+WAYPOINT
+{
+ name = East Crater Arch
+ celestialName = Mun
+ latitude = 2.4695
+ longitude = 81.513300000000001
+ navigationId = d99b0e30-60ba-4bfb-ab4f-5fc2c66c8926
+ icon = seismic
+ altitude = -4.5474735088646412E-13
+ index = 23
+ seed = 501
+}
+WAYPOINT
+{
+ name = Northern Monolith
+ celestialName = Mun
+ latitude = 57.660400000000003
+ longitude = 9.1422000000000008
+ navigationId = 507bb506-4456-49c1-9579-cd1790bc463b
+ icon = custom
+ altitude = 4.5474735088646404E-12
+ index = 24
+ seed = 269
+}
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Mun
+ latitude = 35.320999999999998
+ longitude = -76.629599999999996
+ navigationId = 14ae4a01-9d7a-494e-9d9b-e6dd8e721148
+ icon = pressure
+ altitude = -3.637978807091713E-12
+ index = 25
+ seed = 972
+}
+WAYPOINT
+{
+ name = East Farside Arch
+ celestialName = Mun
+ latitude = -12.443099999999999
+ longitude = -140.822
+ navigationId = aa547350-8932-4053-a8d6-900f5638869d
+ icon = seismic
+ altitude = 0
+ index = 26
+ seed = 119
+}
+WAYPOINT
+{
+ name = Kerbin Zenith
+ celestialName = Mun
+ latitude = 0
+ longitude = 47
+ navigationId = 61c70b61-5047-4fa8-b4ca-83877b886233
+ icon = dish
+ altitude = 4.0927261579781771E-12
+ index = 27
+ seed = 747
+}
+WAYPOINT
+{
+ name = Kerbin Nadir
+ celestialName = Mun
+ latitude = 0
+ longitude = -133
+ navigationId = aea94a99-3943-4693-875b-888350a2eb26
+ icon = dish
+ altitude = -2.7284841053187847E-12
+ index = 28
+ seed = 23
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Pol.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Pol.cfg
new file mode 100644
index 0000000..0a2e8ad
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Pol.cfg
@@ -0,0 +1,27 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Pol
+ latitude = -25.125699999999998
+ longitude = 173.77080000000001
+ navigationId = cf7e900b-4995-4ffe-b801-64dc9e8bbcfc
+ icon = pressure
+ altitude = -4.2632564145605999E-14
+ index = 58
+ seed = 337
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Pol
+ latitude = -62.830800000000004
+ longitude = 164.58619999999999
+ navigationId = e6fbae07-f2ba-4ab8-bd60-44b7b6398c39
+ icon = pressure
+ altitude = -4.5474735088646404E-12
+ index = 59
+ seed = 1197
+}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Tylo.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Tylo.cfg
new file mode 100644
index 0000000..33117f4
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Tylo.cfg
@@ -0,0 +1,15 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Cave
+ celestialName = Tylo
+ latitude = 40.267099999999999
+ longitude = 174.04669999999999
+ navigationId = 12910cef-d4a3-466e-b96f-90d190566dd2
+ icon = report
+ altitude = 2.5579538487363607E-12
+ index = 54
+ seed = 187
+}
diff --git a/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Vall.cfg b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Vall.cfg
new file mode 100644
index 0000000..5a747e5
--- /dev/null
+++ b/GameData/WaypointManager/PluginData/CustomWaypoints/CustomWaypoints.Vall.cfg
@@ -0,0 +1,39 @@
+// Waypoint Manager Custom Waypoints File
+//
+// This file contains an extract of Waypoint Manager custom waypoints
+WAYPOINT
+{
+ name = Lowest Elevation
+ celestialName = Vall
+ latitude = 11.634499999999999
+ longitude = 145.49189999999999
+ navigationId = cf72209a-2994-42af-a970-49182ecae345
+ icon = pressure
+ altitude = -394.33319999999998
+ index = 49
+ seed = 316
+}
+WAYPOINT
+{
+ name = Highest Elevation
+ celestialName = Vall
+ latitude = -57.491500000000002
+ longitude = -144.45920000000001
+ navigationId = 21dfc4a1-43ed-4612-92df-eb181282f1c1
+ icon = pressure
+ altitude = 4.6895820560166612E-12
+ index = 50
+ seed = 1375
+}
+WAYPOINT
+{
+ name = Vallhenge
+ celestialName = Vall
+ latitude = -60.328899999999997
+ longitude = 84.057900000000004
+ navigationId = e125af95-0f29-4a2d-8b30-3b774771a5e2
+ icon = custom
+ altitude = 9.0949470177292824E-13
+ index = 51
+ seed = 384
+}
\ No newline at end of file
diff --git a/GameData/WaypointManager/PluginData/empty.txt b/GameData/WaypointManager/PluginData/empty.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Bop.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Bop.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Bop.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Bop.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Dres.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Dres.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Dres.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Dres.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Duna.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Duna.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Duna.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Duna.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Eeloo.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Eeloo.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Eeloo.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Eeloo.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Eve.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Eve.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Eve.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Eve.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Gilly.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Gilly.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Gilly.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Gilly.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Ike.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Ike.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Ike.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Ike.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Jool.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Jool.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Jool.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Jool.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Kerbin.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Kerbin.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Kerbin.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Kerbin.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Laythe.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Laythe.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Laythe.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Laythe.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Minmus.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Minmus.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Minmus.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Minmus.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Moho.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Moho.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Moho.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Moho.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Mun.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Mun.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Mun.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Mun.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Pol.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Pol.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Pol.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Pol.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Tylo.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Tylo.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Tylo.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Tylo.png
diff --git a/GameData/WaypointManager/icons/CelestialBodies/Vall.png b/GameData/WaypointManager/PluginData/icons/CelestialBodies/Vall.png
similarity index 100%
rename from GameData/WaypointManager/icons/CelestialBodies/Vall.png
rename to GameData/WaypointManager/PluginData/icons/CelestialBodies/Vall.png
diff --git a/GameData/WaypointManager/icons/Special/nyan.png b/GameData/WaypointManager/PluginData/icons/Special/nyan.png
similarity index 100%
rename from GameData/WaypointManager/icons/Special/nyan.png
rename to GameData/WaypointManager/PluginData/icons/Special/nyan.png
diff --git a/GameData/WaypointManager/icons/addWaypoint.png b/GameData/WaypointManager/PluginData/icons/addWaypoint.png
similarity index 100%
rename from GameData/WaypointManager/icons/addWaypoint.png
rename to GameData/WaypointManager/PluginData/icons/addWaypoint.png
diff --git a/GameData/WaypointManager/icons/close.png b/GameData/WaypointManager/PluginData/icons/close.png
similarity index 100%
rename from GameData/WaypointManager/icons/close.png
rename to GameData/WaypointManager/PluginData/icons/close.png
diff --git a/GameData/WaypointManager/icons/deleteWaypoint.png b/GameData/WaypointManager/PluginData/icons/deleteWaypoint.png
similarity index 100%
rename from GameData/WaypointManager/icons/deleteWaypoint.png
rename to GameData/WaypointManager/PluginData/icons/deleteWaypoint.png
diff --git a/GameData/WaypointManager/icons/editWaypoint.png b/GameData/WaypointManager/PluginData/icons/editWaypoint.png
similarity index 100%
rename from GameData/WaypointManager/icons/editWaypoint.png
rename to GameData/WaypointManager/PluginData/icons/editWaypoint.png
diff --git a/GameData/WaypointManager/icons/settings.png b/GameData/WaypointManager/PluginData/icons/settings.png
similarity index 100%
rename from GameData/WaypointManager/icons/settings.png
rename to GameData/WaypointManager/PluginData/icons/settings.png
diff --git a/GameData/WaypointManager/icons/toolbar.png b/GameData/WaypointManager/PluginData/icons/toolbar.png
similarity index 100%
rename from GameData/WaypointManager/icons/toolbar.png
rename to GameData/WaypointManager/PluginData/icons/toolbar.png
diff --git a/GameData/WaypointManager/icons/toolbarSmall.png b/GameData/WaypointManager/PluginData/icons/toolbarSmall.png
similarity index 100%
rename from GameData/WaypointManager/icons/toolbarSmall.png
rename to GameData/WaypointManager/PluginData/icons/toolbarSmall.png
diff --git a/GameData/WaypointManager/Plugins/WaypointManager.dll b/GameData/WaypointManager/Plugins/WaypointManager.dll
new file mode 100644
index 0000000..fe93aa7
Binary files /dev/null and b/GameData/WaypointManager/Plugins/WaypointManager.dll differ
diff --git a/GameData/WaypointManager/WaypointManager.dll b/GameData/WaypointManager/WaypointManager.dll
deleted file mode 100644
index 8b7ed67..0000000
Binary files a/GameData/WaypointManager/WaypointManager.dll and /dev/null differ
diff --git a/GameData/WaypointManager/WaypointManager.version b/GameData/WaypointManager/WaypointManager.version
index 25fcdcd..dc54f3f 100644
--- a/GameData/WaypointManager/WaypointManager.version
+++ b/GameData/WaypointManager/WaypointManager.version
@@ -1,32 +1,31 @@
{
- "NAME":"Waypoint Manager",
- "URL":"https://raw.githubusercontent.com/jrossignol/WaypointManager/master/GameData/WaypointManager/WaypointManager.version",
- "DOWNLOAD":"https://github.com/jrossignol/WaypointManager/releases",
- "CHANGE_LOG_URL":"https://raw.githubusercontent.com/jrossignol/WaypointManager/2.8.1/CHANGES.txt",
- "GITHUB":{
- "USERNAME":"jrossignol",
- "REPOSITORY":"WaypointManager",
- "ALLOW_PRE_RELEASE":false
- },
- "VERSION":{
- "MAJOR":2,
- "MINOR":8,
- "PATCH":1,
- "BUILD":0
- },
- "KSP_VERSION":{
- "MAJOR":1,
- "MINOR":8,
- "PATCH":0
- },
- "KSP_VERSION_MIN":{
- "MAJOR":1,
- "MINOR":8,
- "PATCH":0
- },
- "KSP_VERSION_MAX":{
- "MAJOR":1,
- "MINOR":99,
- "PATCH":99
- }
- }
+ "NAME": "Waypoint Manager",
+ "URL": "https://raw.githubusercontent.com/linuxgurugamer/WaypointManager/refs/heads/master/WaypointManager.version",
+ "DOWNLOAD": "https://github.com/linuxgurugamer/WaypointManager/releases",
+ "GITHUB": {
+ "USERNAME": "jrossignol",
+ "REPOSITORY": "WaypointManager",
+ "ALLOW_PRE_RELEASE": false
+ },
+ "VERSION": {
+ "MAJOR": 2,
+ "MINOR": 8,
+ "PATCH": 4,
+ "BUILD": 7
+ },
+ "KSP_VERSION": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 4
+ },
+ "KSP_VERSION_MIN": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 0
+ },
+ "KSP_VERSION_MAX": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 99
+ }
+}
diff --git a/source/WaypointManager.sln b/WaypointManager.sln
similarity index 59%
rename from source/WaypointManager.sln
rename to WaypointManager.sln
index 95353a9..3afefc8 100644
--- a/source/WaypointManager.sln
+++ b/WaypointManager.sln
@@ -1,10 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio Version 17
+VisualStudioVersion = 17.11.35312.102
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaypointManager", "WaypointManager\WaypointManager.csproj", "{C2C97615-1B94-4A31-9A68-042F6457403E}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E9463310-6814-47F6-8FBE-881501C4309C}"
+ ProjectSection(SolutionItems) = preProject
+ BUGS.txt = BUGS.txt
+ buildRelease.bat = buildRelease.bat
+ Changelog.txt = Changelog.txt
+ CHANGES.txt = CHANGES.txt
+ deploy.bat = deploy.bat
+ jenkins.txt = jenkins.txt
+ LICENSE.txt = LICENSE.txt
+ WaypointManager.version = WaypointManager.version
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -19,4 +31,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3FC12887-93E0-4A1E-AEFE-F05FEAE376CA}
+ EndGlobalSection
EndGlobal
diff --git a/WaypointManager.version b/WaypointManager.version
new file mode 100644
index 0000000..dc54f3f
--- /dev/null
+++ b/WaypointManager.version
@@ -0,0 +1,31 @@
+{
+ "NAME": "Waypoint Manager",
+ "URL": "https://raw.githubusercontent.com/linuxgurugamer/WaypointManager/refs/heads/master/WaypointManager.version",
+ "DOWNLOAD": "https://github.com/linuxgurugamer/WaypointManager/releases",
+ "GITHUB": {
+ "USERNAME": "jrossignol",
+ "REPOSITORY": "WaypointManager",
+ "ALLOW_PRE_RELEASE": false
+ },
+ "VERSION": {
+ "MAJOR": 2,
+ "MINOR": 8,
+ "PATCH": 4,
+ "BUILD": 7
+ },
+ "KSP_VERSION": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 4
+ },
+ "KSP_VERSION_MIN": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 0
+ },
+ "KSP_VERSION_MAX": {
+ "MAJOR": 1,
+ "MINOR": 12,
+ "PATCH": 99
+ }
+}
diff --git a/WaypointManager/AssemblyVersion.cs b/WaypointManager/AssemblyVersion.cs
new file mode 100644
index 0000000..ab03550
--- /dev/null
+++ b/WaypointManager/AssemblyVersion.cs
@@ -0,0 +1,10 @@
+
+ // This code was generated by a tool. Any changes made manually will be lost
+ // the next time this code is regenerated.
+ //
+
+ using System.Reflection;
+
+ [assembly: AssemblyFileVersion("2.8.4.7")]
+ [assembly: AssemblyVersion("2.8.4.7")]
+ [assembly: KSPAssembly("WaypointManager", 2, 8, 4)]
diff --git a/WaypointManager/AssemblyVersion.tt b/WaypointManager/AssemblyVersion.tt
new file mode 100644
index 0000000..84dd1a5
--- /dev/null
+++ b/WaypointManager/AssemblyVersion.tt
@@ -0,0 +1,102 @@
+<#@ template debug="false" hostspecific="true" language="C#" #>
+<#@ import namespace="System.IO" #>
+<#@ output extension=".cs" #>
+
+<#@ assembly name="EnvDTE" #><# /* This assembly provides access to Visual Studio project properties. */ #>
+<#
+
+ // Instructions
+ // 1. Add a new Text Template to the project
+ // 2. Copy this file into the new template
+ // 3. Update the string: versionfile with the complete path to the .version file
+ // 4. Remove the following line from the file AssemblyInfo.cs (usually located in the "Property" folder inside your C# project):
+ // [assembly: AssemblyVersion("1.0.0.0")]
+ // 5. Add the following to the PreBuild steps:
+ //
+ // set textTemplatingPath="%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\IDE\texttransform.exe"
+ // %textTemplatingPath% "$(ProjectDir)AssemblyVersion.tt"
+
+
+ int major = 0;
+ int minor = 0;
+ int build = 0;
+ int patch = 0;
+ bool versionSection = false;
+
+ int i = 0;
+ int i2 = 0;
+ string s;
+
+ // For Visual Studio / MSBuild Build-Time Template Resolution
+ string RootDirectory = System.IO.Path.GetDirectoryName(Host.TemplateFile) + @"\..\";
+
+ //
+ // Update the following with the name of the .version file which is in the root directory
+ //
+ string versionfile = RootDirectory + "WaypointManager.version";
+
+
+ if (!File.Exists(versionfile))
+ {
+ Write("File: " + versionfile + " missing\n");
+ }
+
+ try
+ {
+ foreach (var line in File.ReadAllLines(versionfile))
+ {
+ if (line != null)
+ {
+ if (!versionSection)
+ {
+ if (line.Contains("\"VERSION\""))
+ versionSection = true;
+ }
+ else
+ {
+ if (line.Contains("}"))
+ versionSection = false;
+ i = line.IndexOf(":");
+ i2 = line.IndexOf(",");
+ if (i2 == -1)
+ i2 = line.Length;
+ if (i >= 0 && i2 >= 0)
+ {
+ s = line.Substring(i + 1, i2 - i - 1);
+
+ if (line.Contains("MAJOR"))
+ Int32.TryParse(s, out major);
+
+ if (line.Contains("MINOR"))
+ Int32.TryParse(s, out minor);
+
+ if (line.Contains("PATCH"))
+ Int32.TryParse(s, out patch);
+
+ if (line.Contains("BUILD"))
+ Int32.TryParse(s, out build);
+ }
+ }
+ }
+ }
+
+ }
+ catch
+ {
+ major = 1;
+ minor = 0;
+ patch = 0;
+ build = 0;
+ }
+ //Write("File done");
+
+ #>
+ // This code was generated by a tool. Any changes made manually will be lost
+ // the next time this code is regenerated.
+ //
+
+ using System.Reflection;
+
+ [assembly: AssemblyFileVersion("<#= major #>.<#= minor #>.<#= patch #>.<#= build #>")]
+ [assembly: AssemblyVersion("<#= major #>.<#= minor #>.<#= patch #>.<#= build #>")]
+ [assembly: KSPAssembly("WaypointManager", <#= major #>, <#= minor #>, <#= patch #>)]
diff --git a/source/WaypointManager/Config.cs b/WaypointManager/Config.cs
similarity index 76%
rename from source/WaypointManager/Config.cs
rename to WaypointManager/Config.cs
index 24fd56d..4eddd62 100644
--- a/source/WaypointManager/Config.cs
+++ b/WaypointManager/Config.cs
@@ -59,17 +59,24 @@ public enum WaypointDisplay
public static bool hudTime = true;
public static bool hudHeading = false;
public static bool hudAngle = false;
-
- public static bool useStockToolbar = true;
+ public static bool hudCoordinates = false;
public static float opacity = 1.0f;
+ public static float scaling = 1.0f;
+
+ public static float displayOpacity = 0.0f;
+ public static float backgroundGrey = 0.5f;
+
public static Texture2D toolbarIcon;
public static Texture2D addWaypointIcon;
public static Texture2D editWaypointIcon;
public static Texture2D deleteWaypointIcon;
public static Texture2D settingsIcon;
public static Texture2D closeIcon;
+ public static Rect displayBox = new Rect(0,0,0,0);
+ internal static float boxTop = -1;
+ internal static float boxLeft = -1;
///
/// Saves the configuration to the default configuration file.
@@ -88,8 +95,16 @@ public static void Save()
configNode.AddValue("hudHeading", hudHeading);
configNode.AddValue("hudAngle", hudAngle);
configNode.AddValue("displayDecimal", displayDecimal);
- configNode.AddValue("useStockToolbar", useStockToolbar);
configNode.AddValue("opacity", opacity);
+ configNode.AddValue("hudCoordinates", hudCoordinates);
+ configNode.AddValue("scaling", scaling);
+
+ configNode.AddValue("boxTop", boxTop);
+ configNode.AddValue("boxLeft", boxLeft);
+ configNode.AddValue("displayOpacity", displayOpacity);
+ configNode.AddValue("backgroundGrey", backgroundGrey);
+
+
configNode.Save(ConfigFileName,
"Waypoint Manager Configuration File\r\n" +
@@ -125,19 +140,30 @@ public static void Load()
hudDistance = Convert.ToBoolean(configNode.GetValue("hudDistance"));
hudTime = Convert.ToBoolean(configNode.GetValue("hudTime"));
hudHeading = Convert.ToBoolean(configNode.GetValue("hudHeading"));
+ hudCoordinates = Convert.ToBoolean(configNode.GetValue("hudCoordinates"));
hudAngle = configNode.HasValue("hudAngle") ? Convert.ToBoolean(configNode.GetValue("hudAngle")) : false;
opacity = configNode.HasValue("opacity") ? (float)Convert.ToDouble(configNode.GetValue("opacity")) : 1.0f;
displayDecimal = configNode.HasValue("displayDecimal") ? Convert.ToBoolean(configNode.GetValue("displayDecimal")) : false;
- if (configNode.HasValue("useStockToolbar"))
+
+ scaling = configNode.HasValue("scaling") ? (float)Convert.ToDouble(configNode.GetValue("scaling")) : 1.0f;
+
+ if (configNode.HasValue("boxTop"))
+ {
+ boxLeft = (float)Convert.ToDouble(configNode.GetValue("boxLeft"));
+ boxTop = (float)Convert.ToDouble(configNode.GetValue("boxTop"));
+ }
+
+ if (configNode.HasValue("displayOpacity"))
{
- useStockToolbar = Convert.ToBoolean(configNode.GetValue("useStockToolbar"));
+ displayOpacity = configNode.HasValue("displayOpacity") ? (float)Convert.ToDouble(configNode.GetValue("displayOpacity")) : 0.0f;
}
- // If toolbar isn't installed, always use stock toolbar
- if (!ToolbarManager.ToolbarAvailable)
+ if (configNode.HasValue("backgroundGrey"))
{
- useStockToolbar = true;
+ backgroundGrey = configNode.HasValue("backgroundGrey") ? (float)Convert.ToDouble(configNode.GetValue("backgroundGrey")) : 0.0f;
}
+ WaypointFlightRenderer.SetupStyles(true);
+
}
private static T GetEnumValue(this ConfigNode configNode, string name)
diff --git a/source/WaypointManager/CustomWaypointGUI.cs b/WaypointManager/CustomWaypointGUI.cs
similarity index 93%
rename from source/WaypointManager/CustomWaypointGUI.cs
rename to WaypointManager/CustomWaypointGUI.cs
index 2f148bb..ba53d05 100644
--- a/source/WaypointManager/CustomWaypointGUI.cs
+++ b/WaypointManager/CustomWaypointGUI.cs
@@ -1,10 +1,14 @@
using System;
+using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using FinePrint;
using FinePrint.Utilities;
+using ClickThroughFix;
+using ToolbarControl_NS;
+using static WaypointManager.RegisterToolbar;
namespace WaypointManager
{
@@ -17,15 +21,23 @@ public static class CustomWaypointGUI
public static List customIcons = new List();
- private const float ICON_PICKER_WIDTH = 302;
+ internal const float ICON_PICKER_WIDTH = 302;
private enum WindowMode
{
None,
Add,
Edit,
+ Edit_Stock,
Delete
}
-
+ private static string[] windowModeStr = {
+ "None",
+ "Add",
+ "Edit",
+ "Edit Stock",
+ "Delete"
+ };
+
// So, what is this random list of numbers? It's a side effect from the awesome
// design decision in KSP/FinePrint to make stuff based on a random seed. There
// is no way to externally provide a color for the waypoint, so instead we provide
@@ -85,7 +97,7 @@ public static MapObject MapObject
private static GUIContent[] colors = null;
private static bool showExportDialog = false;
-
+
private static bool mapLocationMode = false;
private static int selectedIcon = 0;
@@ -114,7 +126,7 @@ public static void AddWaypoint()
AddWaypoint(0.0, 0.0, 0.0);
}
}
-
+
///
/// Interface for showing the add waypoint dialog.
///
@@ -157,14 +169,17 @@ public static void AddWaypoint(double latitude, double longitude, double altitud
///
/// Interface for showing the edit waypoint dialog.
///
- public static void EditWaypoint(Waypoint waypoint)
+ public static void EditWaypoint(Waypoint waypoint, bool stock = false)
{
if (windowMode == WindowMode.None)
{
wpWindowPos = new Rect((Screen.width - wpWindowPos.width) / 2.0f, (Screen.height - wpWindowPos.height) / 2.0f - 100f, wpWindowPos.width, wpWindowPos.height);
}
- windowMode = WindowMode.Edit;
+ if (stock)
+ windowMode = WindowMode.Edit_Stock;
+ else
+ windowMode = WindowMode.Edit;
selectedWaypoint = waypoint;
template.name = waypoint.name;
@@ -220,9 +235,14 @@ public static void OnGUI()
foreach (ConfigNode configNode in iconConfig)
{
string dir = configNode.GetValue("url");
- foreach (GameDatabase.TextureInfo texInfo in GameDatabase.Instance.databaseTexture.Where(t => t.name.StartsWith(dir)))
+ if (Directory.Exists(KSPUtil.ApplicationRootPath+"GameData/" + dir))
{
- content.Add(new GUIContent(texInfo.texture, texInfo.name));
+ foreach (var str in Directory.GetFiles(KSPUtil.ApplicationRootPath+"GameData/" + dir))
+ {
+ var icon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref icon, str);
+ content.Add(new GUIContent(icon, str));
+ }
}
}
@@ -280,15 +300,16 @@ public static void OnGUI()
disabledText.normal.textColor = Color.gray;
}
- if (WaypointManager.Instance != null && WaypointManager.Instance.visible)
+
+ if (WaypointManager.Instance != null && WaypointManager.Instance.visible && !ImportExport.helpDialogVisible)
{
if (windowMode != WindowMode.None && windowMode != WindowMode.Delete)
{
- wpWindowPos = GUILayout.Window(
+ wpWindowPos = ClickThruBlocker.GUILayoutWindow(
typeof(WaypointManager).FullName.GetHashCode() + 2,
wpWindowPos,
WindowGUI,
- windowMode.ToString() + " Waypoint",
+ windowModeStr[(int)windowMode] + " Waypoint",
GUILayout.Height(1), GUILayout.ExpandHeight(true));
// Add the close icon
@@ -305,7 +326,7 @@ public static void OnGUI()
iconPickerPosition = new Rect((Screen.width - ICON_PICKER_WIDTH) / 2.0f, wpWindowPos.yMax, ICON_PICKER_WIDTH, 1);
}
- iconPickerPosition = GUILayout.Window(
+ iconPickerPosition = ClickThruBlocker.GUILayoutWindow(
typeof(WaypointManager).FullName.GetHashCode() + 3,
iconPickerPosition,
IconPickerGUI,
@@ -326,7 +347,7 @@ public static void OnGUI()
}
else if (windowMode == WindowMode.Delete)
{
- rmWindowPos = GUILayout.Window(
+ rmWindowPos = ClickThruBlocker.GUILayoutWindow(
typeof(WaypointManager).FullName.GetHashCode() + 2,
rmWindowPos,
DeleteGUI,
@@ -341,7 +362,7 @@ public static void OnGUI()
if (showExportDialog)
{
- expWindowPos = GUILayout.Window(
+ expWindowPos = ClickThruBlocker.GUILayoutWindow(
typeof(WaypointManager).FullName.GetHashCode() + 3,
expWindowPos,
ExportGUI,
@@ -370,7 +391,7 @@ public static void OnGUI()
private static void DeleteGUI(int windowID)
{
GUILayout.BeginVertical();
- GUILayout.Label("Delete custom waypoint '" + selectedWaypoint.name + "'?");
+ GUILayout.Label("Delete waypoint '" + selectedWaypoint.name + "'?");
GUILayout.BeginHorizontal();
if (GUILayout.Button("Yes"))
{
@@ -442,7 +463,8 @@ private static void WindowGUI(int windowID)
GUILayout.Space(4);
GUILayout.BeginVertical();
- if (GUILayout.Button(Util.GetContractIcon(template.id, template.seed)))
+
+ if (GUILayout.Button(Util.GetContractIcon(template.id, template.seed), GUILayout.Width(40), GUILayout.Height(40)))
{
showIconPicker = !showIconPicker;
@@ -599,6 +621,7 @@ private static void IconPickerGUI(int windowID)
///
public static void DrawMarker()
{
+ //Log.Info("DrawMarker, template.id: " + template.id);
// Only handle on repaint events
if (windowMode == WindowMode.Add && Event.current.type == EventType.Repaint)
{
diff --git a/source/WaypointManager/CustomWaypoints.cs b/WaypointManager/CustomWaypoints.cs
similarity index 83%
rename from source/WaypointManager/CustomWaypoints.cs
rename to WaypointManager/CustomWaypoints.cs
index aff073c..b3618a1 100644
--- a/source/WaypointManager/CustomWaypoints.cs
+++ b/WaypointManager/CustomWaypoints.cs
@@ -15,11 +15,19 @@ namespace WaypointManager
[KSPAddon(KSPAddon.Startup.MainMenu, true)]
public class CustomWaypoints : MonoBehaviour
{
+ public static string CustomWaypointsDirectory
+ {
+ get
+ {
+ return string.Join(Path.DirectorySeparatorChar.ToString(), new string[] { KSPUtil.ApplicationRootPath, "GameData", "WaypointManager", "PluginData" });
+
+ }
+ }
public static string CustomWaypointsFileName
{
get
{
- return string.Join(Path.DirectorySeparatorChar.ToString(), new string[] { KSPUtil.ApplicationRootPath, "GameData", "WaypointManager", "PluginData", "CustomWaypoints.cfg" });
+ return string.Join(CustomWaypointsDirectory, "CustomWaypoints.cfg");
}
}
@@ -124,18 +132,42 @@ private string HexValue(Color color)
return "#" + c.r.ToString("X2") + c.g.ToString("X2") + c.b.ToString("X2");
}
+ const string WAYPOINT_URL = "WAYPOINT";
+
public static void Import()
{
- ConfigNode configNode = ConfigNode.Load(CustomWaypointsFileName);
- if (configNode == null)
+ ConfigNode master = new ConfigNode("CUSTOM_WAYPOINTS");
+ int fileCount = 0, preload = 0;
+
+ ConfigNode configNode = null; ;
+ configNode = ConfigNode.Load(CustomWaypointsFileName);
+ fileCount = configNode.CountNodes;
+
+ if (configNode != null)
+ {
+ AddWaypointsFromConfig(master, configNode);
+ }
+
+ if (master.CountNodes == 0)
{
ScreenMessages.PostScreenMessage(string.Format("Couldn't load custom waypoint file {0}!", CustomWaypointsFileName),
6.0f, ScreenMessageStyle.UPPER_CENTER);
return;
}
- ConfigNode master = new ConfigNode("CUSTOM_WAYPOINTS");
+ ScenarioCustomWaypoints.Instance.OnLoad(master);
+ int count = master.nodes.Count;
+ if (fileCount > 0)
+ ScreenMessages.PostScreenMessage("Imported " + fileCount + " waypoint" + (fileCount != 1 ? "s" : "") + " from " + CustomWaypointsFileName,
+ 6.0f, ScreenMessageStyle.UPPER_CENTER);
+ if (preload > 0)
+ ScreenMessages.PostScreenMessage("Imported " + preload + " preload" + (preload != 1 ? "s" : "") + " from pre-loaded configs",
+ 6.0f, ScreenMessageStyle.UPPER_CENTER);
+ }
+
+ internal static void AddWaypointsFromConfig(ConfigNode master, ConfigNode configNode)
+ {
// Add the non-dupes into a new list
foreach (ConfigNode child in configNode.GetNodes("WAYPOINT"))
{
@@ -165,14 +197,7 @@ public static void Import()
master.AddNode(child);
}
}
-
- ScenarioCustomWaypoints.Instance.OnLoad(master);
-
- int count = master.nodes.Count;
- ScreenMessages.PostScreenMessage("Imported " + count + " waypoint" + (count != 1 ? "s" : "") + " from " + CustomWaypointsFileName,
- 6.0f, ScreenMessageStyle.UPPER_CENTER);
}
-
public static void Export()
{
if (File.Exists(CustomWaypointsFileName))
diff --git a/source/WaypointManager/GameEvents.cs b/WaypointManager/GameEvents.cs
similarity index 95%
rename from source/WaypointManager/GameEvents.cs
rename to WaypointManager/GameEvents.cs
index 9fb4be0..2968a1a 100644
--- a/source/WaypointManager/GameEvents.cs
+++ b/WaypointManager/GameEvents.cs
@@ -22,6 +22,7 @@ void WaypointIconAdded(string name)
void Awake()
{
onWaypointIconAdded.Add(new EventData.OnEvent(WaypointIconAdded));
+ DontDestroyOnLoad(this);
}
}
}
diff --git a/WaypointManager/ImportExport.cs b/WaypointManager/ImportExport.cs
new file mode 100644
index 0000000..bf7a10b
--- /dev/null
+++ b/WaypointManager/ImportExport.cs
@@ -0,0 +1,152 @@
+using ClickThroughFix;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Policy;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using static WaypointManager.RegisterToolbar;
+
+namespace WaypointManager
+{
+
+ public class ImportExport : MonoBehaviour
+ {
+ List waypointFiles = new List();
+ string path = "";
+ bool visible = true;
+ Rect windowPos = new Rect(500, 500, WaypointManager.SETTINGS_WIDTH, 200);
+
+ static internal bool helpDialogVisible = false;
+ bool exitCustomImport = false;
+
+
+ void Awake()
+ {
+ path = string.Join(Path.DirectorySeparatorChar.ToString(), CustomWaypoints.CustomWaypointsDirectory, "CustomWaypoints");
+ }
+
+ void Start()
+ {
+ foreach (var str in Directory.GetFiles(path))
+ {
+ waypointFiles.Add(Path.GetFileName(str));
+ }
+ windowPos = new Rect(
+ WaypointManager.Instance.settingsPosition.xMax + WaypointManager.SETTINGS_WIDTH + 4 > Screen.width ? WaypointManager.Instance.settingsPosition.xMin - WaypointManager.SETTINGS_WIDTH - 4 : WaypointManager.Instance.settingsPosition.xMax,
+ WaypointManager.Instance.settingsPosition.yMin, WaypointManager.SETTINGS_WIDTH, 200);
+
+ }
+
+ // OnGUI has all the GUI stuff
+ void OnGUI()
+ {
+ if (visible && !ImportExport.helpDialogVisible)
+ {
+
+ windowPos = ClickThruBlocker.GUILayoutWindow(typeof(WaypointManager).FullName.GetHashCode() + 20,
+ windowPos, WindowGUI, "Custom Waypoint Selection");
+
+ // Add the close icon
+ if (GUI.Button(new Rect(windowPos.xMax - 18, windowPos.yMin + 2, 16, 16), Config.closeIcon, GUI.skin.label))
+ {
+ Destroy(this);
+ }
+
+ }
+ }
+
+
+ int selected = -1;
+ Vector2 scrollListPos = new Vector2();
+ void WindowGUI(int id)
+ {
+ GUILayout.BeginHorizontal();
+ scrollListPos = GUILayout.BeginScrollView(scrollListPos);
+ int cnt = -1;
+ foreach (var wayPointFile in waypointFiles)
+ {
+ cnt++;
+ GUILayout.BeginHorizontal();
+ string str = wayPointFile.Replace("CustomWaypoints.", "");
+ str = str.Replace(".cfg", "");
+ if (selected == cnt)
+ str = "--> " + str + " <--";
+ if (GUILayout.Button(str))
+ {
+ selected = cnt;
+ }
+ GUILayout.EndHorizontal();
+ }
+ GUILayout.EndScrollView();
+ GUILayout.EndHorizontal();
+ GUILayout.FlexibleSpace();
+ GUILayout.BeginHorizontal();
+ GUI.enabled = (selected >= 0);
+ if (GUILayout.Button("Import"))
+ {
+ ImportSelectedFile(selected);
+ }
+ GUI.enabled = true;
+ if (GUILayout.Button("OK") || exitCustomImport)
+ {
+ visible = false;
+ Destroy(this);
+ }
+ GUILayout.EndHorizontal();
+ GUILayout.BeginHorizontal();
+ if (!ImportExport.helpDialogVisible && GUILayout.Button("Custom WP Help"))
+ {
+ helpDialogVisible = true;
+ DialogGUIBase[] options = new DialogGUIBase[2];
+
+ options[0] = new DialogGUIButton("Ok", () =>
+ {
+ helpDialogVisible = false;
+ });
+ options[1] = new DialogGUIButton("Close", () =>
+ {
+ exitCustomImport = true;
+ helpDialogVisible = false;
+ });
+
+ var multidialog = new MultiOptionDialog("waypointManager",
+ "If you have custom waypoints in a file, you can add it to the directory for loading.\n\n" +
+ "Put your custom file in the following directory:\n\nGameData/WaypointManager/PluginData/CustomWayPoints\n\n", "Custom File Help",
+ UI.StyleCache.Skin,
+ /*HighLogic.UISkin,*/ 450, options);
+
+ var _activePopup = PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), multidialog, false, HighLogic.UISkin, true);
+ }
+ GUILayout.EndHorizontal();
+ GUI.DragWindow();
+ }
+
+ void ImportSelectedFile(int cnt)
+ {
+ var wayPointFile = waypointFiles[cnt];
+ var fullpath = string.Join(Path.DirectorySeparatorChar.ToString(), path, wayPointFile);
+ ConfigNode master = new ConfigNode();
+ var configNode = ConfigNode.Load(fullpath);
+ CustomWaypoints.AddWaypointsFromConfig(master, configNode);
+ ScenarioCustomWaypoints.Instance.OnLoad(master);
+
+ int count = master.nodes.Count;
+ if (count > 0)
+ {
+ Log.Info("[WM] Imported " + count + " waypoint" + (count != 1 ? "s" : "") + " from " + wayPointFile);
+ ScreenMessages.PostScreenMessage("Imported " + count + " waypoint" + (count != 1 ? "s" : "") + " from " + wayPointFile,
+ 6.0f, ScreenMessageStyle.UPPER_CENTER);
+ }
+ else
+ {
+ Log.Info("[WM] No new waypoints found to import");
+ ScreenMessages.PostScreenMessage("No new waypoints found to import", 6f);
+ }
+
+ }
+
+ }
+}
diff --git a/WaypointManager/InstallChecker.cs b/WaypointManager/InstallChecker.cs
new file mode 100644
index 0000000..92f53c5
--- /dev/null
+++ b/WaypointManager/InstallChecker.cs
@@ -0,0 +1,99 @@
+/**
+ * Based on the InstallChecker from the Kethane mod for Kerbal Space Program.
+ * https://github.com/Majiir/Kethane/blob/b93b1171ec42b4be6c44b257ad31c7efd7ea1702/Plugin/InstallChecker.cs
+ *
+ * Original is (C) Copyright Majiir.
+ * CC0 Public Domain (http://creativecommons.org/publicdomain/zero/1.0/)
+ * http://forum.kerbalspaceprogram.com/threads/65395-CompatibilityChecker-Discussion-Thread?p=899895&viewfull=1#post899895
+ *
+ * This file has been modified extensively and is released under the same license.
+ */
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using UnityEngine;
+
+namespace WaypointManager
+{
+ [KSPAddon(KSPAddon.Startup.Instantly, true)]
+ internal class Startup : MonoBehaviour
+ {
+ private void Start()
+ {
+ string v = "n/a";
+ AssemblyTitleAttribute attributes = (AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false);
+ string title = attributes?.Title;
+ if (title == null)
+ {
+ title = "TitleNotAvailable";
+ }
+ v = Assembly.GetExecutingAssembly().FullName;
+ if (v == null)
+ {
+ v = "VersionNotAvailable";
+ }
+ Debug.Log("[" + title + "] Version " + v);
+ }
+ }
+
+ [KSPAddon(KSPAddon.Startup.MainMenu, true)]
+ internal class InstallChecker : MonoBehaviour
+ {
+ private const string MODNAME = "WaypointManager";
+ private const string FOLDERNAME = "WaypointManager";
+ private const string EXPECTEDPATH = FOLDERNAME + "/Plugins";
+
+ protected void Start()
+ {
+ // Search for this mod's DLL existing in the wrong location. This will also detect duplicate copies because only one can be in the right place.
+ var assemblies = AssemblyLoader.loadedAssemblies.Where(a => a.assembly.GetName().Name == Assembly.GetExecutingAssembly().GetName().Name).Where(a => a.url != EXPECTEDPATH);
+ if (assemblies.Any())
+ {
+ var badPaths = assemblies.Select(a => a.path).Select(p => Uri.UnescapeDataString(new Uri(Path.GetFullPath(KSPUtil.ApplicationRootPath)).MakeRelativeUri(new Uri(p)).ToString().Replace('/', Path.DirectorySeparatorChar)));
+ PopupDialog.SpawnPopupDialog
+ (
+ new Vector2(0.5f, 0.5f),
+ new Vector2(0.5f, 0.5f),
+ "test",
+ "Incorrect " + MODNAME + " Installation",
+ MODNAME + " has been installed incorrectly and will not function properly. All files should be located in KSP/GameData/" + FOLDERNAME + ". Do not move any files from inside that folder.\n\nIncorrect path(s):\n" + String.Join("\n", badPaths.ToArray()),
+ "OK",
+ false,
+ HighLogic.UISkin
+ );
+ Debug.Log("Incorrect " + MODNAME + " Installation: " + MODNAME + " has been installed incorrectly and will not function properly. All files should be located in KSP/GameData/" + EXPECTEDPATH + ". Do not move any files from inside that folder.\n\nIncorrect path(s):\n" + String.Join("\n", badPaths.ToArray())
+
+ );
+
+ }
+
+ //// Check for Module Manager
+ //if (!AssemblyLoader.loadedAssemblies.Any(a => a.assembly.GetName().Name.StartsWith("ModuleManager") && a.url == ""))
+ //{
+ // PopupDialog.SpawnPopupDialog("Missing Module Manager",
+ // modName + " requires the Module Manager mod in order to function properly.\n\nPlease download from http://forum.kerbalspaceprogram.com/threads/55219 and copy to the KSP/GameData/ directory.",
+ // "OK", false, HighLogic.Skin);
+ //}
+
+ CleanupOldVersions();
+ }
+
+ /*
+ * Tries to fix the install if it was installed over the top of a previous version
+ */
+ void CleanupOldVersions()
+ {
+ try
+ {
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError("-ERROR- " + this.GetType().FullName + "[" + this.GetInstanceID().ToString("X") + "][" + Time.time.ToString("0.00") + "]: " +
+ "Exception caught while cleaning up old files.\n" + ex.Message + "\n" + ex.StackTrace );
+
+ }
+ }
+ }
+}
+
diff --git a/source/WaypointManager/Properties/AssemblyInfo.cs b/WaypointManager/Properties/AssemblyInfo.cs
similarity index 91%
rename from source/WaypointManager/Properties/AssemblyInfo.cs
rename to WaypointManager/Properties/AssemblyInfo.cs
index d36d4a1..a5f5f45 100644
--- a/source/WaypointManager/Properties/AssemblyInfo.cs
+++ b/WaypointManager/Properties/AssemblyInfo.cs
@@ -32,7 +32,8 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0")]
-[assembly: AssemblyFileVersion("2.8.1")]
+//[assembly: AssemblyVersion("1.0")]
+//[assembly: AssemblyFileVersion("2.8.1")]
+
[assembly: AssemblyInformationalVersion("2.8.1")]
-[assembly: KSPAssembly("WaypointManager", 1, 0)]
+//[assembly: KSPAssembly("WaypointManager", 1, 0)]
diff --git a/WaypointManager/RegisterToolbar.cs b/WaypointManager/RegisterToolbar.cs
new file mode 100644
index 0000000..f87750f
--- /dev/null
+++ b/WaypointManager/RegisterToolbar.cs
@@ -0,0 +1,37 @@
+using UnityEngine;
+using ToolbarControl_NS;
+using KSP_Log;
+
+namespace WaypointManager
+{
+ [KSPAddon(KSPAddon.Startup.MainMenu, true)]
+ public class RegisterToolbar : MonoBehaviour
+ {
+ public static Log Log;
+
+ void Start()
+ {
+ ToolbarControl.RegisterMod(WaypointManager.MODID, WaypointManager.MODNAME);
+#if DEBUG
+ Log = new Log("WaypointManager", Log.LEVEL.INFO);
+#else
+ Log = new Log("WaypointManager", Log.LEVEL.ERROR);
+#endif
+ }
+
+ bool initted = false;
+ int cnt = 0;
+ void OnGUI()
+ {
+ if (!initted)
+ {
+ if (cnt++ == 3)
+ {
+ WaypointFlightRenderer.SetupStyles();
+ initted = true;
+ }
+
+ }
+ }
+ }
+}
diff --git a/WaypointManager/Stolld/StyleCache.cs b/WaypointManager/Stolld/StyleCache.cs
new file mode 100644
index 0000000..c1cfbc1
--- /dev/null
+++ b/WaypointManager/Stolld/StyleCache.cs
@@ -0,0 +1,23 @@
+
+using UnityEngine;
+
+namespace UI
+{
+ ///
+ /// The unity default style can only be accessed inside of an OnGUI method
+ ///
+ [KSPAddon(KSPAddon.Startup.Instantly, true)]
+ public class StyleCache : MonoBehaviour
+ {
+ public static UISkinDef Skin { get; set; }
+
+ void OnGUI()
+ {
+ if (Skin == null)
+ {
+ Skin = StyleConverter.Convert(GUI.skin);
+ Destroy(this);
+ }
+ }
+ }
+}
diff --git a/WaypointManager/Stolld/StyleConverter.cs b/WaypointManager/Stolld/StyleConverter.cs
new file mode 100644
index 0000000..8213513
--- /dev/null
+++ b/WaypointManager/Stolld/StyleConverter.cs
@@ -0,0 +1,88 @@
+using UnityEngine;
+
+namespace UI
+{
+ public static class StyleConverter
+ {
+ public static UISkinDef Convert(GUISkin skin)
+ {
+ UISkinDef def = new UISkinDef();
+ if (skin != null)
+ {
+ def.box = ConvertStyle(skin.box);
+ def.button = ConvertStyle(skin.button);
+ def.font = skin.font;
+ def.horizontalScrollbar = ConvertStyle(skin.horizontalScrollbar);
+ def.horizontalScrollbarLeftButton = ConvertStyle(skin.horizontalScrollbarLeftButton);
+ def.horizontalScrollbarRightButton = ConvertStyle(skin.horizontalScrollbarRightButton);
+ def.horizontalScrollbarThumb = ConvertStyle(skin.horizontalScrollbarThumb);
+ def.horizontalSlider = ConvertStyle(skin.horizontalSlider);
+ def.horizontalSliderThumb = ConvertStyle(skin.horizontalSliderThumb);
+ def.label = ConvertStyle(skin.label);
+ def.name = skin.name;
+ def.scrollView = ConvertStyle(skin.scrollView);
+ def.textArea = ConvertStyle(skin.textArea);
+ def.textField = ConvertStyle(skin.textField);
+ def.toggle = ConvertStyle(skin.toggle);
+ def.verticalScrollbar = ConvertStyle(skin.verticalScrollbar);
+ def.verticalScrollbarDownButton = ConvertStyle(skin.verticalScrollbarDownButton);
+ def.verticalScrollbarThumb = ConvertStyle(skin.verticalScrollbarThumb);
+ def.verticalScrollbarUpButton = ConvertStyle(skin.verticalScrollbarUpButton);
+ def.verticalSlider = ConvertStyle(skin.verticalSlider);
+ def.verticalSliderThumb = ConvertStyle(skin.verticalSliderThumb);
+ def.window = ConvertStyle(skin.window);
+ }
+
+ return def;
+ }
+
+ private static UIStyle ConvertStyle(GUIStyle guiStyle)
+ {
+ UIStyle style = new UIStyle();
+ if (guiStyle != null)
+ {
+ style.active = ConvertStyleState(guiStyle.active);
+ style.alignment = guiStyle.alignment;
+ style.disabled = ConvertStyleState(guiStyle.active);
+ style.clipping = guiStyle.clipping;
+ style.fixedHeight = guiStyle.fixedHeight;
+ style.fixedWidth = guiStyle.fixedWidth;
+ style.font = guiStyle.font;
+ style.fontSize = guiStyle.fontSize;
+ style.fontStyle = guiStyle.fontStyle;
+ style.highlight = ConvertStyleState(guiStyle.focused);
+ style.lineHeight = guiStyle.lineHeight;
+ style.name = guiStyle.name;
+ style.normal = ConvertStyleState(guiStyle.normal);
+ style.richText = guiStyle.richText;
+ style.stretchHeight = guiStyle.stretchHeight;
+ style.stretchWidth = guiStyle.stretchWidth;
+ style.wordWrap = guiStyle.wordWrap;
+ }
+
+ return style;
+ }
+
+ private static UIStyleState ConvertStyleState(GUIStyleState guiStyleState)
+ {
+ UIStyleState state = new UIStyleState();
+ if (guiStyleState != null)
+ {
+ if (guiStyleState.background != null)
+ {
+ state.background = Sprite.Create(guiStyleState.background,
+ new Rect(0, 0, guiStyleState.background.width, guiStyleState.background.height),
+ new Vector2(0.5f, 0.5f), 100, 1, SpriteMeshType.Tight, Vector4.one * 5);
+
+ // That border value was just a wild guess, but it works out quite nice so far.
+ // I could calculate the border automatically, but that looks messed up with DialogGUI,
+ // especially for window titles.
+ }
+
+ state.textColor = guiStyleState.textColor;
+ }
+
+ return state;
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/WaypointManager/Util.cs b/WaypointManager/Util.cs
similarity index 67%
rename from source/WaypointManager/Util.cs
rename to WaypointManager/Util.cs
index d9f3200..17f8d96 100644
--- a/source/WaypointManager/Util.cs
+++ b/WaypointManager/Util.cs
@@ -7,6 +7,8 @@
using FinePrint;
using FinePrint.Utilities;
using DDSHeaders;
+using ToolbarControl_NS;
+using static WaypointManager.RegisterToolbar;
namespace WaypointManager
{
@@ -38,7 +40,7 @@ public static double GetLateralDistance(WaypointData wpd)
return 2 * (celestialBody.Radius + wpd.waypoint.height + wpd.waypoint.altitude) *
Math.Asin(Math.Sqrt(sin1 * sin1 + cos1 * cos2 * sin2 * sin2));
}
-
+
///
/// Gets the distance in meters from the active vessel to the given waypoint.
///
@@ -136,7 +138,7 @@ public static string FormatCoordinate(double coord, bool islatitude)
/// The CelestialBody object
public static CelestialBody GetBody(string name)
{
- CelestialBody body = FlightGlobals.Bodies.Where(b => b.name == name).FirstOrDefault();
+ CelestialBody body = FlightGlobals.Bodies.Where(b => b.bodyName == name).FirstOrDefault();
if (body == null)
{
Debug.LogWarning("Couldn't find celestial body with name '" + name + "'.");
@@ -166,70 +168,118 @@ public static bool IsNavPoint(Waypoint waypoint)
/// URL of the icon
/// Seed to use for generating the color
/// The texture
+ ///
public static Texture2D GetContractIcon(string url, int seed)
{
+ string key = url;
+
// Check cache for texture
Texture2D texture;
Color color = SystemUtilities.RandomColor(seed, 1.0f, 1.0f, 1.0f);
- if (!contractIcons.ContainsKey(url))
+ if (!contractIcons.ContainsKey(key))
{
- contractIcons[url] = new Dictionary();
+ contractIcons[key] = new Dictionary();
}
- if (!contractIcons[url].ContainsKey(color))
+
+ if (!contractIcons[key].ContainsKey(color))
{
+
+ if (url.EndsWith(".png"))
+ url = url.Substring(0, url.Length - 4);
+ if (url.StartsWith("GameData"))
+ url = url.Substring(9);
+
Texture2D baseTexture = ContractDefs.sprites[url].texture;
+ url = url.Replace('\\', '/');
+ string url2 = url;
+
+ string tmp = url;
+ if (!tmp.Contains("PluginData"))
+ {
+ if (!url.StartsWith("GameData"))
+ tmp = "/" + url;
+
+ for (int i = 0; i < GameDatabase.Instance.databaseTexture.Count; i++)
+ {
+ if (GameDatabase.Instance.databaseTexture[i].file != null)
+ {
+ if (GameDatabase.Instance.databaseTexture[i].name.EndsWith(tmp) ||
+ GameDatabase.Instance.databaseTexture[i].name == url)
+ {
+ url2 = GameDatabase.Instance.databaseTexture[i].file.fullPath;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (!url2.StartsWith("GameData"))
+ url2 = KSPUtil.ApplicationRootPath + "GameData/" + url2;
+ }
+
+ string path = url2;
+
+ if (path.EndsWith(".png") || path.EndsWith(".dds"))
+ path = path.Substring(0, path.Length - 4);
+
try
{
Texture2D loadedTexture = null;
- string path = (url.Contains('/') ? "GameData/" : "GameData/Squad/Contracts/Icons/") + url;
+
// PNG loading
if (File.Exists(path + ".png"))
{
path += ".png";
loadedTexture = new Texture2D(baseTexture.width, baseTexture.height, TextureFormat.RGBA32, false);
- loadedTexture.LoadImage(File.ReadAllBytes(path.Replace('/', Path.DirectorySeparatorChar)));
+ loadedTexture.LoadImage(File.ReadAllBytes(path.Replace('/', Path.DirectorySeparatorChar)));
}
// DDS loading
- else if (File.Exists(path + ".dds"))
+ else
{
- path += ".dds";
- BinaryReader br = new BinaryReader(new MemoryStream(File.ReadAllBytes(path)));
-
- if (br.ReadUInt32() != DDSValues.uintMagic)
- {
- throw new Exception("Format issue with DDS texture '" + path + "'!");
- }
- DDSHeader ddsHeader = new DDSHeader(br);
- if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDX10)
- {
- DDSHeaderDX10 ddsHeaderDx10 = new DDSHeaderDX10(br);
- }
-
- TextureFormat texFormat;
- if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT1)
+ if (File.Exists(path + ".dds"))
{
- texFormat = UnityEngine.TextureFormat.DXT1;
- }
- else if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT3)
- {
- texFormat = UnityEngine.TextureFormat.DXT1 | UnityEngine.TextureFormat.Alpha8;
- }
- else if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT5)
- {
- texFormat = UnityEngine.TextureFormat.DXT5;
+ path += ".dds";
+ BinaryReader br = new BinaryReader(new MemoryStream(File.ReadAllBytes(path)));
+
+ if (br.ReadUInt32() != DDSValues.uintMagic)
+ {
+ throw new Exception("Format issue with DDS texture '" + path + "'!");
+ }
+ DDSHeader ddsHeader = new DDSHeader(br);
+ if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDX10)
+ {
+ DDSHeaderDX10 ddsHeaderDx10 = new DDSHeaderDX10(br);
+ }
+
+ TextureFormat texFormat;
+ if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT1)
+ {
+ texFormat = UnityEngine.TextureFormat.DXT1;
+ }
+#if false
+// Not using DXT3 anymore
+ else if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT3)
+ {
+ texFormat = UnityEngine.TextureFormat.DXT1 | UnityEngine.TextureFormat.Alpha8;
+ }
+#endif
+ else if (ddsHeader.ddspf.dwFourCC == DDSValues.uintDXT5)
+ {
+ texFormat = UnityEngine.TextureFormat.DXT5;
+ }
+ else
+ {
+ throw new Exception("Unhandled DDS format!");
+ }
+
+ loadedTexture = new Texture2D((int)ddsHeader.dwWidth, (int)ddsHeader.dwHeight, texFormat, false);
+ loadedTexture.LoadRawTextureData(br.ReadBytes((int)(br.BaseStream.Length - br.BaseStream.Position)));
}
else
{
- throw new Exception("Unhandled DDS format!");
+ throw new Exception("Couldn't find file for icon '" + url + "'");
}
-
- loadedTexture = new Texture2D((int)ddsHeader.dwWidth, (int)ddsHeader.dwHeight, texFormat, false);
- loadedTexture.LoadRawTextureData(br.ReadBytes((int)(br.BaseStream.Length - br.BaseStream.Position)));
- }
- else
- {
- throw new Exception("Couldn't find file for icon '" + url + "'");
}
Color[] pixels = loadedTexture.GetPixels();
@@ -237,22 +287,26 @@ public static Texture2D GetContractIcon(string url, int seed)
{
pixels[i] *= color;
}
- texture = new Texture2D(baseTexture.width, baseTexture.height, TextureFormat.RGBA32, false);
+ //texture = new Texture2D(baseTexture.width, baseTexture.height, TextureFormat.RGBA32, false);
+ texture = new Texture2D(loadedTexture.width, loadedTexture.height, TextureFormat.RGBA32, false);
texture.SetPixels(pixels);
texture.Apply(false, false);
- contractIcons[url][color] = texture;
+ contractIcons[key][color] = texture;
+
UnityEngine.Object.Destroy(loadedTexture);
}
catch (Exception e)
{
- Debug.LogError("WaypointManager: Couldn't create texture for '" + url + "'!");
+ Log.Error("WaypointManager: Couldn't create texture for '" + url + "'!");
+ Log.Error("key: " + key);
+ Log.Error("path: " + path);
Debug.LogException(e);
- texture = contractIcons[url][color] = baseTexture;
+ texture = contractIcons[key][color] = baseTexture;
}
}
else
{
- texture = contractIcons[url][color];
+ texture = contractIcons[key][color];
}
return texture;
@@ -323,8 +377,26 @@ public static void DrawWaypoint(CelestialBody targetBody, double latitude, doubl
Graphics.DrawTexture(markerRect, GameDatabase.Instance.GetTexture("Squad/Contracts/Icons/marker", false), new Rect(0.0f, 0.0f, 1f, 1f), 0, 0, 0, 0, new Color(0.5f, 0.5f, 0.5f, 0.5f * (alpha - 0.3f) / 0.7f));
// Draw the icon
- Graphics.DrawTexture(iconRect, ContractDefs.sprites[id].texture, new Rect(0.0f, 0.0f, 1f, 1f), 0, 0, 0, 0, SystemUtilities.RandomColor(seed, alpha));
+ Graphics.DrawTexture(iconRect, /* ContractDefs.sprites[id].texture */
+ GetContractIcon(id, seed), new Rect(0.0f, 0.0f, 1f, 1f), 0, 0, 0, 0, SystemUtilities.RandomColor(seed, alpha));
+ }
+ ///
+ /// Converts decimal degrees to a string of DMS formatted degrees with N/S, E/W prefix
+ ///
+ ///
+ /// boolean to determin latitude or longitude for compass prefix
+ ///
+ public static string DecimalDegreesToDMS(double decimalDegrees, bool latitude)
+ {
+ string dms = string.Empty;
+ string direction = latitude ? (decimalDegrees >= 0 ? "N" : "S") : (decimalDegrees >= 0 ? "E" : "W");
+ decimalDegrees = Math.Abs(decimalDegrees);
+ int d = (int)(decimalDegrees);
+ double decimalpart = decimalDegrees - d;
+ int m = (int)(decimalpart * 60);
+ double s = (decimalpart - m / 60f) * 3600;
+ dms = string.Format("{3} {0}\x00B0 {1}\' {2:F1}\"", d, m, s, direction);
+ return dms;
}
-
}
}
diff --git a/source/WaypointManager/WaypointData.cs b/WaypointManager/WaypointData.cs
similarity index 91%
rename from source/WaypointManager/WaypointData.cs
rename to WaypointManager/WaypointData.cs
index 5fd93dd..a512f6c 100644
--- a/source/WaypointManager/WaypointData.cs
+++ b/WaypointManager/WaypointData.cs
@@ -5,6 +5,7 @@
using UnityEngine;
using Contracts;
using FinePrint;
+using static WaypointManager.RegisterToolbar;
namespace WaypointManager
{
@@ -17,6 +18,7 @@ public class ContractContainer
{
public Contract contract;
public bool hidden = false;
+ public bool stockHidden = false;
public List waypointByContract = new List();
public string title;
@@ -82,25 +84,37 @@ public static void CacheWaypointData()
{
if (lastCacheUpdate == UnityEngine.Time.fixedTime || FinePrint.WaypointManager.Instance() == null)
{
+ if (lastCacheUpdate == UnityEngine.Time.fixedTime || FinePrint.WaypointManager.Instance() == null)
return;
}
+
lastCacheUpdate = UnityEngine.Time.fixedTime;
bool changed = false;
-
+ //int cnt = 0;
// Add new waypoints
foreach (Waypoint w in FinePrint.WaypointManager.Instance().Waypoints)
{
+ //cnt++;
+
+#if true // These used to dump info needed to debug City2 issue with Kopernicus
+ Log.Info("WorldPosition: " + w.worldPosition);
+ Log.Info("orbitPosition: " + w.orbitPosition);
+ Log.Info("name: " + w.name + ", latitude: " + w.latitude + ", longitude: " + w.longitude + ", Altitude: " + w.altitude);
+#endif
+ // Following added to bypass a Kopernicus error where it puts invalid waypoints into the system
+ if (w.celestialBody.bodyName == "Sun")
+ continue;
if (w != null && w.isNavigatable)
{
+ //Log.Info("cnt: " + cnt + ", name: " + w.name + ", w.isClustered: " + w.isClustered + ", w.isCustom: " + w.isCustom + ", isMission: " + w.isMission);
WaypointData wpd;
-
// Update values that are only cached once
if (!waypointData.ContainsKey(w))
{
wpd = new WaypointData();
wpd.waypoint = w;
- wpd.celestialBody = Util.GetBody(w.celestialName);
+ wpd.celestialBody = Util.GetBody(w.celestialBody.bodyName);
// Small stock bug - the Dessert Airfield has the wrong icon. Fix it for Squad.
if (w.name == "Dessert Airfield" && w.id == "launchsite")
@@ -160,6 +174,7 @@ public static void CacheWaypointData()
if (changed || customWaypoints.waypointByContract.Count + siteWaypoints.waypointByContract.Count != FinePrint.WaypointManager.Instance().Waypoints.Count())
{
+
// Clear the by contract list
foreach (ContractContainer cc in contractMap.Values)
{
diff --git a/source/WaypointManager/WaypointFlightRenderer.cs b/WaypointManager/WaypointFlightRenderer.cs
similarity index 70%
rename from source/WaypointManager/WaypointFlightRenderer.cs
rename to WaypointManager/WaypointFlightRenderer.cs
index b8431bc..70d2e9b 100644
--- a/source/WaypointManager/WaypointFlightRenderer.cs
+++ b/WaypointManager/WaypointFlightRenderer.cs
@@ -8,15 +8,18 @@
using Contracts;
using FinePrint;
using FinePrint.Utilities;
+using ClickThroughFix;
+using static WaypointManager.RegisterToolbar;
+using static FinePrint.ContractDefs;
namespace WaypointManager
{
[KSPAddon(KSPAddon.Startup.SpaceCentre, true)]
class WaypointFlightRenderer : MonoBehaviour
{
- private GUIStyle nameStyle = null;
- private GUIStyle valueStyle = null;
- private GUIStyle hintTextStyle = null;
+ private static GUIStyle nameStyle = null;
+ private static GUIStyle valueStyle = null;
+ private static GUIStyle hintTextStyle = null;
private bool visible = true;
private Waypoint selectedWaypoint = null;
@@ -68,9 +71,55 @@ public void OnShowUI()
visible = true;
}
+
+ bool drag = false;
+ float offset_x;
+ float offset_y;
+
+ void OnMouseDown()
+ {
+ if (!drag)
+ {
+ offset_x = Input.mousePosition.x - Config.displayBox.x;
+ offset_y = (Screen.height - Input.mousePosition.y) - Config.displayBox.y;
+ }
+ }
+
+ void OnMouseUp()
+ {
+ Config.Save();
+ }
+
+ void Update()
+ {
+ if (drag)
+ {
+ Config.boxLeft = Math.Max(0, Input.mousePosition.x - offset_x);
+ Config.boxLeft = Math.Min(Config.boxLeft, Screen.width - boxWidth);
+
+ Config.boxTop = Math.Max(0, (Screen.height - Input.mousePosition.y) - offset_y);
+ Config.boxTop = Math.Min(Config.boxTop, Screen.height - fullBoxHeight);
+ }
+ if (drag || Config.displayBox.Contains(new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y)))
+ {
+ bool b = Input.GetMouseButton(0) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl));
+
+ if (!drag && b)
+ {
+ OnMouseDown();
+ }
+ else
+ if (drag && !b)
+ OnMouseUp();
+ drag = b;
+
+ }
+ else drag = false;
+ }
+
public void OnGUI()
{
- if (visible)
+ if (visible && !ImportExport.helpDialogVisible)
{
if (Event.current.type == EventType.MouseUp && Event.current.button == 0)
{
@@ -85,8 +134,6 @@ public void OnGUI()
if (HighLogic.LoadedSceneIsFlight && !MapView.MapIsEnabled)
{
- SetupStyles();
-
WaypointData.CacheWaypointData();
foreach (WaypointData wpd in WaypointData.Waypoints)
@@ -94,6 +141,7 @@ public void OnGUI()
DrawWaypoint(wpd);
}
}
+ else cnt = 0;
if (HighLogic.LoadedSceneIsFlight && (!MapView.MapIsEnabled || ContractSystem.Instance == null))
{
@@ -102,44 +150,85 @@ public void OnGUI()
}
}
+ static float OldUIScale = 0;
+ static float oldScaling = 0;
+ static float finalScaling;
+
+ static float boxHeight;
+
+ private static Texture2D MakeTex(int width, int height, Color col)
+ {
+ Color[] pix = new Color[width * height];
+
+ for (int i = 0; i < pix.Length; i++)
+ pix[i] = col;
+
+ Texture2D result = new Texture2D(width, height);
+ result.SetPixels(pix);
+ result.Apply();
+
+ return result;
+ }
+
+ // cnt is needed becuase KSP/Unity is stupid and loses the background texture between scenes
+ // This makes sure that at least 2 cycles are done before it stops recreationg the texture
+ static int cnt = 0;
+
// Styles taken directly from Kerbal Engineer Redux - because they look great and this will
// make our display consistent with that
- protected void SetupStyles()
+ internal static void SetupStyles(bool forceUpdate = false)
{
- if (nameStyle != null)
+ if (OldUIScale == GameSettings.UI_SCALE && oldScaling == Config.scaling && !forceUpdate)
{
- return;
+ if (cnt++ >1)
+ return;
}
+ OldUIScale = GameSettings.UI_SCALE;
+ oldScaling = Config.scaling;
+ finalScaling = GameSettings.UI_SCALE * Config.scaling;
+ boxHeight = 20f * finalScaling;
+ Texture2D backgroundTexture = MakeTex(2, 2, new Color(Config.backgroundGrey, Config.backgroundGrey, Config.backgroundGrey, Config.displayOpacity));
nameStyle = new GUIStyle(HighLogic.Skin.label)
{
normal =
{
- textColor = Color.white
+ textColor = Color.white,
+ background = backgroundTexture
},
margin = new RectOffset(),
padding = new RectOffset(5, 0, 0, 0),
- alignment = TextAnchor.MiddleRight,
- fontSize = 11,
+ alignment = TextAnchor.MiddleLeft,
+ fontSize = (int)(11f * finalScaling),
fontStyle = FontStyle.Bold,
- fixedHeight = 20.0f
+ fixedHeight = 20.0f * finalScaling
};
valueStyle = new GUIStyle(HighLogic.Skin.label)
{
+ normal =
+ {
+ textColor = Color.green,
+ background = backgroundTexture
+ },
margin = new RectOffset(),
padding = new RectOffset(0, 5, 0, 0),
- alignment = TextAnchor.MiddleLeft,
- fontSize = 11,
+ alignment = TextAnchor.MiddleRight,
+ fontSize = (int)(11f * finalScaling),
fontStyle = FontStyle.Normal,
- fixedHeight = 20.0f
+ fixedHeight = 20.0f * finalScaling
};
hintTextStyle = new GUIStyle(HighLogic.Skin.box)
{
+ normal =
+ {
+ textColor = Color.white,
+ background = backgroundTexture
+ },
padding = new RectOffset(4, 4, 7, 4),
font = HighLogic.Skin.box.font,
- fontSize = 13,
+ fontSize = (int)(13 * finalScaling),
fontStyle = FontStyle.Normal,
fixedWidth = 0,
fixedHeight = 0,
@@ -148,6 +237,7 @@ protected void SetupStyles()
};
}
+
protected void DrawWaypoint(WaypointData wpd)
{
// Not our planet
@@ -204,35 +294,23 @@ protected void DrawWaypoint(WaypointData wpd)
asbRectTransform = asb.GetComponent();
}
- float ybase = (Screen.height / 2.0f) - asbRectTransform.position.y + asbRectTransform.sizeDelta.y * GameSettings.UI_SCALE * 0.5f + 4;
- if (ybase < 0)
- {
- ybase = 0;
- }
+ fullBoxHeight = 0;
+ boxWidth = 0;
string timeToWP = GetTimeToWaypoint(wpd);
if (Config.hudDistance)
{
- GUI.Label(new Rect((float)Screen.width / 2.0f - 188f, ybase, 240f, 20f), "Distance to " + label + ":", nameStyle);
- GUI.Label(new Rect((float)Screen.width / 2.0f + 60f, ybase, 120f, 20f),
- v.state != Vessel.State.DEAD ? Util.PrintDistance(wpd) : "N/A", valueStyle);
- ybase += 18f;
+ ShowText("Distance to " + label + ":", v.state != Vessel.State.DEAD ? Util.PrintDistance(wpd) : "N/A");
}
if (timeToWP != null && Config.hudTime)
{
- GUI.Label(new Rect((float)Screen.width / 2.0f - 188f, ybase, 240f, 20f), "ETA to " + label + ":", nameStyle);
- GUI.Label(new Rect((float)Screen.width / 2.0f + 60f, ybase, 120f, 20f),
- v.state != Vessel.State.DEAD ? timeToWP : "N/A", valueStyle);
- ybase += 18f;
+ ShowText("ETA to " + label + ":", v.state != Vessel.State.DEAD ? timeToWP : "N/A");
}
if (Config.hudHeading)
{
- GUI.Label(new Rect((float)Screen.width / 2.0f - 188f, ybase, 240f, 20f), "Heading to " + label + ":", nameStyle);
- GUI.Label(new Rect((float)Screen.width / 2.0f + 60f, ybase, 120f, 20f),
- v.state != Vessel.State.DEAD ? wpd.heading.ToString("N1") : "N/A", valueStyle);
- ybase += 18f;
+ ShowText("Heading to " + label + ":", v.state != Vessel.State.DEAD ? wpd.heading.ToString("N1") : "N/A");
}
if (Config.hudAngle && v.mainBody == wpd.celestialBody)
@@ -241,21 +319,21 @@ protected void DrawWaypoint(WaypointData wpd)
double heightDist = wpd.waypoint.altitude + wpd.waypoint.height - v.altitude;
double angle = Math.Atan2(heightDist, distance) * 180.0 / Math.PI;
- GUI.Label(new Rect((float)Screen.width / 2.0f - 188f, ybase, 240f, 20f), "Angle to " + label + ":", nameStyle);
- GUI.Label(new Rect((float)Screen.width / 2.0f + 60f, ybase, 120f, 20f),
- v.state != Vessel.State.DEAD ? angle.ToString("N2") : "N/A", valueStyle);
- ybase += 18f;
+ ShowText("Angle to " + label + ":", v.state != Vessel.State.DEAD ? angle.ToString("N2") : "N/A");
if (v.srfSpeed >= 0.1)
{
double velAngle = 90 - Math.Acos(Vector3d.Dot(v.srf_velocity.normalized, v.upAxis)) * 180.0 / Math.PI;
- GUI.Label(new Rect((float)Screen.width / 2.0f - 188f, ybase, 240f, 20f), "Velocity pitch angle:", nameStyle);
- GUI.Label(new Rect((float)Screen.width / 2.0f + 60f, ybase, 120f, 20f),
- v.state != Vessel.State.DEAD ? velAngle.ToString("N2") : "N/A", valueStyle);
- ybase += 18f;
+ ShowText("Velocity pitch angle:", v.state != Vessel.State.DEAD ? velAngle.ToString("N2") : "N/A");
}
}
+ if (Config.hudCoordinates && v.mainBody == wpd.celestialBody)
+ {
+ ShowText("Coordinates of " + label + ":", v.state != Vessel.State.DEAD ? string.Format("{0}\r\n{1}", Util.DecimalDegreesToDMS(wpd.waypoint.latitude, true), Util.DecimalDegreesToDMS(wpd.waypoint.longitude, false)) : "N/A");
+ }
+
+ Config.displayBox = new Rect(Config.boxLeft, Config.boxTop, boxWidth, fullBoxHeight);
}
}
}
@@ -316,7 +394,8 @@ protected void DrawWaypoint(WaypointData wpd)
// Draw the icon, but support blinking
if (!Util.IsNavPoint(wpd.waypoint) || !NavWaypoint.fetch.IsBlinking || (int)((Time.fixedTime - (int)Time.fixedTime) * 4) % 2 == 0)
{
- Graphics.DrawTexture(iconRect, ContractDefs.sprites[wpd.waypoint.id].texture, new Rect(0.0f, 0.0f, 1f, 1f), 0, 0, 0, 0, SystemUtilities.RandomColor(wpd.waypoint.seed, wpd.currentAlpha));
+ Graphics.DrawTexture(iconRect, /*ContractDefs.sprites[wpd.waypoint.id].texture */
+ Util.GetContractIcon(wpd.waypoint.id, wpd.waypoint.seed), new Rect(0.0f, 0.0f, 1f, 1f), 0, 0, 0, 0, SystemUtilities.RandomColor(wpd.waypoint.seed, wpd.currentAlpha));
}
// Hint text!
@@ -330,17 +409,47 @@ protected void DrawWaypoint(WaypointData wpd)
float width = 240f;
float height = hintTextStyle.CalcHeight(new GUIContent(label), width);
float yoffset = height + 48.0f;
- GUI.Box(new Rect(screenPos.x - width/2.0f, (float)Screen.height - screenPos.y - yoffset, width, height), label, hintTextStyle);
+ GUI.Box(new Rect(screenPos.x - width / 2.0f, (float)Screen.height - screenPos.y - yoffset, width, height), label, hintTextStyle);
}
}
}
+
+ float boxWidth = 0;
+ float fullBoxHeight = 0;
+
+
+ private void ShowText(string leftText, string rightText)
+ {
+ GUIContent leftTmp = new GUIContent(leftText);
+ GUIContent rightTmp = new GUIContent(rightText);
+
+ Vector2 leftLabelBoxSize = nameStyle.CalcSize(leftTmp);
+ Vector2 rightLabelBoxSize = valueStyle.CalcSize(rightTmp);
+
+ if (Config.boxLeft < 0)
+ {
+ //Config.boxLeft = (Screen.width - leftLabelBoxSize.x - rightLabelBoxSize.x - 5) / 2;
+ Config.boxLeft = (Screen.width - leftLabelBoxSize.x - rightLabelBoxSize.x - 5) * 0.5f;
+ }
+ if (Config.boxTop < 0)
+ {
+ Config.boxTop = Math.Max(0, Screen.height / 2.0f - asbRectTransform.position.y + asbRectTransform.sizeDelta.y * 0.5f + 20);
+ }
+
+ GUI.Label(new Rect(Config.boxLeft, Config.boxTop + fullBoxHeight, leftLabelBoxSize.x + 5f, boxHeight), leftText, nameStyle);
+ GUI.Label(new Rect(Config.boxLeft + leftLabelBoxSize.x + 5, Config.boxTop + fullBoxHeight, rightLabelBoxSize.x, boxHeight), rightText, valueStyle);
+
+ fullBoxHeight += boxHeight; // - 2;
+ boxWidth = Math.Max(boxWidth, leftLabelBoxSize.x + 5 + rightLabelBoxSize.x);
+ }
+
private void ShowNavigationWindow()
{
if (selectedWaypoint != null)
{
GUI.skin = HighLogic.Skin;
- windowPos = GUILayout.Window(10, windowPos, NavigationWindow, waypointName, GUILayout.MinWidth(224));
+ windowPos = ClickThruBlocker.GUILayoutWindow(10, windowPos, NavigationWindow, waypointName, GUILayout.MinWidth(224));
}
}
@@ -403,19 +512,10 @@ protected string GetTimeToWaypoint(WaypointData wpd)
double time = (wpd.distanceToActive / v.horizontalSrfSpeed);
- // Earthtime
- uint SecondsPerYear = 31536000; // = 365d
- uint SecondsPerDay = 86400; // = 24h
- uint SecondsPerHour = 3600; // = 60m
- uint SecondsPerMinute = 60; // = 60s
-
- if (GameSettings.KERBIN_TIME == true)
- {
- SecondsPerYear = 9201600; // = 426d
- SecondsPerDay = 21600; // = 6h
- SecondsPerHour = 3600; // = 60m
- SecondsPerMinute = 60; // = 60s
- }
+ uint SecondsPerYear = (uint)KSPUtil.dateTimeFormatter.Year;
+ uint SecondsPerDay = (uint)KSPUtil.dateTimeFormatter.Day;
+ uint SecondsPerHour = (uint)KSPUtil.dateTimeFormatter.Hour;
+ uint SecondsPerMinute = (uint)KSPUtil.dateTimeFormatter.Minute;
int years = (int)(time / SecondsPerYear);
time -= years * SecondsPerYear;
diff --git a/source/WaypointManager/WaypointManager.cs b/WaypointManager/WaypointManager.cs
similarity index 54%
rename from source/WaypointManager/WaypointManager.cs
rename to WaypointManager/WaypointManager.cs
index 1b0f222..1f8b120 100644
--- a/source/WaypointManager/WaypointManager.cs
+++ b/WaypointManager/WaypointManager.cs
@@ -11,6 +11,10 @@
using FinePrint;
using FinePrint.Utilities;
+using ToolbarControl_NS;
+using ClickThroughFix;
+using static WaypointManager.RegisterToolbar;
+
namespace WaypointManager
{
[KSPAddon(KSPAddon.Startup.SpaceCentre, true)]
@@ -19,12 +23,11 @@ class WaypointManager : MonoBehaviour
static List uniqueWaypoints = new List();
private const float GUI_WIDTH = 380;
- private const float SETTINGS_WIDTH = 280;
+ internal const float SETTINGS_WIDTH = 280;
public static WaypointManager Instance;
- private ApplicationLauncherButton launcherButton = null;
- private IButton toolbarButton;
+ ToolbarControl toolbarControl;
private static bool initialized = false;
public bool showGUI = false;
@@ -38,7 +41,7 @@ class WaypointManager : MonoBehaviour
private GUIStyle tipStyle;
private Vector2 scrollPosition;
- private Rect settingsPosition;
+ internal Rect settingsPosition;
private Rect tooltipPosition;
private List toolTip = new List();
@@ -55,14 +58,12 @@ void Start()
{
// Log version info
var ainfoV = Attribute.GetCustomAttribute(typeof(WaypointManager).Assembly, typeof(AssemblyInformationalVersionAttribute)) as AssemblyInformationalVersionAttribute;
- Debug.Log("WaypointManager " + ainfoV.InformationalVersion + " loading...");
+ Log.Info("WaypointManager " + ainfoV.InformationalVersion + " loading...");
LoadTextures();
LoadConfiguration();
- LoadToolbar();
-
- GameEvents.onGUIApplicationLauncherReady.Add(new EventVoid.OnEvent(SetupToolbar));
- GameEvents.onGUIApplicationLauncherUnreadifying.Add(new EventData.OnEvent(TeardownToolbar));
+ // LoadToolbar();
+ SetupToolbar();
GameEvents.onGameSceneLoadRequested.Add(new EventData.OnEvent(OnGameSceneLoad));
GameEvents.onHideUI.Add(new EventVoid.OnEvent(OnHideUI));
GameEvents.onShowUI.Add(new EventVoid.OnEvent(OnShowUI));
@@ -70,7 +71,7 @@ void Start()
Config.Load();
- Debug.Log("WaypointManager " + ainfoV.InformationalVersion + " loaded.");
+ Log.Info("WaypointManager " + ainfoV.InformationalVersion + " loaded.");
Instance = this;
initialized = true;
@@ -83,70 +84,62 @@ void Start()
void OnDestroy()
{
- GameEvents.onGUIApplicationLauncherReady.Remove(new EventVoid.OnEvent(SetupToolbar));
- GameEvents.onGUIApplicationLauncherUnreadifying.Remove(new EventData.OnEvent(TeardownToolbar));
GameEvents.onHideUI.Remove(OnHideUI);
GameEvents.onShowUI.Remove(OnShowUI);
GameEvents.onPlanetariumTargetChanged.Remove(new EventData.OnEvent(PlanetariumTargetChanged));
- UnloadToolbar();
-
+ //
+ //UnloadToolbar();
+ TeardownToolbar();
Config.Save();
}
private void LoadTextures()
{
- Config.toolbarIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/toolbar", false);
- Config.addWaypointIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/addWaypoint", false);
- Config.editWaypointIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/editWaypoint", false);
- Config.deleteWaypointIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/deleteWaypoint", false);
- Config.settingsIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/settings", false);
- Config.closeIcon = GameDatabase.Instance.GetTexture("WaypointManager/icons/close", false);
+ Config.toolbarIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.toolbarIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/toolbar");
+
+ Config.addWaypointIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.addWaypointIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/addWaypoint");
+ Config.editWaypointIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.editWaypointIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/editWaypoint");
+ Config.deleteWaypointIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.deleteWaypointIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/deleteWaypoint");
+ Config.settingsIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.settingsIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/settings");
+ Config.closeIcon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref Config.closeIcon, KSPUtil.ApplicationRootPath + "GameData/WaypointManager/PluginData/icons/close");
}
+ internal const string MODID = "WaypointManager";
+ internal const string MODNAME = "Waypoint Manager";
+
private void SetupToolbar()
{
- if (launcherButton == null && Config.useStockToolbar)
- {
- ApplicationLauncher.AppScenes visibleScenes = ApplicationLauncher.AppScenes.FLIGHT |
- ApplicationLauncher.AppScenes.MAPVIEW |
- ApplicationLauncher.AppScenes.TRACKSTATION;
- launcherButton = ApplicationLauncher.Instance.AddModApplication(ToggleWindow, ToggleWindow, null, null, null, null,
- visibleScenes, Config.toolbarIcon);
- }
+ toolbarControl = gameObject.AddComponent();
+ toolbarControl.AddToAllToolbars(ToggleWindow, ToggleWindow,
+ ApplicationLauncher.AppScenes.FLIGHT |
+ ApplicationLauncher.AppScenes.MAPVIEW |
+ ApplicationLauncher.AppScenes.TRACKSTATION |
+ ~ApplicationLauncher.AppScenes.MAINMENU,
+ MODID,
+ "waypointMgr",
+ "WaypointManager/PluginData/icons/toolbar",
+ "WaypointManager/PluginData/icons/toolbarSmall",
+ MODNAME
+ );
}
- private void TeardownToolbar(GameScenes scene)
- {
- if (launcherButton != null)
- {
- ApplicationLauncher.Instance.RemoveModApplication(launcherButton);
- launcherButton = null;
- }
- }
- private void LoadToolbar()
- {
- if (ToolbarManager.ToolbarAvailable)
- {
- toolbarButton = ToolbarManager.Instance.add("WaypointManager", "button");
- toolbarButton.TexturePath = "WaypointManager/icons/toolbarSmall";
- toolbarButton.ToolTip = "Waypoint Manager";
- toolbarButton.Visibility = new GameScenesVisibility(GameScenes.FLIGHT, GameScenes.TRACKSTATION);
- toolbarButton.OnClick += (e) =>
- {
- ToggleWindow();
- };
- }
- }
- private void UnloadToolbar()
+ private void TeardownToolbar()
{
- if (toolbarButton != null)
+ if (toolbarControl != null)
{
- toolbarButton.Destroy();
- toolbarButton = null;
+ toolbarControl.OnDestroy();
+ Destroy(toolbarControl);
}
+
}
private void OnGameSceneLoad(GameScenes scene)
@@ -178,17 +171,23 @@ void LoadConfiguration()
{
string config = configNode.GetValue("name");
- Debug.Log("WaypointManager: Loading " + config +" icons.");
+ Log.Info("WaypointManager: Loading " + config + " icons.");
string url = configNode.GetValue("url");
if (url.Last() != '/')
{
url += '/';
}
- foreach (GameDatabase.TextureInfo icon in GameDatabase.Instance.GetAllTexturesInFolder(url))
+ if (Directory.Exists(KSPUtil.ApplicationRootPath + "GameData/" + url))
{
- string name = icon.name.Substring(icon.name.LastIndexOf('/') + 1);
- bodyIcons[name] = icon.texture;
- Debug.Log("WaypointManager: Loaded icon for " + name + ".");
+
+ foreach (var str in Directory.GetFiles(KSPUtil.ApplicationRootPath + "GameData/" + url))
+ {
+ var icon = new Texture2D(2, 2);
+ ToolbarControl.LoadImageFromFile(ref icon, str);
+ //string name = icon.name.Substring(icon.name.LastIndexOf('/') + 1);
+ string name = Path.GetFileNameWithoutExtension(str);
+ bodyIcons[name] = icon;
+ }
}
}
catch (Exception e)
@@ -212,7 +211,7 @@ void LoadConfiguration()
}
}
}
-
+
private void ToggleWindow()
{
showGUI = !showGUI;
@@ -266,10 +265,10 @@ void OnGUI()
GUI.depth = 0;
- if (showGUI && visible)
+ if (showGUI && visible && !ImportExport.helpDialogVisible)
{
var ainfoV = Attribute.GetCustomAttribute(GetType().Assembly, typeof(AssemblyInformationalVersionAttribute)) as AssemblyInformationalVersionAttribute;
- Config.mainWindowPos = GUILayout.Window(
+ Config.mainWindowPos = ClickThruBlocker.GUILayoutWindow(
GetType().FullName.GetHashCode(),
Config.mainWindowPos,
WindowGUI,
@@ -288,10 +287,10 @@ void OnGUI()
if (settingsPosition.xMin == settingsPosition.xMax)
{
settingsPosition = new Rect(Config.mainWindowPos.xMax + SETTINGS_WIDTH + 4 > Screen.width ?
- Config.mainWindowPos.xMin - SETTINGS_WIDTH - 4: Config.mainWindowPos.xMax, Config.mainWindowPos.yMin, SETTINGS_WIDTH + 4, 1);
+ Config.mainWindowPos.xMin - SETTINGS_WIDTH - 4 : Config.mainWindowPos.xMax, Config.mainWindowPos.yMin, SETTINGS_WIDTH + 4, 1);
}
- settingsPosition = GUILayout.Window(
+ settingsPosition = ClickThruBlocker.GUILayoutWindow(
GetType().FullName.GetHashCode() + 1,
settingsPosition,
SettingsGUI,
@@ -312,7 +311,8 @@ void OnGUI()
}
// Display custom waypoint gui windows
- CustomWaypointGUI.OnGUI();
+ if (!ImportExport.helpDialogVisible)
+ CustomWaypointGUI.OnGUI();
// Draw any tooltips
DrawToolTip();
@@ -353,6 +353,8 @@ protected void WindowGUI(int windowID)
CustomWaypointGUI.AddWaypoint();
}
GUILayout.Space(4);
+
+
if (GUILayout.Button(new GUIContent(Config.settingsIcon, "Settings"), GUI.skin.label))
{
showSettings = !showSettings;
@@ -389,7 +391,7 @@ protected void WindowGUI(int windowID)
{
CelestialBody b = pair.Key;
bool hidden = hiddenBodies.ContainsKey(b) && hiddenBodies[b];
- if (GUILayout.Button(b.name, headerButtonStyle, GUILayout.MaxWidth(GUI_WIDTH - 24.0f)))
+ if (GUILayout.Button(b.bodyName, headerButtonStyle, GUILayout.MaxWidth(GUI_WIDTH - 24.0f)))
{
hidden = !hidden;
hiddenBodies[b] = hidden;
@@ -424,53 +426,72 @@ protected void WaypointLineGUI(WaypointData wpd)
// Contract icon
GUILayout.Label(ContractIcon(wpd), GUILayout.ExpandWidth(false), GUILayout.Height(38), GUILayout.Width(38));
GUILayout.Space(2);
-
+
// Celestial body icon
GUILayout.Label(CelestialBodyIcon(wpd.celestialBody.name), GUILayout.ExpandWidth(false));
GUILayout.Space(2);
- GUILayout.BeginVertical();
-
- // Waypoint name, distance
- GUILayout.BeginHorizontal();
- string name = wpd.waypoint.name;
- if (wpd.waypoint.isClustered)
+ using (new GUILayout.VerticalScope())
{
- name += " " + StringUtilities.IntegerToGreek(wpd.waypoint.index);
- }
- GUILayout.Label(name, labelStyle, GUILayout.Height(16), GUILayout.Width(GUI_WIDTH - 240), GUILayout.ExpandWidth(false));
- if (FlightGlobals.currentMainBody == wpd.celestialBody)
- {
- GUILayout.Label("Dist: " + Util.PrintDistance(wpd), labelStyle, GUILayout.Height(16), GUILayout.ExpandWidth(false));
- }
- GUILayout.EndHorizontal();
- // Waypoint location
- GUILayout.BeginHorizontal();
- GUILayout.Label("Lat: " + Util.FormatCoordinate(wpd.waypoint.latitude, true), labelStyle, GUILayout.Height(16), GUILayout.Width(GUI_WIDTH / 2.0f - 72.0f), GUILayout.ExpandWidth(false));
- GUILayout.Label("Lon: " + Util.FormatCoordinate(wpd.waypoint.longitude, false), labelStyle, GUILayout.Height(16), GUILayout.ExpandWidth(false));
- GUILayout.EndHorizontal();
+ // Waypoint name, distance
+ using (new GUILayout.HorizontalScope())
+ {
+ string name = wpd.waypoint.name;
+ if (wpd.waypoint.isClustered)
+ {
+ name += " " + StringUtilities.IntegerToGreek(wpd.waypoint.index);
+ }
+ GUILayout.Label(name, labelStyle, GUILayout.Height(16), GUILayout.Width(GUI_WIDTH - 240), GUILayout.ExpandWidth(false));
+ if (FlightGlobals.currentMainBody == wpd.celestialBody)
+ {
+ GUILayout.Label("Dist: " + Util.PrintDistance(wpd), labelStyle, GUILayout.Height(16), GUILayout.ExpandWidth(false));
+ }
+ }
- GUILayout.EndVertical();
+ // Waypoint location
+ using (new GUILayout.HorizontalScope())
+ {
+ GUILayout.Label("Lat: " + Util.FormatCoordinate(wpd.waypoint.latitude, true), labelStyle, GUILayout.Height(16), GUILayout.Width(GUI_WIDTH / 2.0f - 72.0f), GUILayout.ExpandWidth(false));
+ GUILayout.Label("Lon: " + Util.FormatCoordinate(wpd.waypoint.longitude, false), labelStyle, GUILayout.Height(16), GUILayout.ExpandWidth(false));
+ }
+
+ }
GUILayout.FlexibleSpace();
if (CustomWaypoints.Instance.IsCustom(wpd.waypoint))
{
- GUILayout.BeginVertical();
- GUILayout.Space(8);
- GUILayout.BeginHorizontal();
+ using (new GUILayout.VerticalScope())
+ {
+ GUILayout.Space(8);
+ using (new GUILayout.HorizontalScope())
+ {
+
+ if (GUILayout.Button(new GUIContent(Config.editWaypointIcon, "Edit Waypoint"), GUI.skin.label))
+ {
+ CustomWaypointGUI.EditWaypoint(wpd.waypoint);
+ }
+ if (GUILayout.Button(new GUIContent(Config.deleteWaypointIcon, "Delete Waypoint"), GUI.skin.label))
+ {
+ CustomWaypointGUI.DeleteWaypoint(wpd.waypoint);
+ }
- if (GUILayout.Button(new GUIContent(Config.editWaypointIcon, "Edit Waypoint"), GUI.skin.label))
+ }
+ }
+ }
+ else
+ {
+#if false
+ if (GUILayout.Button(new GUIContent(Config.editWaypointIcon, "Edit Stock Waypoint"), GUI.skin.label))
{
- CustomWaypointGUI.EditWaypoint(wpd.waypoint);
+ CustomWaypointGUI.EditWaypoint(wpd.waypoint, true);
}
- if (GUILayout.Button(new GUIContent(Config.deleteWaypointIcon, "Delete Waypoint"), GUI.skin.label))
+#endif
+ if (GUILayout.Button(new GUIContent(Config.deleteWaypointIcon, "Hide Stock Waypoint"), GUI.skin.label))
{
CustomWaypointGUI.DeleteWaypoint(wpd.waypoint);
}
- GUILayout.EndHorizontal();
- GUILayout.EndVertical();
}
// Active waypoint toggle
@@ -517,113 +538,151 @@ protected GUIContent ContractIcon(WaypointData wpd)
protected void SettingsGUI(int windowID)
{
- GUILayout.BeginVertical(GUILayout.Width(SETTINGS_WIDTH));
-
- // Distance calculation method
- GUILayout.Label("Distance calculation", headingStyle);
- GUIContent guiContent = new GUIContent("Lateral", "Calculates distance as the horizontal distance only. Useful if you're looking to hit a landing spot exactly.");
- if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.LATERAL, guiContent))
- {
- Config.distanceCalcMethod = Config.DistanceCalcMethod.LATERAL;
- }
- guiContent = new GUIContent("Straight line", "Calculates distance in a direct line.");
- if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.STRAIGHT_LINE, guiContent))
- {
- Config.distanceCalcMethod = Config.DistanceCalcMethod.STRAIGHT_LINE;
- }
- guiContent = new GUIContent("Compromise", "Uses lateral distance if the vessel and waypoint altitude are relatively close, otherwise uses straight line distance.");
- if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.COMPROMISE, guiContent))
- {
- Config.distanceCalcMethod = Config.DistanceCalcMethod.COMPROMISE;
- }
-
- // In-Flight Waypoints :)
- GUILayout.Label("Waypoints to display in-flight", headingStyle);
- guiContent = new GUIContent("All", "Display all waypoints on the given celestial body while in flight.");
- if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.ALL, guiContent))
- {
- Config.waypointDisplay = Config.WaypointDisplay.ALL;
- }
- guiContent = new GUIContent("Active", "Display only the active waypoint while in flight.");
- if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.ACTIVE, guiContent))
- {
- Config.waypointDisplay = Config.WaypointDisplay.ACTIVE;
- }
- guiContent = new GUIContent("None", "Do not display any waypoints while in flight.");
- if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.NONE, guiContent))
+ using (new GUILayout.VerticalScope())
{
- Config.waypointDisplay = Config.WaypointDisplay.NONE;
- }
+ // Distance calculation method
+ GUILayout.Label("Distance calculation", headingStyle);
+ GUIContent guiContent = new GUIContent("Lateral", "Calculates distance as the horizontal distance only. Useful if you're looking to hit a landing spot exactly.");
+ if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.LATERAL, guiContent))
+ {
+ Config.distanceCalcMethod = Config.DistanceCalcMethod.LATERAL;
+ }
+ guiContent = new GUIContent("Straight line", "Calculates distance in a direct line.");
+ if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.STRAIGHT_LINE, guiContent))
+ {
+ Config.distanceCalcMethod = Config.DistanceCalcMethod.STRAIGHT_LINE;
+ }
+ guiContent = new GUIContent("Compromise", "Uses lateral distance if the vessel and waypoint altitude are relatively close, otherwise uses straight line distance.");
+ if (GUILayout.Toggle(Config.distanceCalcMethod == Config.DistanceCalcMethod.COMPROMISE, guiContent))
+ {
+ Config.distanceCalcMethod = Config.DistanceCalcMethod.COMPROMISE;
+ }
- // HUD
- GUILayout.Label("Values to display below altimeter", headingStyle);
- if (GUILayout.Toggle(Config.hudDistance, "Distance to target") != Config.hudDistance)
- {
- Config.hudDistance = !Config.hudDistance;
- }
- if (GUILayout.Toggle(Config.hudTime, "Time to target") != Config.hudTime)
- {
- Config.hudTime = !Config.hudTime;
- }
- if (GUILayout.Toggle(Config.hudHeading, "Heading to target") != Config.hudHeading)
- {
- Config.hudHeading = !Config.hudHeading;
- }
- if (GUILayout.Toggle(Config.hudAngle, "Glide slope angles") != Config.hudAngle)
- {
- Config.hudAngle = !Config.hudAngle;
- }
+ // In-Flight Waypoints :)
+ GUILayout.Label("Waypoints to display in-flight", headingStyle);
+ guiContent = new GUIContent("All", "Display all waypoints on the given celestial body while in flight.");
+ if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.ALL, guiContent))
+ {
+ Config.waypointDisplay = Config.WaypointDisplay.ALL;
+ }
+ guiContent = new GUIContent("Active", "Display only the active waypoint while in flight.");
+ if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.ACTIVE, guiContent))
+ {
+ Config.waypointDisplay = Config.WaypointDisplay.ACTIVE;
+ }
+ guiContent = new GUIContent("None", "Do not display any waypoints while in flight.");
+ if (GUILayout.Toggle(Config.waypointDisplay == Config.WaypointDisplay.NONE, guiContent))
+ {
+ Config.waypointDisplay = Config.WaypointDisplay.NONE;
+ }
- // Display style
- GUILayout.Label("Location display style", headingStyle);
- if (GUILayout.Toggle(!Config.displayDecimal, "Degrees/Minutes/Seconds") == Config.displayDecimal)
- {
- Config.displayDecimal = false;
- }
- if (GUILayout.Toggle(Config.displayDecimal, "Decimal") != Config.displayDecimal)
- {
- Config.displayDecimal = true;
- }
+ // HUD
+ GUILayout.Label("Values to display below altimeter", headingStyle);
+ if (GUILayout.Toggle(Config.hudDistance, "Distance to target") != Config.hudDistance)
+ {
+ Config.hudDistance = !Config.hudDistance;
+ }
+ if (GUILayout.Toggle(Config.hudTime, "Time to target") != Config.hudTime)
+ {
+ Config.hudTime = !Config.hudTime;
+ }
+ if (GUILayout.Toggle(Config.hudHeading, "Heading to target") != Config.hudHeading)
+ {
+ Config.hudHeading = !Config.hudHeading;
+ }
+ if (GUILayout.Toggle(Config.hudAngle, "Glide slope angles") != Config.hudAngle)
+ {
+ Config.hudAngle = !Config.hudAngle;
+ }
+ if (GUILayout.Toggle(Config.hudCoordinates, "Coordinates of target") != Config.hudCoordinates)
+ {
+ Config.hudCoordinates = !Config.hudCoordinates;
+ }
+ // Display style
+ GUILayout.Label("Location display style", headingStyle);
+ if (GUILayout.Toggle(!Config.displayDecimal, "Degrees/Minutes/Seconds") == Config.displayDecimal)
+ {
+ Config.displayDecimal = false;
+ }
+ if (GUILayout.Toggle(Config.displayDecimal, "Decimal") != Config.displayDecimal)
+ {
+ Config.displayDecimal = true;
+ }
- // Toolbar
- if (ToolbarManager.ToolbarAvailable)
- {
- GUILayout.Label("Toolbar Display", headingStyle);
- if (GUILayout.Toggle(Config.useStockToolbar, "Show icon in stock toolbar") != Config.useStockToolbar)
+ // Opacity
+ GUILayout.Label("Waypoint Opacity", headingStyle);
+ using (new GUILayout.HorizontalScope())
{
- Config.useStockToolbar = !Config.useStockToolbar;
- if (Config.useStockToolbar)
- {
- SetupToolbar();
- }
- else
+ Config.opacity = GUILayout.HorizontalSlider(Config.opacity, 0.3f, 1.0f);
+ GUILayout.Space(5);
+ if (GUILayout.Button("Reset", GUILayout.Width(50)))
+ Config.opacity = 1.0f;
+ }
+ if (GUILayout.Button(new GUIContent("Export Custom Waypoints", "Exports the custom waypoints to GameData/WaypointManager/CustomWaypoints.cfg")))
+ {
+ CustomWaypoints.Export();
+ }
+ if (importExportWindow == null)
+ {
+ if (GUILayout.Button(new GUIContent("Import Custom Waypoints", "Imports the custom waypoints from GameData/WaypointManager/CustomWaypoints.cfg")))
{
- TeardownToolbar(GameScenes.FLIGHT);
+ if (importExportWindow == null)
+ importExportWindow = gameObject.AddComponent();
+ //CustomWaypoints.Import();
}
}
- }
+ else
+ {
+ if (GUILayout.Button(new GUIContent("Cancel Import of Custom Waypoints", "Cancels the import of custom waypoints from GameData/WaypointManager/CustomWaypoints.cfg")))
+ Destroy(importExportWindow);
+ }
- // Opacity
- GUILayout.Label("Waypoint Opacity", headingStyle);
- Config.opacity = GUILayout.HorizontalSlider(Config.opacity, 0.3f, 1.0f);
+ GUILayout.Label("UI Scaling (" + (Config.scaling * 100).ToString("F0") + "%)", headingStyle);
+ using (new GUILayout.HorizontalScope())
+ {
+ Config.scaling = GUILayout.HorizontalSlider(Config.scaling, 0.8f, 1.5f);
+ GUILayout.Space(5);
+ if (GUILayout.Button("Reset", GUILayout.Width(50)))
+ Config.scaling = 1.0f;
+ }
+ GUILayout.Label("Background Display Opacity");
+ var oldOpacity = Config.displayOpacity;
+ var oldBackground = Config.backgroundGrey;
+ Config.displayOpacity = GUILayout.HorizontalSlider(Config.displayOpacity, 0.0f, 1f);
+ GUILayout.Label("Background Display (grey scale)");
+ Config.backgroundGrey = GUILayout.HorizontalSlider(Config.backgroundGrey, 0.0f, 1f);
+ GUILayout.Label("Nav Window position can be dragged by holding Control + mouse left/right and dragging");
+
+
+#if false
+ GUILayout.Space(5);
+ if (GUILayout.Button("Reset", GUILayout.Width(50)))
+ Config.displayOpacity = 0.0f;
+#endif
+ if (oldOpacity != Config.displayOpacity || oldBackground != Config.backgroundGrey)
+ {
+ WaypointFlightRenderer.SetupStyles(true);
+ }
- if (GUILayout.Button(new GUIContent("Export Custom Waypoints", "Exports the custom waypoints to GameData/WaypointManager/CustomWaypoints.cfg")))
- {
- CustomWaypoints.Export();
- }
- if (GUILayout.Button(new GUIContent("Import Custom Waypoints", "Imports the custom waypoints from GameData/WaypointManager/CustomWaypoints.cfg")))
- {
- CustomWaypoints.Import();
- }
- GUILayout.EndVertical();
+ using (new GUILayout.HorizontalScope())
+ {
+ if (GUILayout.Button("Reset Display Position"))
+ {
+ Config.boxLeft = Config.boxTop = -1;
+ Config.Save();
+ }
+ }
+ }
GUI.DragWindow();
SetToolTip(1);
}
+ internal static MonoBehaviour importExportWindow = null;
+
///
/// Set the current tooltip
///
diff --git a/source/WaypointManager/WaypointManager.csproj b/WaypointManager/WaypointManager.csproj
similarity index 50%
rename from source/WaypointManager/WaypointManager.csproj
rename to WaypointManager/WaypointManager.csproj
index 8a7c101..73c43e8 100644
--- a/source/WaypointManager/WaypointManager.csproj
+++ b/WaypointManager/WaypointManager.csproj
@@ -9,7 +9,7 @@
Properties
WaypointManager
WaypointManager
- v4.0
+ v4.8
512
@@ -21,55 +21,55 @@
DEBUG;TRACE
prompt
4
+ false
pdbonly
true
bin\Release\
- TRACE
+
+
prompt
4
+ false
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\Assembly-CSharp.dll
+
+ False
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\Assembly-CSharp-firstpass.dll
+
+ False
-
-
-
-
-
-
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.dll
-
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.AnimationModule.dll
-
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.CoreModule.dll
+
+ False
+ $(KSPDIR)\GameData\000_ClickThroughBlocker\Plugins\ClickThroughBlocker.dll
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.ImageConversionModule.dll
+
+ $(KSPDIR)\GameData\SpaceTuxLibrary\Plugins\KSP_Log.dll
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.IMGUIModule.dll
+
+ $(KSPDIR)\GameData\SpaceTuxLibrary\Plugins\SpaceTuxUtility.dll
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.InputLegacyModule.dll
-
-
- ..\..\..\..\..\..\..\Program Files (x86)\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.TextRenderingModule.dll
+
+
+ False
+ $(KSPDIR)\GameData\001_ToolbarControl\Plugins\ToolbarControl.dll
+
+ True
+ True
+ AssemblyVersion.tt
+
-
+
+
+
+
+
@@ -77,10 +77,41 @@
+
+
+ TextTemplatingFileGenerator
+ AssemblyVersion.cs
+
+
+
+
+
- copy /y "$(TargetPath)" "$(SolutionDir)..\GameData\WaypointManager\"
-copy /y "$(TargetPath)" "C:\Program Files (x86)\Kerbal Space Program\GameData\WaypointManager\"
+ set KSPDIR=$(KSPDIR)
+
+IF "%25KSPDIR%25"=="" (
+
+ ECHO Configuration error - KSPDIR not specified in project.
+
+ ECHO Either set KSPDIR environment variable or edit BetterLoadSaveGame.Common.props
+
+ PAUSE
+
+ GOTO DONE
+
+)
+
+start /D $(SolutionDir) /WAIT deploy.bat $(TargetDir) $(TargetFileName) $(TargetName)
+
+if $(ConfigurationName) == Release (
+
+ start /D $(SolutionDir) /WAIT buildRelease.bat $(TargetDir) $(TargetFileName) $(TargetName)
+
+)
+
+
+ "$(DevEnvDir)\texttransform.exe" "$(ProjectDir)AssemblyVersion.tt"