/// <summary> /// Loads a bitmap from a file, caches it, and generates a horizontally flipped version if necessary. /// </summary> /// <param name="graphic">The image file that you want to load.</param> /// <param name="reverse">Whether to generate a flipped version.</param> /// <param name="unique">Ensures that the bitmap data uses a new slot in the cache.</param> /// <param name="key">Force the cache to use a specific Key to index the bitmap.</param> /// <returns>The <code>BitmapData</code> we just created.</returns> public static Texture2D addBitmap(Texture2D graphic, bool reverse = false, bool unique = false, string key = null) { bool needReverse = false; if(key == null) { key = graphic.ToString()+(reverse?"_REVERSE_":""); if(unique && checkBitmapCache(key)) { int inc = 0; string ukey; do { ukey = key + inc++; } while(checkBitmapCache(ukey)); key = ukey; } } //If there is no data for this key, generate the requested graphic if(!checkBitmapCache(key)) { //_cache[key] = graphic.bitmapData; if(reverse) needReverse = true; } //BitmapData pixels = _cache[key]; Texture2D pixels = graphic; if(!needReverse && reverse && (pixels.Width == graphic.Width)) needReverse = true; if(needReverse) { /* BitmapData newPixels = new BitmapData(pixels.Width<<1,pixels.Height,true,0x00000000); newPixels.draw(pixels); Matrix mtx = new Matrix(); mtx.scale(-1,1); mtx.translate(newPixels.width,0); newPixels.draw(pixels,mtx); pixels = newPixels; _cache[Key] = pixels; */ } return pixels; }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); Drawable.setSpriteBatch(spriteBatch); wallSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Walls"); shootableWallSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Walls_Shootable"); bathroomDoorSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Wall_bathroom"); normalDoorSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Walls_locked"); keycardDoorSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Walls_keycard"); generalSecuritySpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Security_Generic_sheet"); securityHeadSpriteMap = Content.Load<Texture2D>(@"SpriteSheets\Security_head_sheet"); player = new Player(Content.Load<Texture2D>(@"SpriteSheets\Female_sheet"), tickTime); tile = new Floor(Content.Load<Texture2D>(@"SpriteSheets\floor")); //tile = new Floor(Content.Load<Texture2D>(@"SpriteSheets\Wall_bathroom")); //tile = new Floor(bathroomDoorSpriteMap); // TODO: use this.Content to load your game content here //load sprite maps Console.WriteLine("shootable set: "+shootableWallSpriteMap.ToString()); Console.WriteLine("regular set: "+wallSpriteMap.ToString()); //load tilesets tileTable = new Tile[22]; tileTable[FLOOR_TILE] = tile; tileTable[WALL_LEFT_TILE] = new Wall(wallSpriteMap); tileTable[WALL_LEFT_TILE].setSpriteFrame(new Point(0,0)); tileTable[WALL_TOP_TILE] = new Wall(wallSpriteMap); tileTable[WALL_TOP_TILE].setSpriteFrame(new Point(1, 0)); tileTable[WALL_BOTTOM_TILE] = new Wall(wallSpriteMap); tileTable[WALL_BOTTOM_TILE].setSpriteFrame(new Point(2, 0)); tileTable[WALL_RIGHT_TILE] = new Wall(wallSpriteMap); tileTable[WALL_RIGHT_TILE].setSpriteFrame(new Point(3, 0)); tileTable[WALL_LL_TILE] = new Wall(wallSpriteMap); tileTable[WALL_LL_TILE].setSpriteFrame(new Point(0, 1)); tileTable[WALL_UL_TILE] = new Wall(wallSpriteMap); tileTable[WALL_UL_TILE].setSpriteFrame(new Point(1, 1)); tileTable[WALL_UR_TILE] = new Wall(wallSpriteMap); tileTable[WALL_UR_TILE].setSpriteFrame(new Point(2, 1)); tileTable[WALL_LR_TILE] = new Wall(wallSpriteMap); tileTable[WALL_LR_TILE].setSpriteFrame(new Point(3, 1)); tileTable[WALL_LL_CORNER] = new Wall(wallSpriteMap); tileTable[WALL_LL_CORNER].setSpriteFrame(new Point(0, 2)); tileTable[WALL_UL_CORNER] = new Wall(wallSpriteMap); tileTable[WALL_UL_CORNER].setSpriteFrame(new Point(1, 2)); tileTable[WALL_UR_CORNER] = new Wall(wallSpriteMap); tileTable[WALL_UR_CORNER].setSpriteFrame(new Point(2, 2)); tileTable[WALL_LR_CORNER] = new Wall(wallSpriteMap); tileTable[WALL_LR_CORNER].setSpriteFrame(new Point(3, 2)); tileTable[WALL_SHOOTABLE_UPPER] = new Wall(shootableWallSpriteMap); tileTable[WALL_SHOOTABLE_UPPER].setSpriteFrame(new Point(2, 0)); //load map files viewCorner = new[] {0, 0}; LoadMap("tutorial"); }