private void SendMoveLeftRequest(MoveRequest request) { if (CanDecideAboutMoveLeft(request.x)) { if (IsMoveLeftPossible(request.x)) { request.accepted = true; MoveBy(request.x); } else { System.Diagnostics.Debug.WriteLine("no move left :("); } request.processed = true; if (this != request.sender) { rightBead.SendMoveLeftRequest(request); } } else { if (request.accepted) { MoveBy(request.x); } if (this != request.sender || !request.processed) { if (request.processed) { rightBead.SendMoveLeftRequest(request); } else { leftBead.SendMoveLeftRequest(request); } } } }
// ========================================================================== // Moving left logic // ========================================================================== protected void MoveLeft(Double x) { MoveRequest request = new MoveRequest(this, x); this.SendMoveLeftRequest(request); }