public sortableLastSeen(Vector3D myPos, LastSeen seen, ExtensionsRelations.Relations relations, Option options) { this.seen = seen; this.relations = relations; TimeSpan sinceLastSeen; predictedPos = seen.predictPosition(out sinceLastSeen); distance = (predictedPos - myPos).Length(); seconds = (int)sinceLastSeen.TotalSeconds; this.options = options; }
private void SelectLastSeen(RelayStorage store, List <long> entityIds) { Vector3D myPos = m_block.GetPosition(); foreach (long id in entityIds) { LastSeen seen; if (store.TryGetLastSeen(id, out seen)) { ExtensionsRelations.Relations relations = m_block.getRelationsTo(seen.Entity, ExtensionsRelations.Relations.Enemy).highestPriority(); m_sortableList.Add(new sortableLastSeen(myPos, seen, relations, m_options)); //Log.DebugLog("item: " + seen.Entity.getBestName() + ", relations: " + relations, "Display_FromProgram()"); } } }
private void AllLastSeen(RelayStorage store) { Vector3D myPos = m_block.GetPosition(); store.ForEachLastSeen((LastSeen seen) => { IMyCubeGrid grid = seen.Entity as IMyCubeGrid; if (grid != null && AttachedGrid.IsGridAttached(m_block.CubeGrid, grid, AttachedGrid.AttachmentKind.Physics)) { return; } ExtensionsRelations.Relations relations = m_block.getRelationsTo(seen.Entity, ExtensionsRelations.Relations.Enemy).highestPriority(); m_sortableList.Add(new sortableLastSeen(myPos, seen, relations, m_options)); //Log.DebugLog("item: " + seen.Entity.getBestName() + ", relations: " + relations, "Display()"); }); }
/// <summary> /// Creates the parameter for the block and runs the program. /// </summary> private void HandleDetected() { if (m_progBlock.IsRunning) { return; } StringBuilder parameter = new StringBuilder(); bool first = true; RelayStorage store = m_networkClient.GetStorage(); if (store == null) { return; } store.ForEachLastSeen((LastSeen seen) => { ExtensionsRelations.Relations relations = (m_progBlock as IMyCubeBlock).getRelationsTo(seen.Entity, ExtensionsRelations.Relations.Enemy).highestPriority(); bool friendly = ExtensionsRelations.toIsFriendly(relations); string bestName = friendly ? seen.Entity.getBestName() : seen.HostileName(); TimeSpan sinceSeen; Vector3D predictedPosition = seen.predictPosition(out sinceSeen); if (first) { first = false; } else { parameter.Append(entitySeparator); } parameter.Append(seen.Entity.EntityId); parameter.Append(fieldSeparator); parameter.Append((byte)relations); parameter.Append(fieldSeparator); parameter.Append((byte)seen.Type); parameter.Append(fieldSeparator); parameter.Append(bestName); parameter.Append(fieldSeparator); parameter.Append(seen.isRecent_Radar()); parameter.Append(fieldSeparator); parameter.Append(seen.isRecent_Jam()); parameter.Append(fieldSeparator); parameter.Append((int)sinceSeen.TotalSeconds); parameter.Append(fieldSeparator); parameter.Append(Math.Round(predictedPosition.X, 1)); parameter.Append(fieldSeparator); parameter.Append(Math.Round(predictedPosition.Y, 1)); parameter.Append(fieldSeparator); parameter.Append(Math.Round(predictedPosition.Z, 1)); parameter.Append(fieldSeparator); parameter.Append(Math.Round(seen.LastKnownVelocity.X, 1)); parameter.Append(fieldSeparator); parameter.Append(Math.Round(seen.LastKnownVelocity.Y, 1)); parameter.Append(fieldSeparator); parameter.Append(Math.Round(seen.LastKnownVelocity.Z, 1)); parameter.Append(fieldSeparator); if (seen.RadarInfoIsRecent()) { parameter.Append(seen.Info.Volume); } else { parameter.Append(0f); } if (!friendly && seen.Type == LastSeen.EntityType.Grid && m_blockCountList_sb.Length > 2 && seen.isRecent() && m_blockCountList_btl != null) { int[] blockCounts = m_blockCountList_btl.Count(CubeGridCache.GetFor((IMyCubeGrid)seen.Entity)); if (blockCounts.Length != 0) { parameter.Append(fieldSeparator); parameter.Append(string.Join(fieldSeparator.ToString(), blockCounts)); } } }); if (parameter.Length == 0) { Log.DebugLog("no detected entities"); return; } //Log.DebugLog("parameters:\n" + parameter.ToString().Replace(string.Empty + entitySeparator, entitySeparator + "\n")); if (!m_progBlock.TryRun(parameter.ToString())) { Log.AlwaysLog("Failed to run program", Logger.severity.INFO); } }
public DetectedInfo(IMyEntity entity, ExtensionsRelations.Relations relate) { this.Entity = entity; this.Relate = relate; this.relateOrder = Relate.PriorityOrder(); }