+ set { mCoordinates = value; }\r
+ }\r
+\r
+ public char Identifier\r
+ {\r
+ get { return mId; }\r
+ }\r
+\r
+ public Game Game\r
+ {\r
+ get { return mGame; }\r
+ }\r
+\r
+ #endregion\r
+\r
+\r
+ #region Private Types\r
+\r
+ /// <summary>\r
+ /// The script bindings.\r
+ /// </summary>\r
+ class Functions\r
+ {\r
+ // Always evaluates to true.\r
+ public bool True(Player player, string[] args)\r
+ {\r
+ return true;\r
+ }\r
+\r
+ // Always evaluates to false.\r
+ public bool False(Player player, string[] args)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ // Check the player's inventory for an entity.\r
+ // Arg1: Entity identifier.\r
+ public bool Has(Player player, string[] args)\r
+ {\r
+ if (args.Length == 0) return false;\r
+\r
+ char? entity = Parse.Char(args[0]);\r
+ if (entity != null)\r
+ {\r
+ foreach (IEntity item in player.Inventory)\r
+ {\r
+ if (entity == item.Identifier) return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Put the trigger in the player's inventory.\r
+ public bool PickUp(Player player, string[] args)\r
+ {\r
+ IEntity entity = mGame.RemoveEntity(mTrigger);\r
+ if (entity != null)\r
+ {\r
+ player.Inventory.Add(entity);\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Drop an entity from the player's inventory here.\r
+ // Arg1: Entity identifier.\r
+ public bool Drop(Player player, string[] args)\r
+ {\r
+ if (args.Length == 0) return false;\r
+\r
+ char? entity = Parse.Char(args[0]);\r
+ if (entity != null)\r
+ {\r
+ foreach (IEntity item in player.Inventory)\r
+ {\r
+ if (entity == item.Identifier)\r
+ {\r
+ player.Inventory.Remove(item);\r
+ mGame.State.Entities.Add(item);\r
+ item.Coordinates = mTrigger.Coordinates;\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Use an entity in the player's inventory, disposing it.\r
+ // Arg1: Entity identifier.\r
+ public bool Use(Player player, string[] args)\r
+ {\r
+ if (args.Length == 0) return false;\r
+\r
+ char? entity = Parse.Char(args[0]);\r
+ if (entity != null)\r
+ {\r
+ foreach (IEntity item in player.Inventory)\r
+ {\r
+ if (entity == item.Identifier)\r
+ {\r
+ player.Inventory.Remove(item);\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Wait for a ceretain number of ticks.\r
+ // Arg1: Number of ticks.\r
+ public bool Wait(Player player, string[] args)\r
+ {\r
+ if (args.Length == 0) return false;\r
+\r
+ if (mTicks == 0)\r
+ {\r
+ int? timer = Parse.Integer(args[0]);\r
+ if (timer != null)\r
+ {\r
+ mTicks = 1;\r
+ mTimerTicks = timer.Value;\r
+ }\r
+ }\r
+ else if (++mTicks >= mTimerTicks)\r
+ {\r
+ mTicks = 0;\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Print each argument to the console as a string.\r
+ public bool Print(Player player, string[] args)\r
+ {\r
+ foreach (string arg in args)\r
+ {\r
+ string line = Parse.String(arg);\r
+ if (line != null) Console.WriteLine(line);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ // Change a cell's tile on the map.\r
+ // Arg1: The coordinates.\r
+ // Arg2: The character representing the tile.\r
+ public bool Set(Player player, string[] args)\r
+ {\r
+ if (args.Length < 2) return false;\r
+\r
+ Point? coord = Parse.Coordinates(args[0]);\r
+ if (coord != null)\r
+ {\r
+ char? tile = Parse.Char(args[1]);\r
+ if (tile != null)\r
+ {\r
+ mGame.State.Map.SetCell(coord.Value, tile.Value);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Move on to the next level.\r
+ public bool Next(Player player, string[] args)\r
+ {\r
+ mGame.AdvanceLevel();\r
+ return true;\r
+ }\r
+\r
+ // Restart the current level.\r
+ public bool Reset(Player player, string[] args)\r
+ {\r
+ mGame.Reset();\r
+ return true;\r
+ }\r
+\r
+\r
+ public Functions(IEntity trigger, Game game)\r
+ {\r
+ mTrigger = trigger;\r
+ mGame = game;\r
+ }\r
+\r
+ IEntity mTrigger;\r
+ Game mGame;\r
+ int mTicks;\r
+ int mTimerTicks;\r