// Reflect Object Attributes public override void FdAmb_ObjectAttributesReflectedHandler(object sender, HlaObjectEventArgs data) { // Call the base class handler base.FdAmb_ObjectAttributesReflectedHandler(sender, data); #region User Code foreach (var item in Program.StationObjects) { // Update station if (data.ObjectInstance.Handle == item.Handle) { // Get parameter values - 2nd method foreach (var pair in data.ObjectInstance.Attributes) { if (pair.Handle == Som.StationOC.StationName.Handle) { item.StationName = pair.GetValue <string>(); } else if (pair.Handle == Som.StationOC.Location.Handle) { item.Location = pair.GetValue <LocationEnum>(); } } } } foreach (var item in Program.MyTracks) { // Update track if (data.ObjectInstance.Handle == item.TrackNo) { // Get parameter values - 1st method // First check whether the attr is updated or not. Result returns 0/null if the updated attribute set does not contain the attr and its value if (data.IsValueUpdated(Som.ShipOC.Callsign)) { item.TrackName = data.GetAttributeValue <string>(Som.ShipOC.Callsign); } if (data.IsValueUpdated(Som.ShipOC.Position)) { item.TrackPosition = data.GetAttributeValue <PositionType>(Som.ShipOC.Position); } if (data.IsValueUpdated(Som.ShipOC.Heading)) { item.TrackHeading = data.GetAttributeValue <LocationEnum>(Som.ShipOC.Heading); } if (data.IsValueUpdated(Som.ShipOC.Speed)) { item.TrackSpeed = data.GetAttributeValue <SpeedEnum>(Som.ShipOC.Speed); } } } foreach (var item in Program.OtherTracks) { // Find the Object if (data.ObjectInstance.Handle == item.Handle) { } } #endregion //User Code }
// Reflect Object Attributes public override void FdAmb_ObjectAttributesReflectedHandler(object sender, HlaObjectEventArgs data) { // Call the base class handler base.FdAmb_ObjectAttributesReflectedHandler(sender, data); #region User Code foreach (var item in manager.StationObjects) { // Update station if (data.ObjectInstance.Handle == item.Handle) { // Get parameter values - 2nd method foreach (var pair in data.ObjectInstance.Attributes) { if (pair.Handle == Som.StationOC.StationName.Handle) { item.StationName = pair.GetValue <string>(); } else if (pair.Handle == Som.StationOC.Location.Handle) { item.Location = pair.GetValue <LocationEnum>(); } } } } foreach (var item in manager.ShipObjects) { // Update ship if (data.ObjectInstance.Handle == item.Handle) { // Get parameter values - 1st method // First check whether the attr is updated or not. Result returns 0/null if the updated attribute set does not contain the attr and its value if (data.IsValueUpdated(Som.ShipOC.Callsign)) { item.Ship.Callsign = data.GetAttributeValue <string>(Som.ShipOC.Callsign); } if (data.IsValueUpdated(Som.ShipOC.Heading)) { item.Ship.Heading = (LocationEnum)data.GetAttributeValue <uint>(Som.ShipOC.Heading); } if (data.IsValueUpdated(Som.ShipOC.Position)) { item.Ship.Position = data.GetAttributeValue <PositionType>(Som.ShipOC.Position); } if (data.IsValueUpdated(Som.ShipOC.Speed)) { item.Ship.Speed = (SpeedEnum)data.GetAttributeValue <uint>(Som.ShipOC.Speed); } // Get parameter values - 2nd method //foreach (var pair in data.ObjectInstance.Attributes) //{ // if (pair.Handle == Som.ShipOC.Callsign.Handle) item.Local.Callsign = pair.GetValue<string>(); // else if (pair.Handle == Som.ShipOC.Position.Handle) item.Local.Position = pair.GetValue<PositionType>(); //} // report to the user //Report($"Callsign: {item.Local.Callsign}, Heading: {item.Local.Heading.ToString()}, Position: ({item.Local.Position.X}, {item.Local.Position.Y}), Speed: {item.Local.Speed.ToString()}" + Environment.NewLine); } } #endregion //User Code }