]> Dogcows Code - chaz/carfire/blobdiff - CarFire/CarFire/CarFire/Map.cs
Implemented map tiles; started new Key entity; added missing variables to Melee.cs...
[chaz/carfire] / CarFire / CarFire / CarFire / Map.cs
index 8c744bad3e8a96962288d966ea47c991911d099a..197099436bdb18d86a01c9aaec742801ad278bb5 100644 (file)
@@ -19,33 +19,6 @@ namespace CarFire
     /// </summary>\r
     public class Map\r
     {\r
-        // DEBUG: Tilesets not implemented at all.\r
-        public static Texture2D DefaultTile;\r
-\r
-        #region Public Exceptions\r
-\r
-        /// <summary>\r
-        /// This exception is thrown during the loading of a map if any\r
-        /// part of the map file is inconsistent with the expected format\r
-        /// and order.\r
-        /// </summary>\r
-        public class RuntimeException : System.ApplicationException\r
-        {\r
-            public RuntimeException() { }\r
-\r
-            public RuntimeException(string message) :\r
-                base(message) { }\r
-\r
-            public RuntimeException(string message, System.Exception inner) :\r
-                base(message, inner) { }\r
-\r
-            protected RuntimeException(SerializationInfo info, StreamingContext context) :\r
-                base(info, context) { }\r
-        }\r
-\r
-        #endregion\r
-\r
-\r
         #region Public Constants\r
 \r
         public const float PixelsToUnitSquares = 64.0f;\r
@@ -124,7 +97,9 @@ namespace CarFire
         /// </summary>\r
         public int Height { get { return mData.Metadata.GridHeight; } }\r
 \r
-        // TODO: This should return whatever object we end up using for tilesets.\r
+        /// <summary>\r
+        /// Get the name of the tileset.\r
+        /// </summary>\r
         public string Tileset { get { return mData.Metadata.Tileset; } }\r
 \r
         /// <summary>\r
@@ -157,23 +132,24 @@ namespace CarFire
         }\r
 \r
         /// <summary>\r
-        /// Get and set the zoom of the map view.  The default zoom is\r
-        /// Map.PixelsToUnitSquares.\r
+        /// Get and set the tilemap with its associated texture and tile\r
+        /// character to coordinate mappings.  This effects what the map looks\r
+        /// like when it is drawn.\r
         /// </summary>\r
-        public float Zoom\r
+        public Tilemap Tilemap\r
         {\r
-            get { return mView.Zoom; }\r
-            set { mView.Zoom = value; }\r
+            get { return mView.Tilemap; }\r
+            set { mView.Tilemap = value; }\r
         }\r
 \r
-\r
         /// <summary>\r
-        /// Get and set the associated game object.\r
+        /// Get and set the zoom of the map view.  The default zoom is\r
+        /// Map.PixelsToUnitSquares.\r
         /// </summary>\r
-        public Game Game\r
+        public float Zoom\r
         {\r
-            get { return mData.Game; }\r
-            set { mData.Game = value; }\r
+            get { return mView.Zoom; }\r
+            set { mView.Zoom = value; }\r
         }\r
 \r
         #endregion\r
@@ -287,21 +263,23 @@ namespace CarFire
         /// Get all the entities loaded from the map file.  Exceptions could be\r
         /// thrown if there are entities without associated classes.\r
         /// </summary>\r
+        /// <param name="game">The game reference to be passed to entities.</param>\r
         /// <returns>List of entity objects loaded.</returns>\r
-        public List<IEntity> GetAllEntities()\r
+        public List<IEntity> GetAllEntities(Game game)\r
         {\r
-            return mData.GetAllEntities();\r
+            return mData.GetAllEntities(game);\r
         }\r
 \r
         /// <summary>\r
         /// Get the entities of a certain type loaded from the map file.  Exceptions\r
         /// could be thrown if there are entities without associated classes.\r
         /// </summary>\r
+        /// <param name="game">The game reference to be passed to entities.</param>\r
         /// <typeparam name="T">Type of the entity you want a list of.</typeparam>\r
         /// <returns>List of entity objects loaded.</returns>\r
-        public List<T> GetEntities<T>()\r
+        public List<T> GetEntities<T>(Game game)\r
         {\r
-            return mData.GetEntities<T>();\r
+            return mData.GetEntities<T>(game);\r
         }\r
 \r
 \r
@@ -368,8 +346,6 @@ namespace CarFire
             public Point[] PlayerPositions { get { return mPlayerPositions; } }\r
             public bool[,] Grid { get { return mBooleanGrid; } }\r
 \r
-            public Game Game;\r
-\r
 \r
             public Model(Metadata metadata, char[,] grid, char defaultTile,\r
                 List<RawEntity> entities, Point[] playerPositions)\r
@@ -427,6 +403,12 @@ namespace CarFire
                 }\r
             }\r
 \r
+            public char GetCell(int x, int y)\r
+            {\r
+                if (IsOnMap(x, y)) return mGrid[x, y];\r
+                return mDefaultTile;\r
+            }\r
+\r
             public void ClearCell(int x, int y)\r
             {\r
                 SetCell(x, y, mDefaultTile);\r
@@ -438,7 +420,7 @@ namespace CarFire
             }\r
 \r
 \r
-            public List<IEntity> GetAllEntities()\r
+            public List<IEntity> GetAllEntities(Game game)\r
             {\r
                 List<IEntity> list = new List<IEntity>();\r
 \r
@@ -452,23 +434,23 @@ namespace CarFire
                         args[0] = raw.Id;\r
                         args[1] = raw.Position;\r
                         args[2] = raw.Attributes;\r
-                        args[3] = Game;\r
+                        args[3] = game;\r
 \r
                         try\r
                         {\r
                             IEntity entity = (IEntity)Activator.CreateInstance(System.Type.GetType("CarFire." + typename), args);\r
                             if (entity != null)\r
                             {\r
-                                entity.LoadContent(Game.ContentManager);\r
+                                entity.LoadContent(game.ContentManager);\r
                                 list.Add(entity);\r
                             }\r
-                            else throw new RuntimeException();\r
+                            else throw new Exception();\r
                         }\r
 #pragma warning disable 0168\r
                         catch (System.Exception ex)\r
 #pragma warning restore 0168\r
                         {\r
-                            throw new RuntimeException("Entity of type " + typename + " not loaded because an entity class can't be found.");\r
+                            throw new Exception("Entity of type " + typename + " not loaded because an entity class can't be found.");\r
                         }\r
                     }\r
                     else\r
@@ -480,7 +462,7 @@ namespace CarFire
                 return list;\r
             }\r
 \r
-            public List<T> GetEntities<T>()\r
+            public List<T> GetEntities<T>(Game game)\r
             {\r
                 System.Type type = typeof(T);\r
                 List<T> list = new List<T>();\r
@@ -494,15 +476,15 @@ namespace CarFire
                         args[0] = raw.Id;\r
                         args[1] = raw.Position;\r
                         args[2] = raw.Attributes;\r
-                        args[3] = Game;\r
+                        args[3] = game;\r
 \r
                         T entity = (T)Activator.CreateInstance(type, args);\r
                         if (entity != null)\r
                         {\r
-                            ((IEntity)entity).LoadContent(Game.ContentManager);\r
+                            ((IEntity)entity).LoadContent(game.ContentManager);\r
                             list.Add(entity);\r
                         }\r
-                        else throw new RuntimeException("Entity of type " + typename + " not loaded because an entity class can't be found.");\r
+                        else throw new Exception("Entity of type " + typename + " not loaded because an entity class can't be found.");\r
                     }\r
                 }\r
 \r
@@ -522,6 +504,7 @@ namespace CarFire
         class View\r
         {\r
             public Vector2 CenterCell;\r
+            public Tilemap Tilemap;\r
             public float Zoom;\r
 \r
 \r
@@ -543,21 +526,14 @@ namespace CarFire
 \r
             public void Draw(SpriteBatch spriteBatch)\r
             {\r
+                if (Tilemap == null) throw new Exception("Cannot draw map without first setting the tilemap.");\r
                 mViewport = spriteBatch.GraphicsDevice.Viewport;\r
 \r
-                // TODO: There is no culling yet, but it runs so fast that it probably won't ever need it.\r
                 for (int y = 0; y < mData.Metadata.GridHeight; y++)\r
                 {\r
                     for (int x = 0; x < mData.Metadata.GridWidth; x++)\r
                     {\r
-                        if (mData.IsCellOpen(x, y))\r
-                        {\r
-                            spriteBatch.Draw(Map.DefaultTile, GetRectangleFromCoordinates(x, y), Color.White);\r
-                        }\r
-                        else\r
-                        {\r
-                            spriteBatch.Draw(Map.DefaultTile, GetRectangleFromCoordinates(x, y), Color.DarkBlue);\r
-                        }\r
+                        Tilemap.Draw(spriteBatch, mData.GetCell(x, y), GetRectangleFromCoordinates(x, y));\r
                     }\r
                 }\r
             }\r
This page took 0.031515 seconds and 4 git commands to generate.