Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 69d5ee26af54
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9510414ced59
Choose a head ref
  • 7 commits
  • 2 files changed
  • 1 contributor

Commits on May 18, 2019

  1. modernization

    eggrobin committed May 18, 2019
    Copy the full SHA
    7a12957 View commit details
  2. strings

    eggrobin committed May 18, 2019
    Copy the full SHA
    154e493 View commit details
  3. miscellaneous refactoring

    eggrobin committed May 18, 2019
    Copy the full SHA
    bc5b89a View commit details
  4. it fits

    eggrobin committed May 18, 2019
    Copy the full SHA
    aa5aabb View commit details
  5. this too

    eggrobin committed May 18, 2019
    Copy the full SHA
    c644413 View commit details
  6. that too

    eggrobin committed May 18, 2019
    Copy the full SHA
    66a0be4 View commit details
  7. Merge pull request #2172 from eggrobin/modernization

    Modernization
    eggrobin authored May 18, 2019
    Copy the full SHA
    9510414 View commit details
Showing with 123 additions and 126 deletions.
  1. +41 −48 ksp_plugin_adapter/ksp_plugin_adapter.cs
  2. +82 −78 ksp_plugin_adapter/map_node_pool.cs
89 changes: 41 additions & 48 deletions ksp_plugin_adapter/ksp_plugin_adapter.cs
Original file line number Diff line number Diff line change
@@ -1090,8 +1090,7 @@ private System.Collections.IEnumerator WaitedForFixedUpdate() {
// Advance the lagging vessels and kill those which collided with a
// celestial.
{
DisposableIterator collided_vessels;
plugin_.CatchUpLaggingVessels(out collided_vessels);
plugin_.CatchUpLaggingVessels(out DisposableIterator collided_vessels);
for (; !collided_vessels.IteratorAtEnd();
collided_vessels.IteratorIncrement()) {
Guid vessel_guid = new Guid(collided_vessels.IteratorGetVesselGuid());
@@ -1867,16 +1866,15 @@ private void RenderPredictionMarkers(String vessel_guid,
XYZ sun_world_position) {
if (plotting_frame_selector_.target_override) {
Vessel target = plotting_frame_selector_.target_override;
DisposableIterator ascending_nodes_iterator;
DisposableIterator descending_nodes_iterator;
DisposableIterator approaches_iterator;
plugin_.RenderedPredictionNodes(vessel_guid,
sun_world_position,
out ascending_nodes_iterator,
out descending_nodes_iterator);
plugin_.RenderedPredictionClosestApproaches(vessel_guid,
sun_world_position,
out approaches_iterator);
plugin_.RenderedPredictionNodes(
vessel_guid,
sun_world_position,
out DisposableIterator ascending_nodes_iterator,
out DisposableIterator descending_nodes_iterator);
plugin_.RenderedPredictionClosestApproaches(
vessel_guid,
sun_world_position,
out DisposableIterator approaches_iterator);
map_node_pool_.RenderMarkers(
ascending_nodes_iterator,
MapObject.ObjectType.AscendingNode,
@@ -1898,13 +1896,12 @@ private void RenderPredictionMarkers(String vessel_guid,
} else {
foreach (CelestialBody celestial in
plotting_frame_selector_.FixedBodies()) {
DisposableIterator apoapsis_iterator;
DisposableIterator periapsis_iterator;
plugin_.RenderedPredictionApsides(vessel_guid,
celestial.flightGlobalsIndex,
sun_world_position,
out apoapsis_iterator,
out periapsis_iterator);
plugin_.RenderedPredictionApsides(
vessel_guid,
celestial.flightGlobalsIndex,
sun_world_position,
out DisposableIterator apoapsis_iterator,
out DisposableIterator periapsis_iterator);
map_node_pool_.RenderMarkers(
apoapsis_iterator,
MapObject.ObjectType.Apoapsis,
@@ -1925,12 +1922,11 @@ private void RenderPredictionMarkers(String vessel_guid,
.BODY_CENTRED_PARENT_DIRECTION) {
var primary =
plotting_frame_selector_.selected_celestial.referenceBody;
DisposableIterator ascending_nodes_iterator;
DisposableIterator descending_nodes_iterator;
plugin_.RenderedPredictionNodes(vessel_guid,
sun_world_position,
out ascending_nodes_iterator,
out descending_nodes_iterator);
plugin_.RenderedPredictionNodes(
vessel_guid,
sun_world_position,
out DisposableIterator ascending_nodes_iterator,
out DisposableIterator descending_nodes_iterator);
map_node_pool_.RenderMarkers(
ascending_nodes_iterator,
MapObject.ObjectType.AscendingNode,
@@ -1951,16 +1947,15 @@ private void RenderFlightPlanMarkers(String vessel_guid,
XYZ sun_world_position) {
if (plotting_frame_selector_.target_override) {
Vessel target = plotting_frame_selector_.target_override;
DisposableIterator ascending_nodes_iterator;
DisposableIterator descending_nodes_iterator;
DisposableIterator approaches_iterator;
plugin_.FlightPlanRenderedNodes(vessel_guid,
sun_world_position,
out ascending_nodes_iterator,
out descending_nodes_iterator);
plugin_.FlightPlanRenderedClosestApproaches(vessel_guid,
sun_world_position,
out approaches_iterator);
plugin_.FlightPlanRenderedNodes(
vessel_guid,
sun_world_position,
out DisposableIterator ascending_nodes_iterator,
out DisposableIterator descending_nodes_iterator);
plugin_.FlightPlanRenderedClosestApproaches(
vessel_guid,
sun_world_position,
out DisposableIterator approaches_iterator);
map_node_pool_.RenderMarkers(
ascending_nodes_iterator,
MapObject.ObjectType.AscendingNode,
@@ -1982,13 +1977,12 @@ private void RenderFlightPlanMarkers(String vessel_guid,
} else {
foreach (CelestialBody celestial in
plotting_frame_selector_.FixedBodies()) {
DisposableIterator apoapsis_iterator;
DisposableIterator periapsis_iterator;
plugin_.FlightPlanRenderedApsides(vessel_guid,
celestial.flightGlobalsIndex,
sun_world_position,
out apoapsis_iterator,
out periapsis_iterator);
plugin_.FlightPlanRenderedApsides(
vessel_guid,
celestial.flightGlobalsIndex,
sun_world_position,
out DisposableIterator apoapsis_iterator,
out DisposableIterator periapsis_iterator);
map_node_pool_.RenderMarkers(
apoapsis_iterator,
MapObject.ObjectType.Apoapsis,
@@ -2009,12 +2003,11 @@ private void RenderFlightPlanMarkers(String vessel_guid,
.BODY_CENTRED_PARENT_DIRECTION) {
var primary =
plotting_frame_selector_.selected_celestial.referenceBody;
DisposableIterator ascending_nodes_iterator;
DisposableIterator descending_nodes_iterator;
plugin_.FlightPlanRenderedNodes(vessel_guid,
sun_world_position,
out ascending_nodes_iterator,
out descending_nodes_iterator);
plugin_.FlightPlanRenderedNodes(
vessel_guid,
sun_world_position,
out DisposableIterator ascending_nodes_iterator,
out DisposableIterator descending_nodes_iterator);
map_node_pool_.RenderMarkers(
ascending_nodes_iterator,
MapObject.ObjectType.AscendingNode,
160 changes: 82 additions & 78 deletions ksp_plugin_adapter/map_node_pool.cs
Original file line number Diff line number Diff line change
@@ -111,40 +111,42 @@ private KSP.UI.Screens.Mapview.MapNode MakePoolNode() {
(KSP.UI.Screens.Mapview.MapNode node,
Mouse.Buttons buttons) => {
if (buttons == Mouse.Buttons.Left) {
if (properties_[node].vessel != null) {
var properties = properties_[node];
if (properties.vessel != null) {
if (PlanetariumCamera.fetch.target !=
properties_[node].vessel.mapObject) {
properties.vessel.mapObject) {
PlanetariumCamera.fetch.SetTarget(
properties_[node].vessel.mapObject);
properties.vessel.mapObject);
}
} else if (PlanetariumCamera.fetch.target !=
properties_[node].celestial.MapObject) {
properties.celestial.MapObject) {
PlanetariumCamera.fetch.SetTarget(
properties_[node].celestial.MapObject);
properties.celestial.MapObject);
}
}
};
new_node.OnUpdateVisible +=
(KSP.UI.Screens.Mapview.MapNode node,
KSP.UI.Screens.Mapview.MapNode.IconData icon) => {
if (!properties_[node].visible) {
var properties = properties_[node];
if (!properties.visible) {
icon.visible = false;
return;
}
CelestialBody celestial = properties_[node].celestial;
CelestialBody celestial = properties.celestial;
UnityEngine.Color colour =
celestial.orbit == null
? XKCDColors.SunshineYellow
: celestial.orbitDriver.Renderer.nodeColor;
colour.a = 1;
icon.visible = true;
if (properties_[node].object_type == MapObject.ObjectType.Periapsis &&
properties_[node].celestial.GetAltitude(
properties_[node].world_position) < 0) {
if (properties.object_type == MapObject.ObjectType.Periapsis &&
properties.celestial.GetAltitude(
properties.world_position) < 0) {
// Make sure we see impacts.
colour = XKCDColors.Orange;
}
if (properties_[node].object_type ==
if (properties.object_type ==
MapObject.ObjectType.ApproachIntersect) {
colour = XKCDColors.Chartreuse;
}
@@ -153,95 +155,97 @@ private KSP.UI.Screens.Mapview.MapNode MakePoolNode() {
new_node.OnUpdateType +=
(KSP.UI.Screens.Mapview.MapNode node,
KSP.UI.Screens.Mapview.MapNode.TypeData type) => {
if (properties_[node].object_type == MapObject.ObjectType.Periapsis &&
properties_[node].celestial.GetAltitude(
properties_[node].world_position) < 0) {
var properties = properties_[node];
if (properties.object_type == MapObject.ObjectType.Periapsis &&
properties.celestial.GetAltitude(properties.world_position) < 0) {
type.oType = MapObject.ObjectType.PatchTransition;
type.pType =
KSP.UI.Screens.Mapview.MapNode.PatchTransitionNodeType.Impact;
} else if (properties_[node].object_type ==
} else if (properties.object_type ==
MapObject.ObjectType.ApproachIntersect) {
type.oType = properties_[node].object_type;
type.oType = properties.object_type;
type.aType = KSP.UI.Screens.Mapview.MapNode.ApproachNodeType
.CloseApproachOwn;
} else {
type.oType = properties_[node].object_type;
type.oType = properties.object_type;
}
};
new_node.OnUpdateCaption +=
(KSP.UI.Screens.Mapview.MapNode node,
KSP.UI.Screens.Mapview.MapNode.CaptionData caption) => {
if (properties_[node].object_type == MapObject.ObjectType.Periapsis ||
properties_[node].object_type == MapObject.ObjectType.Apoapsis) {
String name =
properties_[node].object_type == MapObject.ObjectType.Periapsis
? "Periapsis"
: "Apoapsis";
caption.Header =
properties_[node].celestial.name + " " + name + " : <color=" +
XKCDColors.HexFormat.Chartreuse + ">" +
properties_[node].celestial.GetAltitude(
properties_[node].world_position).ToString(
"N0",
Culture.culture) + " m</color>";
caption.captionLine2 =
properties_[node].velocity.magnitude.ToString("N0",
Culture.culture) +
" m/s";
} else if (properties_[node].object_type ==
MapObject.ObjectType.AscendingNode ||
properties_[node].object_type ==
MapObject.ObjectType.DescendingNode) {
String name = properties_[node].object_type ==
MapObject.ObjectType.AscendingNode
? "Ascending Node"
: "Descending Node";
caption.Header = name;
caption.captionLine2 =
properties_[node].velocity.z.ToString("N0", Culture.culture) +
" m/s out of plane";
} else if (properties_[node].object_type ==
MapObject.ObjectType.ApproachIntersect) {
caption.Header = "Target Approach : <color=" +
XKCDColors.HexFormat.Chartreuse + ">" +
(properties_[node].vessel.GetWorldPos3D() -
properties_[node].world_position)
.magnitude.ToString("N0", Culture.culture) +
" m</color>";
caption.captionLine2 =
properties_[node].velocity.magnitude.ToString("N0",
Culture.culture) +
" m/s";
var properties = properties_[node];
string source;
switch (properties.source) {
case NodeSource.FLIGHT_PLAN:
source = "Planned";
break;
case NodeSource.PREDICTION:
source = "Predicted";
break;
default:
throw Log.Fatal($"Unexpected node source {properties.source}");
}
switch (properties.object_type) {
case MapObject.ObjectType.Periapsis:
case MapObject.ObjectType.Apoapsis: {
String apsis_name =
properties.object_type == MapObject.ObjectType.Periapsis
? "Periapsis"
: "Apoapsis";
CelestialBody celestial = properties.celestial;
Vector3d position = properties.world_position;
double speed = properties.velocity.magnitude;
caption.Header =
$@"{source} {celestial.name} {apsis_name} : <color={
XKCDColors.HexFormat.Chartreuse}>{
celestial.GetAltitude(position):N0} m</color>".ToString(
Culture.culture);
caption.captionLine2 =
$"{speed:N0} m/s".ToString(Culture.culture);
break;
}
case MapObject.ObjectType.AscendingNode:
case MapObject.ObjectType.DescendingNode: {
string node_name =
properties.object_type == MapObject.ObjectType.AscendingNode
? "Ascending Node"
: "Descending Node";
caption.Header = $"{source} {node_name}";
caption.captionLine2 =
$"{properties.velocity.z:N0} m/s".ToString(Culture.culture);
break;
}
case MapObject.ObjectType.ApproachIntersect: {
Vessel target_vessel = properties.vessel;
double separation = (target_vessel.GetWorldPos3D() -
properties.world_position).magnitude;
double speed = properties.velocity.magnitude;
caption.Header =
$@"Target Approach : <color={
XKCDColors.HexFormat.Chartreuse}>{
separation:N0} m</color>".ToString(Culture.culture);
caption.captionLine2 =
$"{speed:N0} m/s".ToString(Culture.culture);
break;
}
}
caption.captionLine1 =
"T" +
FlightPlanner.FormatTimeSpan(TimeSpan.FromSeconds(
Planetarium.GetUniversalTime() - properties_[node].time));
if (properties_[node].celestial.GetAltitude(
properties_[node].world_position) < 0 &&
properties_[node].object_type == MapObject.ObjectType.Periapsis) {
caption.Header = properties_[node].celestial.name +
" Impact<color=" +
XKCDColors.HexFormat.Chartreuse + "></color>";
Planetarium.GetUniversalTime() - properties.time));
if (properties.celestial.GetAltitude(properties.world_position) < 0 &&
properties.object_type == MapObject.ObjectType.Periapsis) {
var celestial = properties.celestial.name;
caption.Header =
$@"{source} {celestial} Impact<color={
XKCDColors.HexFormat.Chartreuse}></color>";
caption.captionLine1 = "";
caption.captionLine2 = "";
}
switch (properties_[node].source) {
case NodeSource.FLIGHT_PLAN:
caption.Header = "Planned " + caption.Header;
break;
case NodeSource.PREDICTION:
caption.Header = "Predicted " + caption.Header;
break;
default:
throw Log.Fatal("Unexpected node source " +
properties_[node].source);
}
};
new_node.OnUpdatePosition +=
(KSP.UI.Screens.Mapview.MapNode node) =>
ScaledSpace.LocalToScaledSpace(
properties_[node].world_position);
ScaledSpace.LocalToScaledSpace(properties_[node].world_position);
return new_node;
}