private void CubeBlock_AppendingCustomInfo(IMyTerminalBlock block, System.Text.StringBuilder customInfo)
        {
            switch (_initial)
            {
            case InitialTargetStatus.NotReady:
                customInfo.AppendLine("Launcher not ready");
                return;

            case InitialTargetStatus.Golis:
                customInfo.Append(AmmoName());
                customInfo.Append(" fired at position: ");
                customInfo.AppendLine(_initialTarget.GetPosition().ToPretty());
                return;

            case InitialTargetStatus.FromWeapon:
                customInfo.Append(AmmoName());
                customInfo.Append(" fired at ");
                LastSeenTarget lst = _initialTarget as LastSeenTarget;
                if (lst != null)
                {
                    if (lst.Block != null)
                    {
                        customInfo.Append(lst.Block.DefinitionDisplayNameText);
                        customInfo.Append(" on ");
                    }
                    customInfo.AppendLine(lst.LastSeen.HostileName());
                }
                else
                {
                    customInfo.AppendLine(_initialTarget.Entity.GetNameForDisplay(CubeBlock.OwnerId));
                }
                return;

            case InitialTargetStatus.NoStorage:
                customInfo.AppendLine("Cannot fire: Not connected to an antenna or radar");
                return;

            case InitialTargetStatus.NotFoundId:
                customInfo.Append("Cannot fire: No entity found with ID: ");
                customInfo.AppendLine(m_weaponTarget.Options.TargetEntityId.ToString());
                return;

            case InitialTargetStatus.NotFoundAny:
                customInfo.AppendLine("Cannot fire: No targets");
                return;

            default:
                Logger.AlwaysLog("Not implemented: " + _initial, Logger.severity.ERROR);
                return;
            }
        }
Exemple #2
0
		/// <remarks>
		/// Runs on separate thread.
		/// </remarks>
		private void TargetLastSeen()
		{
			if (myAntenna == null || myAntenna.lastSeenCount == 0)
			{
				if (myTargetSeen != null && myTarget.TType == TargetType.None)
				{
					myLogger.debugLog("Retargeting last", "TargetLastSeen()");
					myTarget = new LastSeenTarget(myTargetSeen);
					SetFiringDirection();
				}
				return;
			}

			if (DateTime.UtcNow - failed_lastSeenTarget < checkLastSeen)
				return;

			LastSeen fetched;
			if (myTargetSeen != null && myAntenna.tryGetLastSeen(myTargetSeen.Entity.EntityId, out fetched) && fetched.isRecent())
			{
				myLogger.debugLog("using previous last seen: " + fetched.Entity.getBestName(), "TargetLastSeen()");
				myTarget = new LastSeenTarget(fetched);
				SetFiringDirection();
				return;
			}

			if (Options.TargetEntityId.HasValue)
			{
				if (myAntenna.tryGetLastSeen(Options.TargetEntityId.Value, out fetched))
				{
					myLogger.debugLog("using last seen from entity id: " + fetched.Entity.getBestName(), "TargetLastSeen()");
					myTarget = new LastSeenTarget(fetched);
					SetFiringDirection();
				}
				else
					myLogger.debugLog("failed to get last seen from entity id", "TargetLastSeen()");
				return;
			}

			Vector3D myPos = MyEntity.GetPosition();
			LastSeen closest = null;
			double closestDist = double.MaxValue;

			myLogger.debugLog("last seen count: " + myAntenna.lastSeenCount, "TargetLastSeen()");
			myAntenna.ForEachLastSeen(seen => {
				myLogger.debugLog("checking: " + seen.Entity.getBestName(), "TargetLastSeen()");
				if (seen.isRecent() && CubeBlock.canConsiderHostile(seen.Entity) && Options.CanTargetType(seen.Entity))
				{
					double dist = Vector3D.DistanceSquared(myPos, seen.LastKnownPosition);
					if (dist < closestDist)
					{
						closestDist = dist;
						closest = seen;
					}
				}
				return false;
			});

			if (closest == null)
			{
				myLogger.debugLog("failed to get a target from last seen", "TargetLastSeen()");
				failed_lastSeenTarget = DateTime.UtcNow;
				myTargetSeen = null;
			}
			else
			{
				myLogger.debugLog("got a target from last seen: " + closest.Entity.getBestName(), "TargetLastSeen()");
				myTarget = new LastSeenTarget(closest);
				SetFiringDirection();
				myTargetSeen = closest;
			}
		}