public static AsteroidIntel DeserializeAsteroid(string s) { AsteroidIntel astr = new AsteroidIntel(); astr.Deserialize(s); return(astr); }
static public AsteroidIntel IGCUnpack(object data) { var unpacked = (MyTuple <Vector3D, float, long>)data; var astr = new AsteroidIntel(); astr.IGCUnpackInto(unpacked); return(astr); }
public HoneybeeMiningTask(MyGridProgram program, HoneybeeMiningSystem miningSystem, IAutopilot autopilot, IAgentSubsystem agentSubsystem, Waypoint target, AsteroidIntel host, IIntelProvider intelProvider, IMonitorSubsystem monitorSubsystem, IDockingSubsystem dockingSubsystem, DockTaskGenerator dockTaskGenerator, UndockFirstTaskGenerator undockTaskGenerator) { Program = program; MiningSystem = miningSystem; Autopilot = autopilot; AgentSubsystem = agentSubsystem; MonitorSubsystem = monitorSubsystem; Host = host; MiningDepth = MiningSystem.MineDepth; LowestExpectedOreDist = (float)MiningDepth; DockingSubsystem = dockingSubsystem; Status = TaskStatus.Incomplete; double lDoc, det; GetSphereLineIntersects(host.Position, host.Radius, target.Position, target.Direction, out lDoc, out det); Perpendicular = GetPerpendicular(target.Direction); CoPerp = Perpendicular.Cross(target.Direction); if (det < 0) { Status = TaskStatus.Aborted; state = -1; return; } SurfaceDist = -lDoc + Math.Sqrt(det); ApproachPoint = target.Position + target.Direction * SurfaceDist * 0.3; ExitPoint = ApproachPoint; EntryPoint = target.Position + target.Direction * miningSystem.CloseDist; MiningEnd = target.Position - target.Direction * MiningDepth; SurfacePoint = target.Position; LeadTask = new WaypointTask(Program, Autopilot, new Waypoint(), WaypointTask.AvoidObstacleMode.SmartEnter); MineTask = new WaypointTask(Program, Autopilot, new Waypoint(), WaypointTask.AvoidObstacleMode.DoNotAvoid); LeadTask.Destination.Position = ApproachPoint; LeadTask.Destination.Direction = target.Direction * -1; LeadTask.Destination.DirectionUp = Perpendicular + CoPerp; intelProvider.ReportFleetIntelligence(LeadTask.Destination, TimeSpan.FromSeconds(1)); MineTask.Destination.Direction = target.Direction * -1; MineTask.Destination.DirectionUp = Perpendicular + CoPerp; MineTask.Destination.Position = EntryPoint; DockTaskGenerator = dockTaskGenerator; UndockTaskGenerator = undockTaskGenerator; }
public void DeserializeSubsystem(string serialized) { if (IsMaster) { MyStringReader reader = new MyStringReader(serialized); while (reader.HasNextLine) { var s = reader.NextLine(); if (s == string.Empty) { return; } ReportFleetIntelligence(AsteroidIntel.DeserializeAsteroid(s), TimeSpan.Zero); } } }
public ITask GenerateTask(TaskType type, MyTuple <IntelItemType, long> intelKey, Dictionary <MyTuple <IntelItemType, long>, IFleetIntelligence> IntelItems, TimeSpan canonicalTime, long myID) { if (type != TaskType.Mine) { return(new NullTask()); } if (!IntelItems.ContainsKey(intelKey)) { return(new NullTask()); } if (intelKey.Item1 != IntelItemType.Waypoint) { return(new NullTask()); } var target = (Waypoint)IntelItems[intelKey]; // Make sure we actually have the asteroid we are supposed to be mining AsteroidIntel host = null; foreach (var kvp in IntelItems) { if (kvp.Key.Item1 != IntelItemType.Asteroid) { continue; } var dist = (kvp.Value.GetPositionFromCanonicalTime(canonicalTime) - target.GetPositionFromCanonicalTime(canonicalTime)).Length(); if (dist > kvp.Value.Radius) { continue; } host = (AsteroidIntel)kvp.Value; break; } if (host == null) { return(new NullTask()); } Task = new HoneybeeMiningTask(Program, MiningSystem, Autopilot, AgentSubsystem, target, host, IntelProvider, MonitorSubsystem, DockingSubsystem, DockTaskGenerator, UndockTaskGenerator); return(Task); }
public MyTuple <IntelItemType, long>?TryIGCUnpack(object data, Dictionary <MyTuple <IntelItemType, long>, IFleetIntelligence> intelItems) { var unpacked = (MyTuple <int, long, MyTuple <Vector3D, float, long> >)data; var key = MyTuple.Create((IntelItemType)unpacked.Item1, unpacked.Item2); if (intelItems != null && key.Item1 == IntelItemType.Asteroid) { if (intelItems.ContainsKey(key)) { ((AsteroidIntel)intelItems[key]).IGCUnpackInto(unpacked.Item3); } else { intelItems.Add(key, AsteroidIntel.IGCUnpack(unpacked.Item3)); } return(key); } return(null); }
public static string SerializeAsteroid(AsteroidIntel astr) { return($"{astr.Position.ToString()}|{astr.Radius}|{astr.ID}"); }