Open 5H1N0B11 opened 3 years ago
There are a number of ways to achieve this; you could set a listener which in turn sets a property; however it can also be done directly using the property update manager. I prefer this approach because it gets the variable directly into the hash without the need for listeners.
To do this we only really need to add the property "autopilot/route-manager/current-wp" to the hash and add the two PropertyManager.FromHashList/Value to the update_items; however for efficiency we will also add a property node for the route manager route to the HUD object.
obj.routeManager = props.getNode("/autopilot/route-manager/route");
Then add to the update_items (also in the constructor/new method) like this
props.UpdateManager.FromHashList(["RouteManagerCurrentWp"], 1, func(val) {
#this update will extract the value of altitude from the waypoint node
#and place it directly in the hash ready for the next method.
obj.activeWaypointNode = obj.routeManager.getChild("wp", val.RouteManagerCurrentWp);
if (obj.activeWaypointNode != nil) {
obj.NxtElevationNode = obj.activeWaypointNode.getNode("altitude-m");
if (obj.NxtElevationNode == nil)
val.NxtElevation = nil;
else
val.NxtElevation = obj.NxtElevationNode.getValue();
} else {
obj.NxtElevationNode = nil;
val.NxtElevation = nil;
}
}),
props.UpdateManager.FromHashValue("NxtElevation", 1, func(val){
# output the current elevation to the display
obj.window8.setText(sprintf("ELV=%02d",val));
}),
and finally add the request to monitor the variable to the
input = {
...
RouteManagerCurrentWp : "autopilot/route-manager/current-wp",
...
The changes to the F-15 HUD to achieve this can be seen in the attached archive by comparing the two files;
This should be updated every frame, and I don't know how integrate that, with Richard's code me.NxtElevation = getprop("/autopilot/route-manager/route/wp[" ~ me.input.currentWp.getValue() ~ "]/altitude-m");