// Launch this Critter. internal void Launch() { Reset(); AttachNumberPlate(); TargetMover spriteMover = new TargetMover(); spriteMover.SpriteReachedTarget += (sender, spriteEvent) => Notify("REACHED_DESTINATION:" + spriteEvent.Sprite.Position.ToString()); spriteMover.SpriteMoved += MoveHandler; Mover = spriteMover; stopped = false; controllerThread = new Thread(() => { controllerThreadRunning = true; while (controllerThreadRunning) { controller.Responder = messageToBody => MessagesToBody.Enqueue(messageToBody); controller.Logger = logMessage => LogDebugging(logMessage); while (MessagesFromBody.TryDequeue(out string messageFromBody)) { try { controller.Receive(messageFromBody); } catch (Exception e) { Crashed(e); } } Thread.Sleep(5); } // Clear message queues string ignore; while (MessagesFromBody.TryDequeue(out ignore)) { ; } while (MessagesToBody.TryDequeue(out ignore)) { ; } }); controllerThread.IsBackground = true; controllerThread.Start(); Log("launched"); Notify("LAUNCH:" + Position.ToString()); }
// Send message to controller private void Notify(string message) { LogDebugging("Message to controller: " + message); MessagesFromBody.Enqueue(message); }