private IGameObject Move(Task <IGameObject> antecedent) { Bug bug = antecedent.Result as Bug; if (bug == null) { return(null); } lock (globalLock) { if (bug.IsAtWar || bug.IsPairing || bug.IsEating) { return(bug); } int desiredX = bug.PosX; int desiredY = bug.PosY; if (bug.Direction == Bug.DirectionEnum.Up) { --desiredY; } else if (bug.Direction == Bug.DirectionEnum.Down) { ++desiredY; } else if (bug.Direction == Bug.DirectionEnum.Lef) { --desiredX; } else if (bug.Direction == Bug.DirectionEnum.Right) { ++desiredX; } if (desiredX >= 0 && desiredX < conf.MapWidth && desiredY >= 0 && desiredY < conf.MapHeight && IsCellEmpty(desiredX, desiredY) == true) { bug.PosX = desiredX; bug.PosY = desiredY; if (random.Next(0, 100) > 100 - conf.ChangeDirectionChance) { bug.Direction = Bug.GetRandomDirection(); } } else { bug.Direction = Bug.GetRandomDirection(); } return(bug); } }