command list now in a switch

command list now in a switch

--- MIMWebClient/Core/Command.cs
+++ MIMWebClient/Core/Command.cs
@@ -46,13 +46,13 @@
                 case "down":
                     Movement.Move(playerData, room, "Down");
                     break;
-                case "look":
-                case "look at":
-                case "l at":
-                case "search":
+                case "look":
+                case "look at":
+                case "l at":
+                case "search":
                     LoadRoom.ReturnRoom(playerData, room, commandOptions, "look");
                     break;
-                case "l in":
+                case "l in":
                 case "search in":
                     LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in");
                     break;
@@ -61,303 +61,362 @@
                     break;
                 case "touch":
                     LoadRoom.ReturnRoom(playerData, room, commandOptions, "touch");
-                    break;
+                    break;
                 case "smell":
                     LoadRoom.ReturnRoom(playerData, room, commandOptions, "smell");
-                    break;
+                    break;
                 case "taste":
                     LoadRoom.ReturnRoom(playerData, room, commandOptions, "taste");
-                    break;
+                    break;
                 case "score":
                     Score.ReturnScore(playerData);
-                    break;
+                    break;
                 case "inventory":
                     Inventory.ReturnInventory(playerData.Inventory, playerData);
-                    break;
-                case "eq":
-                case "equip":
-                case "equipment":
+                    break;
+                case "eq":
+                case "equip":
+                case "equipment":
                 case "garb":
                     Equipment.ShowEquipment(playerData);
-                    break;
-                case "loot":
+                    break;
+                case "loot":
                 case "get":
                 case "take":
                     ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item");
-                    break;
+                    break;
                 case "plunder":
                     ManipulateObject.GetItem(room, playerData, "all " + commandOptions, commandKey, "item");
-                    break;
-                case "drop":
+                    break;
+                case "drop":
                 case "put":
                     ManipulateObject.DropItem(room, playerData, commandOptions, commandKey);
-                    break;
+                    break;
                 case "give":
                     ManipulateObject.GiveItem(room, playerData, commandOptions, commandKey, "killable");
-                    break;
+                    break;
                 case "save":
                     Save.SavePlayer(playerData);
-                    break;
-                case "say":
+                    break;
+                case "say":
                 case "'":
                     Communicate.Say(commandOptions, playerData, room);
-                    break;
-                case "sayto":
+                    break;
+                case "sayto":
                 case ">":
                     Communicate.SayTo(commandOptions, room, playerData);
-                    break;
+                    break;
                 case "newbie":
                     Communicate.NewbieChannel(commandOptions, playerData);
-                    break;
+                    break;
                 case "gossip":
                     Communicate.GossipChannel(commandOptions, playerData);
-                    break;
+                    break;
                 case "ooc":
                     Communicate.OocChannel(commandOptions, playerData);
-                    break;
+                    break;
                 case "yes":
                     Communicate.Say("Yes", playerData, room);
-                    break;
-                case "no":
+                    break;
+                case "no":
                     Communicate.Say("No", playerData, room);
-                    break;
+                    break;
                 case "yell":
                     Communicate.Yell(commandOptions, room, playerData);
-                    break;
+                    break;
                 case "talkto":
                     Talk.TalkTo(commandOptions, room, playerData);
-                    break;
+                    break;
                 case "emote":
                     Emote.EmoteActionToRoom(commandOptions, playerData);
-                    break;
-                case "use":
-                case "wear":
+                    break;
+                case "use":
+                case "wear":
                 case "wield":
                     Equipment.WearItem(playerData, commandOptions);
-                    break;
-                case "remove":
-                case "doff":
+                    break;
+                case "remove":
+                case "doff":
                 case "unwield":
                     Equipment.RemoveItem(playerData, commandOptions);
-                    break;
-                case "hit":
-                case "kill":
-                case "attack":
+                    break;
+                case "hit":
+                case "kill":
+                case "attack":
                     Fight2.PerpareToFight(playerData, room, commandOptions);
-                    break;
-                case "flee":
+                    break;
+                case "flee":
                     Flee.fleeCombat(playerData, room);
-                    break;
-                case "sacrifice":
-                case "harvest":
+                    break;
+                case "sacrifice":
+                case "harvest":
                     Harvest.Body(playerData, room, commandOptions);
-                    break;
-                case "peek":
+                    break;
+                case "peek":
                     Peak.DoPeak(context, playerData, room, commandOptions);
-                    break;
-                case "steal":
+                    break;
+                case "steal":
                     Steal.DoSteal(context, playerData, room, commandOptions);
-                    break;
-                case "pick":
+                    break;
+                case "pick":
                     LockPick.DoLockPick(context, playerData, room, commandOptions);
-                    break;
-                case "c magic missile":
+                    break;
+                case "c magic missile":
                 case "cast magic missile":
-                    MagicMissile.StartMagicMissile(playerData, room, commandOptions);
-                    break;
-                case "c armour":
-                case "cast armour":
-                case "c armor":
-                case "cast armor":
+                    MagicMissile.StartMagicMissile(playerData, room, commandOptions);
+                    break;
+                case "c armour":
+                case "cast armour":
+                case "c armor":
+                case "cast armor":
                     new Armour().StartArmour(playerData, room, commandOptions);
-                    break;
-                case "c continual light":
-                case "cast continual light":
-                    ContinualLight.StarContinualLight(playerData, room, commandOptions);
-                    break;
-                case "c invis":
+                    break;
+                case "c continual light":
+                case "cast continual light":
+                    ContinualLight.StarContinualLight(playerData, room, commandOptions);
+                    break;
+                case "c invis":
                 case "cast invis":
-                    Invis.StartInvis(playerData, room, commandOptions);
-                    break;
-                case "c weaken":
+                    Invis.StartInvis(playerData, room, commandOptions);
+                    break;
+                case "c weaken":
                 case "cast weaken":
-                    Weaken.StartWeaken(playerData, room, commandOptions);
-                    break;
-                case "c chill touch":
-                case "cast chill touch":
-                    ChillTouch.StartChillTouch(playerData, room, commandOptions);
-                    break;
-                case "c fly":
-                case "cast fly":
-                    Fly.StartFly(playerData, room, commandOptions);
-                    break;
-                case "c refresh":
-                case "cast refresh":
-                    Refresh.StartRefresh(playerData, room, commandOptions);
-                    break;
-                case "c faerie fire":
-                case "cast faerie fire":
-                    FaerieFire.StartFaerieFire(playerData, room, commandOptions);
-                    break;
-                case "c teleport":
-                case "cast teleport":
-                    Teleport.StartTeleport(playerData, room);
-                    break;
-                case "c blindness":
-                case "cast blindness":
-                    Blindness.StartBlind(playerData, room, commandOptions);
-                    break;
-                case "c haste":
-                case "cast haste":
-                    Haste.StartHaste(playerData, room, commandOptions);
-                    break;
-                case "c create spring":
-                case "cast create spring":
-                    CreateSpring.StartCreateSpring(playerData, room);
-                    break;
-                case "c shocking grasp":
+                    Weaken.StartWeaken(playerData, room, commandOptions);
+                    break;
+                case "c chill touch":
+                case "cast chill touch":
+                    ChillTouch.StartChillTouch(playerData, room, commandOptions);
+                    break;
+                case "c fly":
+                case "cast fly":
+                    Fly.StartFly(playerData, room, commandOptions);
+                    break;
+                case "c refresh":
+                case "cast refresh":
+                    Refresh.StartRefresh(playerData, room, commandOptions);
+                    break;
+                case "c faerie fire":
+                case "cast faerie fire":
+                    FaerieFire.StartFaerieFire(playerData, room, commandOptions);
+                    break;
+                case "c teleport":
+                case "cast teleport":
+                    Teleport.StartTeleport(playerData, room);
+                    break;
+                case "c blindness":
+                case "cast blindness":
+                    Blindness.StartBlind(playerData, room, commandOptions);
+                    break;
+                case "c haste":
+                case "cast haste":
+                    Haste.StartHaste(playerData, room, commandOptions);
+                    break;
+                case "c create spring":
+                case "cast create spring":
+                    CreateSpring.StartCreateSpring(playerData, room);
+                    break;
+                case "c shocking grasp":
                 case "cast shocking grasp":
-                    new ShockingGrasp().StartShockingGrasp(playerData, room, commandOptions);
-                    break;
-                case "c cause light":
+                    new ShockingGrasp().StartShockingGrasp(playerData, room, commandOptions);
+                    break;
+                case "c cause light":
                 case "cast cause light":
-                    new CauseLight().StartCauseLight(context, playerData, room, commandOptions);
-                    break;
-                case "c cure light":
+                    new CauseLight().StartCauseLight(context, playerData, room, commandOptions);
+                    break;
+                case "c cure light":
                 case "cast cure light":
-                    new CureLight().StartCureLight(context, playerData, room, commandOptions);
-                    break;
-                case "c detect invis":
+                    new CureLight().StartCureLight(context, playerData, room, commandOptions);
+                    break;
+                case "c detect invis":
                 case "cast detect invis":
-                    DetectInvis.DoDetectInvis(context, playerData, room);
-                    break;
-                case "forage":
-                    new Foraging().StartForaging(playerData, room);
-                    break;
-                case "fish":
-                case "angle":
-                case "line":
-                case "trawl":
-                case "lure":
-                    new Fishing().StartFishing(playerData, room);
-                    break;
-                case "reel":
-                    Fishing.GetFish(playerData, room);
-                    break;
-                case "dirt kick":
-                    new DirtKick().StartDirtKick(context, playerData, room, commandOptions);
-                    break;
+                    DetectInvis.DoDetectInvis(context, playerData, room);
+                    break;
+                case "forage":
+                    new Foraging().StartForaging(playerData, room);
+                    break;
+                case "fish":
+                case "angle":
+                case "line":
+                case "trawl":
+                case "lure":
+                    new Fishing().StartFishing(playerData, room);
+                    break;
+                case "reel":
+                    Fishing.GetFish(playerData, room);
+                    break;
+                case "dirt kick":
+                    new DirtKick().StartDirtKick(context, playerData, room, commandOptions);
+                    break;
                 case "bash":
-                    new Bash().StartBash(context, playerData, room, commandOptions);
-                    break;
+                    new Bash().StartBash(context, playerData, room, commandOptions);
+                    break;
                 case "shield bash":
-                    new ShieldBash().StartBash(context, playerData, room, commandOptions);
-                    break;
+                    new ShieldBash().StartBash(context, playerData, room, commandOptions);
+                    break;
                 case "punch":
                     Punch.StartPunch(playerData, room);
-                    break;
-                case "kick":
-                    new Kick().StartKick(context, playerData, room, commandOptions);
-                    break;
-                case "spin kick":
-                    new SpinKick().StartKick(context, playerData, room, commandOptions);
-                    break;
-                case "rescue":
-                    new Rescue().StartRescue(context, playerData, room, commandOptions);
-                    break;
-                case "lunge":
+                    break;
+                case "kick":
+                    new Kick().StartKick(context, playerData, room, commandOptions);
+                    break;
+                case "spin kick":
+                    new SpinKick().StartKick(context, playerData, room, commandOptions);
+                    break;
+                case "rescue":
+                    new Rescue().StartRescue(context, playerData, room, commandOptions);
+                    break;
+                case "lunge":
                     new Lunge().StartLunge(context, playerData, room, commandOptions);
-                    break;
-                case "disarm":
-                    new Disarm().StartDisarm(context, playerData, room);
-                    break;
-                case "backstab":
-                    new Backstab().StartBackstab(context, playerData, room, commandOptions);
-                    break;
-                case "feint":
-                    new Feint().StartFeint(context, playerData, room, commandOptions);
-                    break;
-                case "mount":
+                    break;
+                case "disarm":
+                    new Disarm().StartDisarm(context, playerData, room);
+                    break;
+                case "backstab":
+                    new Backstab().StartBackstab(context, playerData, room, commandOptions);
+                    break;
+                case "feint":
+                    new Feint().StartFeint(context, playerData, room, commandOptions);
+                    break;
+                case "mount":
                 case "ride":
-                    Mount.StartMount(playerData, room, commandOptions);
-                    break;
+                    Mount.StartMount(playerData, room, commandOptions);
+                    break;
                 case "dismount":
-                    Mount.Dismount(playerData, room, commandOptions);
-                    break;
-                case "trip":
-                    new Trip().StartTrip(context, playerData, room, commandOptions);
-                    break;
-                case "sneak":
-                    Sneak.DoSneak(context, playerData);
-                    break;
+                    Mount.Dismount(playerData, room, commandOptions);
+                    break;
+                case "trip":
+                    new Trip().StartTrip(context, playerData, room, commandOptions);
+                    break;
+                case "sneak":
+                    Sneak.DoSneak(context, playerData);
+                    break;
                 case "hide":
-                    Hide.DoHide(context, playerData);
-                    break;
+                    Hide.DoHide(context, playerData);
+                    break;
                 case "lore":
-                    Lore.DoLore(context, playerData, commandOptions);
-                    break;
+                    Lore.DoLore(context, playerData, commandOptions);
+                    break;
                 case "unlock":
-                    ManipulateObject.UnlockItem(room, playerData, commandOptions, commandKey);
-                    break;
+                    ManipulateObject.UnlockItem(room, playerData, commandOptions, commandKey);
+                    break;
                 case "lock":
-                    ManipulateObject.LockItem(room, playerData, commandOptions, commandKey);
-                    break;
-                case "close":
+                    ManipulateObject.LockItem(room, playerData, commandOptions, commandKey);
+                    break;
+                case "close":
                 case "shut":
-                    ManipulateObject.Close(room, playerData, commandOptions, commandKey);
-                    break;
+                    ManipulateObject.Close(room, playerData, commandOptions, commandKey);
+                    break;
                 case "drink":
-                    ManipulateObject.Drink(room, playerData, commandOptions, commandKey);
-                    break;
-                case "help":
-                case "/help":
-                case "?":
+                    ManipulateObject.Drink(room, playerData, commandOptions, commandKey);
+                    break;
+                case "help":
+                case "/help":
+                case "?":
                 case "commands":
-                    Help.ShowHelp(commandOptions, playerData);
-                    break;
-                case "time":
+                    Help.ShowHelp(commandOptions, playerData);
+                    break;
+                case "time":
                 case "clock":
-                    Update.Time.ShowTime();
-                    break;
-                case "skills":
-                case "spells":
+                    Update.Time.ShowTime();
+                    break;
+                case "skills":
+                case "spells":
                 case "skills all":
                     ShowSkills.ShowPlayerSkills(playerData, commandOptions);
-                    break;
+                    break;
                 case "practice":
-                    Trainer.Practice(playerData, room, commandOptions);
-                    break;
+                    Trainer.Practice(playerData, room, commandOptions);
+                    break;
                 case "list":
                     Shop.listItems(playerData, room);
-                    break;
+                    break;
                 case "buy":
-                    Shop.buyItems(playerData, room, commandOptions);
-                    break;
+                    Shop.buyItems(playerData, room, commandOptions);
+                    break;
                 case "sell":
-                    Shop.sellItems(playerData, room, commandOptions);
-                    break;
-                case "quest log":
+                    Shop.sellItems(playerData, room, commandOptions);
+                    break;
+                case "quest log":
                 case "qlog":
-                    Quest.QuestLog(playerData);
-                    break;
+                    Quest.QuestLog(playerData);
+                    break;
                 case "wake":
-                    Status.WakePlayer(context, playerData, room);
-                    break;
+                    Status.WakePlayer(context, playerData, room);
+                    break;
                 case "sleep":
                     Status.SleepPlayer(context, playerData, room);
-                    break;
-                case "rest":
+                    break;
+                case "rest":
                 case "sit":
-                    Status.RestPlayer(context, playerData, room);
-                    break;
+                    Status.RestPlayer(context, playerData, room);
+                    break;
                 case "stand":
-                    Status.StandPlayer(context, playerData, room);
-                    break;
+                    Status.StandPlayer(context, playerData, room);
+                    break;
                 case "greet":
-                    Greet.GreetMob(playerData, room, commandOptions);
-                    break;
+                    Greet.GreetMob(playerData, room, commandOptions);
+                    break;
                 case "who":
-                    Who.Connected(playerData);
+                    Who.Connected(playerData);
+                    break;
+                case "affects":
+                    Effect.Show(playerData);
+                    break;
+                case "follow":
+                    Follow.FollowThing(playerData, room, commandOptions);
+                    break;
+                case "nofollow":
+                    Follow.FollowThing(playerData, room, "noFollow");
+                    break;
+                case "quit":
+                    HubContext.Instance.Quit(playerData.HubGuid, room);
+                    break;
+                case "craft":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft);
+                    break;
+                case "chop":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Chop);
+                    break;
+                case "cook":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Cook);
+                    break;
+                case "brew":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Brew);
+                    break;
+                case "forge":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Forge);
+                    break;
+                case "carve":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Carve);
+                    break;
+                case "knit":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Knitting);
+                    break;
+                case "make":
+                case "build":
+                    Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft);
+                    break;
+                case "show crafts":
+                case "craftlist":
+                    Craft.CraftList(playerData);
+                    break;
+                case "set up camp":
+                    Camp.SetUpCamp(playerData, room);
+                    break;
+                case "repair":
+                    Events.Repair.RepairItem(playerData, room, commandOptions);
+                    break;
+                case "/debug":
+                    PlayerSetup.Player.DebugPlayer(playerData);
+                    break;
+                case "/setGold":
+                    PlayerSetup.Player.SetGold(playerData, commandOptions);
+                    break;
+                case "/setAc":
+                    PlayerSetup.Player.SetAC(playerData, commandOptions);
+                    break;
+                case "/map":
+                    SigmaMap.DrawMap(playerData.HubGuid); //not what you think it does
                     break;
                 default:
                     HubContext.Instance.SendToClient("Sorry you can't do that. Try help commands or ask on the discord channel.", playerData.HubGuid);
@@ -372,39 +431,6 @@
                     break;
             }

-
-
-
-
-
-            //    {"affects", () => Effect.Show(playerData)},
-            //    {"follow", () => Follow.FollowThing(playerData, room, commandOptions) },
-            //    {"nofollow", () => Follow.FollowThing(playerData, room, "noFollow") },
-            //    {"quit", () => HubContext.Instance.Quit(playerData.HubGuid, room)},
-            //    {"craft", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft)},
-            //    {"chop", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Chop)},
-            //    {"cook", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Cook)},
-            //    {"brew", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Brew)},
-            //    {"forge", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Forge)},
-            //    {"carve", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Carve)},
-            //    {"knit", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Knitting)},
-            //    {"make", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft)},
-            //    {"build", () => Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft)},
-            //    {"show crafts", () => Craft.CraftList(playerData)},
-            //    {"craftlist", () => Craft.CraftList(playerData)},
-            //    {"set up camp", () => Camp.SetUpCamp(playerData, room)},
-            //    {"repair", () => Events.Repair.RepairItem(playerData, room, commandOptions)},
-
-            //    //admin
-            //    {"/debug", () => PlayerSetup.Player.DebugPlayer(playerData) },
-            //    {"/setGold", () => PlayerSetup.Player.SetGold(playerData, commandOptions) },
-            //    {"/setAc", () => PlayerSetup.Player.SetAC(playerData, commandOptions) },
-            //    {"/godmode", () => SigmaMap.DrawMap(playerData.HubGuid) },
-            //    {"/map", () => SigmaMap.DrawMap(playerData.HubGuid) }
-            //};
-
-
-            //return commandList;
         }


Try to fix the CI build failure.

Try to fix the CI build failure.

--- CodeCakeBuilder/Build.cs
+++ CodeCakeBuilder/Build.cs
@@ -162,7 +162,7 @@
                 {
                     if (Cake.AppVeyor().IsRunningOnAppVeyor)
                     {
-                        foreach (var file in Cake.GetFiles(releasesDir.Path + "**/*"))
+                        foreach (var file in Cake.GetFiles(releasesDir.Path + "/**/*"))
                             Cake.AppVeyor().UploadArtifact(file.FullPath);
                     }
                     IEnumerable<FilePath> nugetPackages = Cake.GetFiles( releasesDir.Path + "/*.nupkg" );


rename i to column

rename i to column

--- MineField/MineSweeperTest.cs
+++ MineField/MineSweeperTest.cs
@@ -49,19 +49,19 @@
             var result = "";
             for (var line = 0; line < m_MineField.Length; ++line)
             {
-                for (var i = 0; i < m_MineField[line].Length; ++i)
+                for (var column = 0; column < m_MineField[line].Length; ++column)
                 {
                     var surroundingMines = 0;
-                    if (i > 0 && IsMine(line, i - 1))
+                    if (column > 0 && IsMine(line, column - 1))
                     {
                         surroundingMines++;
                     }
-                    if (i + 1 < m_MineField[line].Length && IsMine(line, i + 1))
+                    if (column + 1 < m_MineField[line].Length && IsMine(line, column + 1))
                     {
                         surroundingMines++;
                     }

-                    if (!IsMine(line, i))
+                    if (!IsMine(line, column))
                     {
                         result += surroundingMines;
                     }


test for issue from detoxhby

test for issue from detoxhby

--- Tests/Linq/UserTests/Issue447Tests.cs
+++ Tests/Linq/UserTests/Issue447Tests.cs
@@ -144,6 +144,29 @@
 			}
 		}

+		[Test, DataContextSource(ParallelScope = ParallelScope.None)]
+		public void TestLinq2DbComplexQueryWithParameters(string context)
+		{
+			var old = Configuration.Linq.UseBinaryAggregateExpression;
+			try
+			{
+				Configuration.Linq.UseBinaryAggregateExpression = true;
+
+				var value = true;
+
+				using (var db = GetDataContext(context))
+				{
+					var query = from p in db.Parent where p.ParentID > 2 && value && true && !false select p;
+
+					var res = query.ToList();
+				}
+			}
+			finally
+			{
+				Configuration.Linq.UseBinaryAggregateExpression = old;
+			}
+		}
+
 		public static Expression<Func<T, bool>> And<T>(Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
 		{
 			var invokedExpr = Expression.Invoke(expr2, expr1.Parameters);


Fix Ignore -> Ignored in Playground Person class

--- Tests/Playground.XamarinIOS/Person.cs
+++ Tests/Playground.XamarinIOS/Person.cs
@@ -14,11 +14,11 @@
         public string LastName { get; set; }

         // Ignored property
-        [Ignore]
+        [Ignored]
         public bool IsOnline { get; set; }

         // Composite property
-        [Ignore]
+        [Ignored]
         public string FullName
         {
             get { return FirstName + " " + LastName; }
@@ -36,7 +36,7 @@
         private string Email_ { get; set; }

         // Wrapped version of previous property
-        [Ignore]
+        [Ignored]
         public string Email
         {
             get { return Email_; }


Added TODOs

Added TODOs

--- Mod/GameSettings/Settings.cs
+++ Mod/GameSettings/Settings.cs
@@ -6,38 +6,38 @@
     public struct Settings
     {
         [JsonProperty("randomizeSkinParts")]
-        public bool Randomize;
+        public bool Randomize; // TODO: Move away

         [JsonProperty("humanSkin")]
-        public HumanSkin HumanSkin;
+        public HumanSkin HumanSkin; // TODO: Move away
         [JsonProperty("titanSkin")]
-        public TitanSkin TitanSkin;
+        public TitanSkin TitanSkin; // TODO: Move away
         [JsonProperty("forestSkin")]
-        public ForestSkin ForestSkin;
+        public ForestSkin ForestSkin; // TODO: Move away
         [JsonProperty("citySkin")]
-        public CitySkin CitySkin;
+        public CitySkin CitySkin; // TODO: Move away
         [JsonProperty("customMapSkin")]
-        public CustomMapSkin CustomSkin;
+        public CustomMapSkin CustomSkin; // TODO: Move away

         [JsonProperty("teamSort")]
-        public TeamSort TeamSort; // Unused
+        public TeamSort TeamSort;

         [JsonProperty("titans")]
-        public int Titans; // Unused
+        public int Titans;
         [JsonProperty("respawnTimer")]
-        public int RespawnTimer; // Unused
+        public int RespawnTimer;
         [JsonProperty("spawnTimer")]
-        public int SpawnTimer; // Unused
+        public int SpawnTimer;
         [JsonProperty("customMaxTitans")]
         public int CustomMaxTitans;

         [JsonProperty("snapshotMinDamage")]
-        public int SnapshotDamage;
+        public int SnapshotDamage; // TODO: Move away

         [JsonProperty("enableVSync")]
-        public bool EnableVSync;
+        public bool EnableVSync; // TODO: Move away
         [JsonProperty("fpsCap")]
-        public int FPSCap;
+        public int FPSCap; // TODO: Move away

         [JsonProperty("speedmeterType")]
         public Speedmeter SpeedmeterType;
@@ -66,7 +66,7 @@

         public bool SpawnMoreTitans => MoreTitansNumber > 0;
         [JsonProperty("additionalTitans")]
-        public int MoreTitansNumber; // Unused
+        public int MoreTitansNumber;

         public bool IsDamageMode => MinimumDamage > 0;
         [JsonProperty("minimumDamage")]
@@ -127,36 +127,36 @@
         public bool IsMapAllowed;

         [JsonProperty("enableChatFeed")]
-        public bool EnableChatFeed;
+        public bool EnableChatFeed; // TODO: Move away

-        public bool InSpectatorMode;
+        public bool InSpectatorMode; // TODO: Move away

         [JsonProperty("bombColor")]
-        public Color BombColor;
+        public Color BombColor; // TODO: Move away or Remove
         [JsonProperty("bombRadius")]
-        public int BombRadius;
+        public int BombRadius; // TODO: Move away or Remove
         [JsonProperty("bombRange")]
-        public int BombRange;
+        public int BombRange; // TODO: Move away or Remove
         [JsonProperty("bombSpeed")]
-        public int BombSpeed;
+        public int BombSpeed; // TODO: Move away or Remove
         [JsonProperty("bombCountdown")]
-        public int BombCountdown;
+        public int BombCountdown; // TODO: Move away or Remove

         [JsonProperty("allowCannonPKs")]
         public bool AllowCannonHumanKills;

         [JsonProperty("masterTextureLimit")]
-        public int MasterTextureLimit;
+        public int MasterTextureLimit; // TODO: Move away
         [JsonProperty("useMipmap")]
-        public bool UseMipmap;
+        public bool UseMipmap; // TODO: Move away

         [JsonProperty("volume")]
-        public float Volume;
+        public float Volume; // TODO: Move away
         [JsonProperty("cameraDistance")]
-        public float CameraDistance;
+        public float CameraDistance; // TODO: Move away
         [JsonProperty("mouseSensitivity")]
-        public float MouseSensitivity;
+        public float MouseSensitivity; // TODO: Move away
         [JsonProperty("gameQuality")]
-        public float GameQuality;
+        public float GameQuality; // TODO: Move away
     }
 }


EntryElement: make the entry look nicer on tvOS.

--- MonoTouch.Dialog/Elements.cs
+++ MonoTouch.Dialog/Elements.cs
@@ -1735,7 +1735,11 @@
 				// Add padding if right aligned
 				width -= 10;
 			}
+#if __TVOS__
+			var entryFrame = new CGRect (size.Width, yOffset, width, size.Height + 20 /* FIXME: figure out something better than adding a magic number */);
+#else
 			var entryFrame = new CGRect (size.Width, yOffset, width, size.Height);
+#endif

 			if (entry == null) {
 				entry = CreateTextField (entryFrame);


Add event DateSelected to the date picker

--- MonoTouch.Dialog/Elements.cs
+++ MonoTouch.Dialog/Elements.cs
@@ -1628,6 +1628,8 @@
 	public class DateTimeElement : StringElement {
 		public DateTime DateValue;
 		public UIDatePicker datePicker;
+		public event Action<DateTimeElement> DateSelected;
+
 		protected internal NSDateFormatter fmt = new NSDateFormatter () {
 			DateStyle = NSDateFormatterStyle.Short
 		};
@@ -1710,6 +1712,8 @@
 			{
 				base.ViewWillDisappear (animated);
 				container.DateValue = container.datePicker.Date;
+				if (container.DateSelected != null)
+					container.DateSelected (container);
 			}

 			public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)


add comment about stencil test.

add comment about stencil test.

--- CSharpGL/GLAPI/GL.BasicAPI.cs
+++ CSharpGL/GLAPI/GL.BasicAPI.cs
@@ -2058,7 +2058,7 @@

         /// <summary>
         /// This function sets the current stencil buffer function.
-        /// <para>Pass if (<paramref name="reference"/> & <paramref name="mask"/>) <paramref name="func"/> (stencil & <paramref name="mask"/>).</para>
+        /// <para>Pass stencil test if (<paramref name="reference"/> & <paramref name="mask"/>) <paramref name="func"/> (stencil & <paramref name="mask"/>).</para>
         /// </summary>
         /// <param name="func">The function type.</param>
         /// <param name="reference">The function reference.</param>
@@ -2078,6 +2078,8 @@

         /// <summary>
         /// This function sets the stencil buffer operation.
+        /// <para>Pipeline: ... - stencil test -> depth test -> ...</para>
+        /// <para>What to do if pass specified test.</para>
         /// </summary>
         /// <param name="fail">Stencil Test fail.</param>
         /// <param name="zfail">Stencil Test pass, but Depth Test fail.</param>


Added timers

Added timers

--- teethris.NET/Program.cs
+++ teethris.NET/Program.cs
@@ -25,25 +25,37 @@
         public static void Main()
         {
             hookId = SetHook(Proc);
+
+            var timer = new Timer();
+            timer.Interval = 10;
+            timer.Tick += TimerOnTick;
+            timer.Start();
+
             Application.Run();
+            Console.WriteLine("asf");
             UnhookWindowsHookEx(hookId);
+        }
+
+        private static void TimerOnTick(object sender, EventArgs eventArgs)
+        {
+            Console.WriteLine("sdag");
         }

         private static IntPtr SetHook(LowLevelKeyboardProc proc)
         {
             using (var curProcess = Process.GetCurrentProcess())
-            using (var curModule = curProcess.MainModule)
             {
-                return SetWindowsHookEx(WhKeyboardLl, proc,
-                    GetModuleHandle(curModule.ModuleName), 0);
+                using (var curModule = curProcess.MainModule)
+                {
+                    return SetWindowsHookEx(WhKeyboardLl, proc,
+                        GetModuleHandle(curModule.ModuleName), 0);
+                }
             }
         }

-        private delegate IntPtr LowLevelKeyboardProc(
-            int nCode, IntPtr wParam, IntPtr lParam);
+        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

-        private static IntPtr HookCallback(
-            int nCode, IntPtr wParam, IntPtr lParam)
+        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
         {
             if ((nCode >= 0) && (wParam == (IntPtr) WmKeydown))
             {


TENT-305 issue in length calculation that was called when it shouldnt have been.

--- Command/FfmpegCommand.cs
+++ Command/FfmpegCommand.cs
@@ -127,7 +127,7 @@
                             break;
                         case CommandReceiptType.Stream:
                             var filterchain = Objects.Filtergraph.FilterchainList.FirstOrDefault(f => f.GetReceipts().Any(r => r.Equals(receipt)));
-                            var filterchainOutput = filterchain.Outputs(this).FirstOrDefault(r => r.Resource.Map == receipt.Map);
+                            var filterchainOutput = filterchain.OutputList.FirstOrDefault(r => r.Resource.Map == receipt.Map);
                             resource = CommandResource.Create(filterchainOutput.Resource);
                             resource.Id = filterchainOutput.Id;
                             resource.Owner = this;


Fix output-path argument.

Fix output-path argument.

--- Commands/ParseCommand.cs
+++ Commands/ParseCommand.cs
@@ -55,7 +55,7 @@
             get {
                 return new NDesk.Options.OptionSet
                 {
-                    {"o", "output path",
+                    {"o|output=", "output path",
                         v => _outputPath = v },
                     {"v|volume=", "volume number",
                         (int v) => _volumeNum = v }


Got a the kinect to get the area percent function

recognizes five fingers, gets initial area, gets percent of that area
afterwards.

--- signtolearn/HandAreaTest/AreaGrab.cs
+++ signtolearn/HandAreaTest/AreaGrab.cs
@@ -14,7 +14,7 @@
 {

     class AreaGrab{
-
+        static float openHand = 1;
         static void Main(string[] args)
         {
             IDataSourceFactory dataSourceFactory = new SDKDataSourceFactory();
@@ -25,15 +25,60 @@

         }

-        static void handDataSource_NewDataAvailable(HandCollection data)
-        {
-            for (int index = 0; index < data.Count; index++)
-            {
+        static void handDataSource_NewDataAvailable(HandCollection data){
+
+
+            for (int index = 0; index < data.Count; index++){
                 var hand = data.Hands[index];
                 IList<Point> points = hand.Contour.Points;
-                Console.WriteLine(points[0].X + points[0].Y + points[0].Z);
+                if (hand.FingerCount == 5){
+                    openHand = initialHandArea(points);
+
+                }else{
+                    float per = handArea(points) / openHand;
+                    Console.WriteLine(per);
+                }
+            }
+        }
+        static float handArea(IList<Point> points){
+            float area = 0;
+            int j = points.Count - 1;
+            for (int i = 0; i < points.Count; i++){
+                area = area + (points[j].X + points[i].X) * (points[j].Y + points[i].Y);
+                j = i;
+            }
+            return area / 2;
+        }
+        static float initialHandArea(IList<Point> points)
+        {
+            Point minX = points[0], minY = points[0], maxX = points[0], maxY = points[0];
+            IList<Point> square = new List<Point>();

+            for (int i = 1; i < points.Count; i++)
+            {
+                if (points[i].X < maxX.X)
+                {
+                    maxX = points[i];
+                }
+                if (points[i].X > minX.X)
+                {
+                    minX = points[i];
+                }
+                if (points[i].Y < maxY.Y)
+                {
+                    maxY = points[i];
+                }
+                if (points[i].Y > minY.Y)
+                {
+                    minY = points[i];
+                }
             }
+            square.Add(maxX);
+            square.Add(maxY);
+            square.Add(minX);
+            square.Add(minY);
+
+            return handArea(square);
         }
     }
 }


Dispose queues after consumers

Dispose queues after consumers

Removing sleep and disposing queues after consumers,
I believe this should also solve original issue while saving time.

Will first Join with 1 second timeout and Abort if it failed.
Adding try catch for robustness.

--- Common/Util/ParallelRunner.cs
+++ Common/Util/ParallelRunner.cs
@@ -152,18 +152,28 @@
         {
             lock (_sync)
             {
-                if (_holdQueue != null) _holdQueue.Dispose();
-                if (_processQueue != null) _processQueue.Dispose();
-
-                // Wait for _holdQueue disposal be completed
-                Thread.Sleep(10000);
-
-                if (_processQueueThread != null && _processQueueThread.IsAlive) _processQueueThread.Abort();
+                if (_processQueueThread != null && _processQueueThread.IsAlive)
+                {
+                    try
+                    {
+                        if (!_processQueueThread.Join(TimeSpan.FromSeconds(1)))
+                        {
+                            _processQueueThread.Abort();
+                        }
+                    }
+                    catch (Exception err)
+                    {
+                        Log.Error(err);
+                    }
+                }

                 foreach (var worker in _workers)
                 {
                     worker.DisposeSafely();
                 }
+
+                if (_holdQueue != null) _holdQueue.Dispose();
+                if (_processQueue != null) _processQueue.Dispose();

                 if (_waitHandle != null)
                 {


Adds a Set overload so that Guid's can be easily set on the device.

--- Corale.Colore/Core/IDevice.cs
+++ Corale.Colore/Core/IDevice.cs
@@ -28,6 +28,8 @@
 // </copyright>
 // ---------------------------------------------------------------------------------------

+using System;
+
 namespace Corale.Colore.Core
 {
     /// <summary>
@@ -39,6 +41,12 @@
         /// Sets the color of all components on this device.
         /// </summary>
         /// <param name="color">Color to set.</param>
-        void SetAll(Color color);
+        void Set(Color color);
+
+        /// <summary>
+        /// Updates the device to use the effect pointed to by the specified GUID.
+        /// </summary>
+        /// <param name="guid">Guid to set.</param>
+        void Set(Guid guid);
     }
 }


Update the Result struct.

Update the Result struct.

Add documentation comments.
Remove IComparable inheritance, does not make sense to numerically compare
results.

--- Corale.Colore/Razer/Result.cs
+++ Corale.Colore/Razer/Result.cs
@@ -1,29 +1,29 @@
 // ---------------------------------------------------------------------------------------
 // <copyright file="Result.cs" company="Corale">
 //     Copyright © 2015 by Adam Hellberg and Brandon Scott.
-//
+//
 //     Permission is hereby granted, free of charge, to any person obtaining a copy of
 //     this software and associated documentation files (the "Software"), to deal in
 //     the Software without restriction, including without limitation the rights to
 //     use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 //     of the Software, and to permit persons to whom the Software is furnished to do
 //     so, subject to the following conditions:
-//
+//
 //     The above copyright notice and this permission notice shall be included in all
 //     copies or substantial portions of the Software.
-//
+//
 //     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 //     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 //     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 //     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 //     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 //     CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
+//
 //     Disclaimer: Corale and/or Colore is in no way affiliated with Razer and/or any
 //     of its employees and/or licensors. Corale, Adam Hellberg, and/or Brandon Scott
 //     do not take responsibility for any harm caused, direct or indirect, to any
 //     Razer peripherals via the use of Colore.
-//
+//
 //     "Razer" is a trademark of Razer USA Ltd.
 // </copyright>
 // ---------------------------------------------------------------------------------------
@@ -35,40 +35,79 @@
     using System.Linq;
     using System.Reflection;

-    // RZRESULT is a typedef of LONG on C-side. LONG is always 32-bit in WinC.
-    // TODO: Finish implementing overloads.
-    public struct Result : IComparable<int>, IComparable<Result>, IEquatable<int>, IEquatable<Result>
+    /// <summary>
+    /// Struct for containing the result of running a native Chroma SDK function.
+    /// </summary>
+    /// <remarks>
+    /// <c>RZRESULT</c> is a <c>typedef</c> of <c>LONG</c> on C-side. <c>LONG</c> is always 32-bit in WinAPI.
+    /// This means we don't need to have architecture-dependent base type,
+    /// like with the <see cref="Corale.Colore.Core.Size" /> struct.
+    /// </remarks>
+    public struct Result : IEquatable<int>, IEquatable<Result>
     {
+        /// <summary>
+        /// Access denied.
+        /// </summary>
         [Description("Access denied.")]
         public static readonly Result RzAccessDenied = 5;

         // TODO: Here be dragons?
+        /// <summary>
+        /// Generic fail error.
+        /// </summary>
         [Description("General failure.")]
         public static readonly Result RzFailed = unchecked((int)2147500037);

+        /// <summary>
+        /// Invalid error.
+        /// </summary>
         [Description("Invalid.")]
         public static readonly Result RzInvalid = -1;

+        /// <summary>
+        /// Invalid parameter passed to function.
+        /// </summary>
         [Description("Invalid parameter.")]
         public static readonly Result RzInvalidParameter = 87;

+        /// <summary>
+        /// The requested operation is not supported.
+        /// </summary>
         [Description("Not supported.")]
         public static readonly Result RzNotSupported = 50;

+        /// <summary>
+        /// The request was aborted.
+        /// </summary>
         [Description("Request aborted.")]
         public static readonly Result RzRequestAborted = 1235;

+        /// <summary>
+        /// Resource not available or disabled.
+        /// </summary>
         [Description("Resource not available or disabled.")]
         public static readonly Result RzResourceDisabled = 4309;

+        /// <summary>
+        /// Cannot start more than one instance of the specified program.
+        /// </summary>
         [Description("Cannot start more than one instance of the specified program.")]
         public static readonly Result RzSingleInstanceApp = 1152;

+        /// <summary>
+        /// Returned when a function is successful.
+        /// </summary>
         [Description("Success.")]
         public static readonly Result RzSuccess = 0;

+        /// <summary>
+        /// Dictionary used to cache the metadata of the pre-defined error values.
+        /// </summary>
         private static readonly IDictionary<Result, Metadata> FieldMetadata;

+        /// <summary>
+        /// Internal result value.
+        /// </summary>
         private readonly int _value;

         static Result()
@@ -76,11 +115,18 @@
             FieldMetadata = GetMetadata();
         }

+        /// <summary>
+        /// Initializes a new instance of the <see cref="Result" /> struct.
+        /// </summary>
+        /// <param name="value">Value to store.</param>
         public Result(int value)
         {
             _value = value;
         }

+        /// <summary>
+        /// Gets the help description for the current error value.
+        /// </summary>
         public string Description
         {
             get
@@ -89,6 +135,9 @@
             }
         }

+        /// <summary>
+        /// Gets a value indicating whether the result means failure.
+        /// </summary>
         public bool Failed
         {
             get
@@ -97,6 +146,9 @@
             }
         }

+        /// <summary>
+        /// Gets the name of the error as defined in source code.
+        /// </summary>
         public string Name
         {
             get
@@ -105,6 +157,9 @@
             }
         }

+        /// <summary>
+        /// Gets a value indicating whether the result was a success.
+        /// </summary>
         public bool Success
         {
             get
@@ -113,101 +168,112 @@
             }
         }

+        /// <summary>
+        /// Indicates whether an instance of the <see cref="Result" /> struct is
+        /// equal to another object.
+        /// </summary>
+        /// <param name="left">Left operand, an instance of the <see cref="Result" /> struct.</param>
+        /// <param name="right">Right operand, an object to compare with.</param>
+        /// <returns><c>true</c> if the two objects are equal, otherwise <c>false</c>.</returns>
         public static bool operator ==(Result left, object right)
         {
             return left.Equals(right);
         }

+        /// <summary>
+        /// Converts a <see cref="Result" /> object to <c>false</c>.
+        /// </summary>
+        /// <param name="result"><see cref="Result" /> object to convert.</param>
+        /// <returns>
+        /// <c>false</c> if the <see cref="Result" /> object represents a boolean <c>false</c> value,
+        /// otherwise <c>true</c>.
+        /// </returns>
         public static bool operator false(Result result)
         {
             return !result;
         }

-        public static bool operator >(Result left, Result right)
-        {
-            return left.CompareTo(right) > 0;
-        }
-
-        public static bool operator >(Result left, int right)
-        {
-            return left.CompareTo(right) > 0;
-        }
-
-        public static bool operator >=(Result left, Result right)
-        {
-            return left.CompareTo(right) >= 0;
-        }
-
-        public static bool operator >=(Result left, int right)
-        {
-            return left.CompareTo(right) >= 0;
-        }
-
+        /// <summary>
+        /// Converts a <see cref="Result" /> struct to its integer equivalent.
+        /// </summary>
+        /// <param name="result">An instance of the <see cref="Result" /> to convert.</param>
+        /// <returns>The integer equivalent of the <paramref name="result" />.</returns>
         public static implicit operator int(Result result)
         {
             return result._value;
         }

-        public static implicit operator Result(int l)
-        {
-            return new Result(l);
-        }
-
+        /// <summary>
+        /// Converts an integer value to its equivalent <see cref="Result" /> object.
+        /// </summary>
+        /// <param name="value">The value to convert.</param>
+        /// <returns>The <see cref="Result" /> equivalent of the <paramref name="value" />.</returns>
+        public static implicit operator Result(int value)
+        {
+            return new Result(value);
+        }
+
+        /// <summary>
+        /// Converts an instace of the <see cref="Result" /> struct to its boolean equivalent.
+        /// </summary>
+        /// <param name="result">The <see cref="Result" /> to convert.</param>
+        /// <returns>
+        /// <c>true</c> if the <paramref name="result" /> represents a <c>true</c> value (success),
+        /// otherwise <c>false</c> (failure).
+        /// </returns>
         public static implicit operator bool(Result result)
         {
             return result == RzSuccess;
         }

+        /// <summary>
+        /// Indicates whether an instance of the <see cref="Result" /> struct and
+        /// another object are not equal.
+        /// </summary>
+        /// <param name="left">Left operand, an instance of the <see cref="Result" /> struct.</param>
+        /// <param name="right">Right operand, an object to compare to.</param>
+        /// <returns><c>true</c> if the two objects are not equal, otherwise <c>false</c>.</returns>
         public static bool operator !=(Result left, object right)
         {
             return !left.Equals(right);
         }

-        public static bool operator <(Result left, Result right)
-        {
-            return left.CompareTo(right) < 0;
-        }
-
-        public static bool operator <(Result left, int right)
-        {
-            return left.CompareTo(right) < 0;
-        }
-
-        public static bool operator <=(Result left, Result right)
-        {
-            return left.CompareTo(right) <= 0;
-        }
-
-        public static bool operator <=(Result left, int right)
-        {
-            return left.CompareTo(right) <= 0;
-        }
-
+        /// <summary>
+        /// Converts a <see cref="Result" /> object to a boolean <c>true</c> value.
+        /// </summary>
+        /// <param name="result">Object to convert.</param>
+        /// <returns><c>true</c> if the object represents a boolean <c>true</c> value, <c>false</c> otherwise.</returns>
         public static bool operator true(Result result)
         {
             return result;
         }

-        public int CompareTo(int other)
-        {
-            return _value.CompareTo(other);
-        }
-
-        public int CompareTo(Result other)
-        {
-            return CompareTo(other._value);
-        }
-
         public bool Equals(int other)
         {
             return _value.Equals(other);
         }

+        /// <summary>
+        /// Indicates whether the current object is equal to another object of the same type.
+        /// </summary>
+        /// <param name="other">An object to compare with this object.</param>
+        /// <returns>
+        /// <c>true</c> if the current object is equal to the <paramref name="other"/> parameter; otherwise, <c>false</c>.
+        /// </returns>
         public bool Equals(Result other)
         {
             return Equals(other._value);
         }

+        /// <summary>
+        /// Indicates whether this instance and a specified object are equal.
+        /// </summary>
+        /// <param name="obj">Another object to compare to. </param>
+        /// <returns>
+        /// <c>true</c> if <paramref name="obj"/> and this instance are the same type
+        /// and represent the same value; otherwise, <c>false</c>.
+        /// </returns>
+        /// <filterpriority>2</filterpriority>
         public override bool Equals(object obj)
         {
             if (ReferenceEquals(null, obj))
@@ -222,16 +288,35 @@
             return false;
         }

+        /// <summary>
+        /// Returns the hash code for this instance.
+        /// </summary>
+        /// <returns>
+        /// A 32-bit signed integer that is the hash code for this instance.
+        /// </returns>
+        /// <filterpriority>2</filterpriority>
         public override int GetHashCode()
         {
             return _value;
         }

+        /// <summary>
+        /// Returns a string representation of the result.
+        /// </summary>
+        /// <returns>
+        /// A <see cref="T:System.String"/> containing a string representation
+        /// of the result complete with name, description, and numeric value.
+        /// </returns>
+        /// <filterpriority>2</filterpriority>
         public override string ToString()
         {
             return string.Format("{0}: {1} ({2})", Name, Description, _value);
         }

+        /// <summary>
+        /// Retrieves field metadata and returns it as a dictionary.
+        /// </summary>
+        /// <returns>Field metadata.</returns>
         private static Dictionary<Result, Metadata> GetMetadata()
         {
             var cache = new Dictionary<Result, Metadata>();
@@ -249,19 +334,36 @@
             return cache;
         }

+        /// <summary>
+        /// Contains metadata for a specific result in the <see cref="Result" /> struct.
+        /// </summary>
         private struct Metadata
         {
+            /// <summary>
+            /// Description of the result.
+            /// </summary>
             private readonly string _description;

+            /// <summary>
+            /// Name of the result (name of the field).
+            /// </summary>
             private readonly string _name;

-            public Metadata(string name, string description)
+            /// <summary>
+            /// Initializes a new instance of the <see cref="Metadata" /> struct.
+            /// </summary>
+            /// <param name="name">Result name.</param>
+            /// <param name="description">Result description.</param>
+            internal Metadata(string name, string description)
             {
                 _name = name;
                 _description = description;
             }

-            public string Description
+            /// <summary>
+            /// Human-readable description for the result.
+            /// </summary>
+            internal string Description
             {
                 get
                 {
@@ -269,7 +371,10 @@
                 }
             }

-            public string Name
+            /// <summary>
+            /// The name of the result.
+            /// </summary>
+            internal string Name
             {
                 get
                 {
@@ -279,16 +384,26 @@
         }

         [AttributeUsage(AttributeTargets.Field)]
-        private class DescriptionAttribute : Attribute
-        {
+        private sealed class DescriptionAttribute : Attribute
+        {
+            /// <summary>
+            /// The description of the associated field.
+            /// </summary>
             private readonly string _description;

-            public DescriptionAttribute(string description)
+            /// <summary>
+            /// Initializes a new instance of the <see cref="DescriptionAttribute" /> class.
+            /// </summary>
+            /// <param name="description">Description to set.</param>
+            internal DescriptionAttribute(string description)
             {
                 _description = description;
             }

-            public string Description
+            /// <summary>
+            /// Human-readable description of the result.
+            /// </summary>
+            internal string Description
             {
                 get
                 {


Remove PaintTIle.cs

Remove PaintTIle.cs

--- Core/PluginHooks/PaintTIle.cs
+++ Core/PluginHooks/PaintTIle.cs
@@ -1,21 +0,0 @@
-using OTA.Plugin;
-
-namespace TDSM.Core.Plugin.Hooks
-{
-    public static partial class TDSMHookArgs
-    {
-        public struct PaintTile
-        {
-            public int X { get; set; }
-
-            public int Y { get; set; }
-
-            public byte Colour { get; set; }
-        }
-    }
-
-    public static partial class TDSMHookPoints
-    {
-        public static readonly HookPoint<TDSMHookArgs.PaintTile> PaintTile = new HookPoint<TDSMHookArgs.PaintTile>();
-    }
-}


Stack traces are now logged when exceptions are raised from inside scripts.

--- CorePlugin/ScriptComponent.cs
+++ CorePlugin/ScriptComponent.cs
@@ -224,7 +224,7 @@
 			}
 			catch (Exception e)
 			{
-				Log.Game.WriteError("An error occurred while executing script {0} on '{1}':{2}", methodName, Script.Name, e.Message);
+				LogException(methodName, e);
 			}
 		}

@@ -236,7 +236,7 @@
 			}
 			catch (Exception e)
 			{
-				Log.Game.WriteError("An error occurred while executing script {0} on '{1}':{2}", methodName, Script.Name, e.Message);
+				LogException(methodName, e);
 			}
 		}

@@ -248,8 +248,13 @@
 			}
 			catch (Exception e)
 			{
-				Log.Game.WriteError("An error occurred while executing script {0} on '{1}':{2}", methodName, Script.Name, e.Message);
-			}
+				LogException(methodName, e);
+			}
+		}
+
+		private void LogException(string methodName, Exception e)
+		{
+			Log.Game.WriteError("An error occurred while executing script {0} on '{1}':{2}\nCallStack:\n{3}", methodName, Script.Name, e.Message, e.StackTrace);
 		}

 		private void SetScriptPropertyValues()


add class Id 	modified:   Dragon/Source/Node.cs

--- Dragon/Source/Node.cs
+++ Dragon/Source/Node.cs
@@ -94,4 +94,15 @@
             return this.Op.ToString();
         }
     }
+
+
+    public class Id : Expr
+    {
+        public int Offset { get; set; }
+        public Id(Word id, Dragon.Type type, int offset)
+            : base(id, type)
+        {
+            this.Offset = offset;
+        }
+    }
 }


BugFixes #FIX: Fixed a bug introduced by the previous commit's botched attempt at stopping game objects from activating when they're not part of the current scene.

--- Duality/GameObject.cs
+++ Duality/GameObject.cs
@@ -117,22 +117,25 @@
 			get { return this.active && this.initState.IsActive(); }
 			set
 			{
-				if (this.active != value && this.scene != null && this.scene.IsCurrent)
-				{
-					if (value)
+				if (this.active != value)
+				{
+					if (this.scene != null && this.scene.IsCurrent)
 					{
-						this.OnActivate();
-						foreach (GameObject child in this.ChildrenDeep)
+						if (value)
 						{
-							if (!child.Active) child.OnActivate();
+							this.OnActivate();
+							foreach (GameObject child in this.ChildrenDeep)
+							{
+								if (!child.Active) child.OnActivate();
+							}
 						}
-					}
-					else
-					{
-						this.OnDeactivate();
-						foreach (GameObject child in this.ChildrenDeep)
+						else
 						{
-							if (child.Active) child.OnDeactivate();
+							this.OnDeactivate();
+							foreach (GameObject child in this.ChildrenDeep)
+							{
+								if (child.Active) child.OnDeactivate();
+							}
 						}
 					}


Converted all public fields into public properties

git-svn-id: 95472bb50cfb75dbf91fed26dc933cae36d5c45c@62 1ca100b6-b014-4248-a4f8-5dbb9f49130a

--- DDay.iCal/Components/Alarm.cs
+++ DDay.iCal/Components/Alarm.cs
@@ -16,28 +16,16 @@
     {
         #region Private Fields

-        private List<AlarmOccurrence> m_Occurrences;
-
-        #endregion
-
-        #region Public Fields
-
-        [SerializedAttribute]
-        public AlarmAction Action;
-        [SerializedAttribute]
-        public Binary Attach;
-        [SerializedAttribute]
-        public Cal_Address[] Attendee;
-        [SerializedAttribute]
-        public Text Description;
-        [SerializedAttribute, DefaultValue("P")]
-        public Duration Duration;
-        [SerializedAttribute]
-        public Integer Repeat;
-        [SerializedAttribute]
-        public Text Summary;
-        [SerializedAttribute]
-        public Trigger Trigger;
+        private List<AlarmOccurrence> m_Occurrences;
+
+        private AlarmAction m_Action;
+        private Binary m_Attach;
+        private Cal_Address[] m_Attendee;
+        private Text m_Description;
+        private Duration m_Duration;
+        private Integer m_Repeat;
+        private Text m_Summary;
+        private Trigger m_Trigger;

         #endregion

@@ -47,6 +35,62 @@
         {
             get { return m_Occurrences; }
             set { m_Occurrences = value; }
+        }
+
+        [Serialized]
+        public AlarmAction Action
+        {
+            get { return m_Action; }
+            set { m_Action = value; }
+        }
+
+        [Serialized]
+        public Binary Attach
+        {
+            get { return m_Attach; }
+            set { m_Attach = value; }
+        }
+
+        [Serialized]
+        public Cal_Address[] Attendee
+        {
+            get { return m_Attendee; }
+            set { m_Attendee = value; }
+        }
+
+        [Serialized]
+        public Text Description
+        {
+            get { return m_Description; }
+            set { m_Description = value; }
+        }
+
+        [Serialized, DefaultValue("P")]
+        public Duration Duration
+        {
+            get { return m_Duration; }
+            set { m_Duration = value; }
+        }
+
+        [Serialized]
+        public Integer Repeat
+        {
+            get { return m_Repeat; }
+            set { m_Repeat = value; }
+        }
+
+        [Serialized]
+        public Text Summary
+        {
+            get { return m_Summary; }
+            set { m_Summary = value; }
+        }
+
+        [Serialized]
+        public Trigger Trigger
+        {
+            get { return m_Trigger; }
+            set { m_Trigger = value; }
         }

         #endregion


switch node when EtcdRaftException occurs

--- EtcdNet/EtcdClient.cs
+++ EtcdNet/EtcdClient.cs
@@ -168,6 +168,14 @@
                         }
                     }
                 }
+                catch(EtcdRaftException)
+                {
+                    currentClient = currentClient.Next;
+                    if (currentClient != startClient)
+                        continue; // try the next
+                    else
+                        throw; // tried all clients, all failed
+                }
                 catch(EtcdGenericException)
                 {
                     throw;


Fix missed method from previous pass

Fix missed method from previous pass

--- osu.Framework/Platform/SDL2DesktopWindow_Windowing.cs
+++ osu.Framework/Platform/SDL2DesktopWindow_Windowing.cs
@@ -548,7 +548,7 @@
                     SDL.SDL_SetWindowSize(SDLWindowHandle, sizeWindowed.Value.Width, sizeWindowed.Value.Height);
                     SDL.SDL_SetWindowResizable(SDLWindowHandle, Resizable ? SDL.SDL_bool.SDL_TRUE : SDL.SDL_bool.SDL_FALSE);

-                    readWindowPositionFromConfig();
+                    readWindowPositionFromConfig(display);
                     break;

                 case WindowState.Fullscreen:
@@ -619,14 +619,14 @@
                 windowMaximised = this.windowState == WindowState.Maximised;
         }

-        private void readWindowPositionFromConfig()
+        private void readWindowPositionFromConfig(Display display)
         {
             if (WindowState != WindowState.Normal)
                 return;

             var configPosition = new Vector2((float)windowPositionX.Value, (float)windowPositionY.Value);

-            var displayBounds = CurrentDisplay.Bounds;
+            var displayBounds = display.Bounds;
             var windowSize = sizeWindowed.Value;
             int windowX = (int)Math.Round((displayBounds.Width - windowSize.Width) * configPosition.X);
             int windowY = (int)Math.Round((displayBounds.Height - windowSize.Height) * configPosition.Y);


Default console application example

Default console application example

--- Examplinvi/Program.cs
+++ Examplinvi/Program.cs
@@ -36,38 +36,12 @@
         {
             Auth.SetUserCredentials("CONSUMER_KEY", "CONSUMER_SECRET", "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET");

-
             TweetinviEvents.QueryBeforeExecute += (sender, args) =>
             {
                 Console.WriteLine(args.QueryURL);
             };

-            var stream = Stream.CreateSampleStream();
-
-            stream.AddTweetLanguageFilter(LanguageFilter.French);
-
-            stream.TweetReceived += (sender, args) =>
-            {
-                Console.WriteLine(args.Tweet);
-            };
-
-            Examples.Search_SimpleTweetSearch();
-            Examples.Search_SearchTweet();
-            Examples.Search_SearchWithMetadata();
-            Examples.Search_FilteredSearch();
-            Examples.Search_SearchUsers();
-
-            Examples.Timeline_GetUserTimeline(Examples.USER_SCREEN_NAME_TO_TEST);
-
-            Console.ReadKey();
-            Console.Clear();
-
-            //Examples.Stream_SampleStreamExample();
-
-
-            /* Temp samples to verify the library working*/
-
-            var fs = Stream.CreateUserStream();
+            var authenticatedUser = User.GetAuthenticatedUser();

             GenerateCredentialExamples();
             UserLiveFeedExamples();


Fix test failing

Fix test failing

--- osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
+++ osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
@@ -53,7 +53,7 @@
         private void checkNextHitObject(string skin) =>
             AddUntilStep($"check skin from {skin}", () =>
             {
-                var firstObject = ((TestPlayer)Player).DrawableRuleset.Playfield.AllHitObjects.OfType<DrawableHitCircle>().FirstOrDefault();
+                var firstObject = ((TestPlayer)Player).DrawableRuleset.Playfield.HitObjectContainer.AliveObjects.OfType<DrawableHitCircle>().FirstOrDefault();

                 if (firstObject == null)
                     return false;


add many scenario of main page layout

add many scenario of main page layout

--- osu.Game.Tests/Visual/Online/TestSceneWikiMainPage.cs
+++ osu.Game.Tests/Visual/Online/TestSceneWikiMainPage.cs
@@ -1,6 +1,7 @@
 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
 // See the LICENCE file in the repository root for full licence text.

+using NUnit.Framework;
 using osu.Framework.Allocation;
 using osu.Framework.Graphics;
 using osu.Framework.Graphics.Containers;
@@ -15,7 +16,10 @@
         [Cached]
         private readonly OverlayColourProvider overlayColour = new OverlayColourProvider(OverlayColourScheme.Orange);

-        public TestSceneWikiMainPage()
+        private BasicScrollContainer container;
+
+        [SetUp]
+        public void Setup() => Schedule(() =>
         {
             Children = new Drawable[]
             {
@@ -24,20 +28,103 @@
                     Colour = overlayColour.Background5,
                     RelativeSizeAxes = Axes.Both,
                 },
-                new BasicScrollContainer
+                container = new BasicScrollContainer
                 {
                     RelativeSizeAxes = Axes.Both,
                     Padding = new MarginPadding(20),
-                    Child = new WikiMainPage
-                    {
-                        Markdown = main_page_markdown
-                    }
                 }
             };
+        });
+
+        [Test]
+        public void TestWikiMainPage()
+        {
+            AddStep("Show main page", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = main_page_markdown,
+                };
+            });
+        }
+
+        [Test]
+        public void TestNonFullWidthLayout()
+        {
+            AddStep("Show Layout", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = non_full_width,
+                };
+            });
+        }
+
+        [Test]
+        public void TestFullWidthAtTheEnd()
+        {
+            AddStep("Show layout", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = full_width_end,
+                };
+            });
+        }
+
+        [Test]
+        public void TestFullWidthAtTheStartAndEnd()
+        {
+            AddStep("Show layout", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = full_width_start_end,
+                };
+            });
+        }
+
+        [Test]
+        public void TestFullWidthInTheMiddle()
+        {
+            AddStep("Show layout", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = full_width_in_the_middle,
+                };
+            });
+        }
+
+        [Test]
+        public void TestFullWidthStacking()
+        {
+            AddStep("Show layout", () =>
+            {
+                container.Child = new WikiMainPage
+                {
+                    Markdown = full_width_stack,
+                };
+            });
         }

         // From https://osu.ppy.sh/api/v2/wiki/en/Main_Page
         private const string main_page_markdown =
             "---\nlayout: main_page\n---\n\n\n\n
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
+
+        private const string non_full_width =
+            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
+
+        private const string full_width_end =
+            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n";
+
+        private const string full_width_start_end =
+            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n";
+
+        private const string full_width_in_the_middle =
+            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
+
+        private const string full_width_stack=
+            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
     }
 }


If all processes terminated, it cannot be a deadlock

--- FBPLib/Lib/Network.cs
+++ FBPLib/Lib/Network.cs
@@ -810,6 +810,7 @@

         bool ListCompStatus(List<String> msgs)
         {
+            bool terminated = true;
             lock (this)
             {
                 foreach (Component comp in _components.Values)
@@ -827,6 +828,8 @@
                             return false;
                         }

+                        if (comp.Status != States.Terminated)
+                            terminated = false;
                         string st = Enum.GetName(typeof(States), comp._status);
                         st = (st + "            ").Substring(0, 13);
                         msgs.Add(String.Format("--- {1}     {0}", Name + "." + comp.Name, st));
@@ -834,7 +837,7 @@
                 }

-                return true;
+                return !terminated;
             }
         }
         // called by WaitForAll method