public void UpdateWorldState(TelemetryMessage telemetry) { m_lastUpdate = telemetry.time_stamp; m_rover.UpdateState(telemetry.position, telemetry.direction, telemetry.speed, telemetry.move_state, telemetry.turn_state); foreach (ObstacleMessage obstacle in telemetry.obstacles) { switch (obstacle.type) { case ObstacleType.Boulder: Boulder b = new Boulder(obstacle.position, obstacle.radius); if (!m_boulders.ContainsKey(b)) { m_boulders.Add(b, telemetry.time_stamp); OnBoulderFound(b); m_tree.AddObject(b); } else { m_boulders[b] = telemetry.time_stamp; OnBoulderSeen(b); } break; case ObstacleType.Crater: Crater c = new Crater(obstacle.position, obstacle.radius); if (!m_craters.ContainsKey(c)) { m_craters.Add(c, telemetry.time_stamp); OnCraterFound(c); m_tree.AddObject(c); } else { m_craters[c] = telemetry.time_stamp; OnCraterSeen(c); } break; case ObstacleType.Home: if (m_home == null) { m_home = new Home(obstacle.position, obstacle.radius); OnHomeFound(m_home); } else { OnHomeSeen(m_home); } break; } } m_martians.Clear(); foreach (MartianMessage m in telemetry.martians) { Martian martian = new Martian(m.position, m.direction, m.speed); m_martians.Add(martian); OnMartianSeen(martian); } OnWorldChanged(); }
private void OnBoulderFound(Boulder b) { OnObjectFound(b); if (BoulderFound != null) { BoulderFound(this, b); } }
private void OnBoulderSeen(Boulder b) { OnObjectSeen(b); if (BoulderSeen != null) { BoulderSeen(this, b); } }
private void AddBoulder(Boulder b) { using (Graphics g = Graphics.FromImage(m_staticBG)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; Rectangle rect = GetObjectRect(b); g.FillEllipse(m_boulderBrush, rect); g.DrawEllipse(m_borderPen, rect); } }
void m_state_BoulderFound(WorldState world, Boulder b) { AddBoulder(b); }