Advertisement
Guest User

Source code.

a guest
Apr 6th, 2015
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 20.11 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Microsoft.Xna.Framework;
  5. using Microsoft.Xna.Framework.Audio;
  6. using Microsoft.Xna.Framework.Content;
  7. using Microsoft.Xna.Framework.GamerServices;
  8. using Microsoft.Xna.Framework.Graphics;
  9. using Microsoft.Xna.Framework.Input;
  10. using Microsoft.Xna.Framework.Media;
  11. namespace TileMap
  12. {
  13.     public class Game1 : Microsoft.Xna.Framework.Game
  14.     {
  15.         GraphicsDeviceManager graphics;
  16.         SpriteBatch spriteBatch;
  17.         #region Variables
  18.         #region Texture2D
  19.         Texture2D playerRight;
  20.         Texture2D playerLeft;
  21.         Texture2D player;
  22.         Texture2D zombie;
  23.         Texture2D bullet;
  24.         Texture2D turrentBullet;
  25.         Texture2D turrent;
  26.         #endregion Texture2D
  27.         #region Rectangles
  28.         Rectangle shopButton1;
  29.         Rectangle shopButton2;
  30.         Rectangle shopButton3;
  31.         Rectangle shopButton4;
  32.         Rectangle shopButton5;
  33.         Rectangle shopButton6;
  34.         Rectangle turrentLoc;
  35.         #endregion Rectangles
  36.         #region Booleans
  37.         bool shopButtonLock = false;
  38.         bool mouseButtonLock = false;
  39.         bool gameOver = false;
  40.         bool shoot = true;
  41.         bool mapDraw = true;
  42.         bool shopOpen = false;
  43.         bool gotTurrent=false;
  44.         #endregion Booleans
  45.         #region SpriteFonts
  46.         SpriteFont font;
  47.         SpriteFont mFont;
  48.         SpriteFont lFont;
  49.         #endregion SpriteFonts
  50.         #region strings
  51.         string t1 = "Null";
  52.         #endregion
  53.         #region floats
  54.         float playerLocBufferY = 0;
  55.         float elapsed;
  56.         float timer1=3;
  57.         float timer2 = 2;
  58.         float timer3 = 1;
  59.         float zSpawnTime = 8;
  60.         float waveZSpawn = 8;
  61.         #endregion
  62.         #region ints
  63.         int zombiesSpawned = 0;
  64.         int wave = 20;
  65.         int money = 20;
  66.         int playerHP;
  67.         int playerMaxHP;
  68.         int playerView = 1;
  69.         int playerDamage = 25;
  70.         int turrentDamage = 15;
  71.         #endregion
  72.         #region Vector2
  73.         Vector2 playerLoc;
  74.         Vector2 screenSize;
  75.         Vector2 screenSizeRounded;
  76.         #endregion
  77.  
  78.         #region Lists
  79.         List<Texture2D> textureMap=new List<Texture2D>();
  80.         List<Rectangle> collisonBoxes = new List<Rectangle>();
  81.         List<Rectangle> bullets = new List<Rectangle>();
  82.         List<Rectangle> zombieLoc = new List<Rectangle>();
  83.         List<Rectangle> turrentBullets = new List<Rectangle>();
  84.         List<int> zombieHP = new List<int>();
  85.         #endregion
  86.         #region map
  87.         int[,] map=new int[,]{
  88.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  89.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  90.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  91.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  92.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  93.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  94.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  95.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  96.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  97.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  98.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  99.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  100.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  101.             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  102.             {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
  103.         };
  104.         #endregion map
  105.         #endregion
  106.         public Game1()
  107.         {
  108.             graphics = new GraphicsDeviceManager(this);
  109.             graphics.IsFullScreen = false;
  110.             graphics.PreferredBackBufferHeight = 480;
  111.             graphics.PreferredBackBufferWidth = 1568;
  112.             Content.RootDirectory = "Content";
  113.         }
  114.         protected override void Initialize()
  115.         {
  116.             this.IsMouseVisible = true;
  117.             screenSize = new Vector2(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
  118.             screenSizeRounded = new Vector2((int)Math.Round(screenSize.X), (int)Math.Round(screenSize.Y));
  119.             shopButton1 = new Rectangle(0, 0, 14*3, 20);
  120.             shopButton3 = new Rectangle((int)screenSizeRounded.X / 2 - 500, (int)screenSizeRounded.Y / 2 - 180, 14 * (18/4*3), 20);
  121.             shopButton2 = new Rectangle((int)screenSizeRounded.X/2-500, (int)screenSizeRounded.Y/2-150, 14*(15/4*3), 20);
  122.             shopButton4 = new Rectangle((int)screenSizeRounded.X / 2 - 500, (int)screenSizeRounded.Y / 2 - 120, 14 * (12/4*3), 20);
  123.             playerMaxHP = 100;
  124.             playerHP = playerMaxHP;
  125.            
  126.             base.Initialize();
  127.         }
  128.         protected override void LoadContent()
  129.         {
  130.             spriteBatch = new SpriteBatch(GraphicsDevice);
  131.  
  132.             textureMap.Add(Content.Load<Texture2D>("tile1"));
  133.             textureMap.Add(Content.Load<Texture2D>("tile2"));
  134.             player = Content.Load<Texture2D>("player");
  135.             playerRight = Content.Load<Texture2D>("playerRight");
  136.             playerLeft = Content.Load<Texture2D>("playerLeft");
  137.             zombie = Content.Load<Texture2D>("enemy");
  138.             bullet = Content.Load<Texture2D>("playerBullet");
  139.             turrent = Content.Load<Texture2D>("turrent");
  140.             turrentBullet = Content.Load<Texture2D>("turrentBullet");
  141.  
  142.             font = Content.Load<SpriteFont>("RegularFont");
  143.             mFont = Content.Load<SpriteFont>("MediumFont");
  144.             lFont = Content.Load<SpriteFont>("LargeFont");
  145.             playerLoc = new Vector2(20, screenSize.Y - player.Height-32);
  146.             turrentLoc = new Rectangle(200, (int)screenSizeRounded.Y-32 - turrent.Height, turrent.Width, turrent.Height);
  147.  
  148.         }
  149.         protected override void UnloadContent()
  150.         {
  151.            
  152.         }
  153.         public void spawnZombie()
  154.         {
  155.             zombieLoc.Add(new Rectangle((int)Math.Round(screenSize.X) - zombie.Width, (int)Math.Round(screenSize.Y) - zombie.Height-32, zombie.Width, zombie.Height));
  156.             zombieHP.Add(100);
  157.             if (zSpawnTime < 28 && wave==2)
  158.             {
  159.                 zSpawnTime = 8;
  160.             }
  161.             else if (zSpawnTime > 2 || wave > 15)
  162.             {
  163.                 if(zSpawnTime>0.4)
  164.                     zSpawnTime -= 0.02f;
  165.             }
  166.             t1 = zSpawnTime.ToString() ;
  167.             zombiesSpawned++;
  168.         }
  169.         public void killZombie(int z)
  170.         {
  171.             zombieLoc.Remove(zombieLoc[z]);
  172.             zombieHP.Remove(zombieHP[z]);
  173.             money += wave * 2;
  174.         }
  175.         public void shootTurrent()
  176.         {
  177.             turrentBullets.Add(new Rectangle(turrentLoc.X + turrent.Width / 2, turrentLoc.Y + turrent.Height / 2-6, turrentBullet.Width, turrentBullet.Height));
  178.         }
  179.         protected override void Update(GameTime gameTime)
  180.         {
  181.             if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  182.                 this.Exit();
  183.             #region KeyChecker
  184.             #region Alts
  185.             if (Keyboard.GetState().IsKeyDown(Keys.LeftAlt))
  186.             {
  187.                 if (Keyboard.GetState().IsKeyDown(Keys.L))
  188.                 {
  189.                     mapDraw = false;
  190.                 }
  191.                 else
  192.                 {
  193.                     mapDraw = true;
  194.                 }
  195.             }
  196.             #endregion Alts
  197.             #region Ctrls
  198.             if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
  199.             {
  200.                 if (Keyboard.GetState().IsKeyDown(Keys.S))
  201.                 {
  202.                     shopButtonLock = true;
  203.                 }
  204.             }
  205.             if (Keyboard.GetState().IsKeyUp(Keys.S) && shopButtonLock)
  206.             {
  207.                 shopButtonLock = false;
  208.                 shopOpen = !shopOpen;
  209.                 mapDraw = !mapDraw;
  210.             }
  211.             #endregion Ctrls
  212.             #region MouseLeft
  213.             if (Mouse.GetState().LeftButton == ButtonState.Pressed)
  214.             {
  215.                 mouseButtonLock = true;
  216.             } if (Mouse.GetState().LeftButton == ButtonState.Released && mouseButtonLock)
  217.             {
  218.                 mouseButtonLock = false;
  219.  
  220.                 if (shopButton1.Contains(Mouse.GetState().X, Mouse.GetState().Y))
  221.                 {
  222.                     //Back Button Clicked
  223.                     shopOpen = !shopOpen;
  224.                     mapDraw = !mapDraw;
  225.                 }
  226.                 if (shopButton2.Contains(Mouse.GetState().X, Mouse.GetState().Y) && money>=50)
  227.                 {
  228.                     playerMaxHP += 25;
  229.                     playerHP += 25;
  230.                     money -= 50;
  231.                 }
  232.                 if (shopButton3.Contains(Mouse.GetState().X, Mouse.GetState().Y) && money >= 25 && playerDamage<45)
  233.                 {
  234.                     playerDamage += 15;
  235.                     money -= 25;
  236.                 }
  237.                 if (shopButton4.Contains(Mouse.GetState().X, Mouse.GetState().Y) && money >= 150 && !gotTurrent)
  238.                 {
  239.                     gotTurrent = true;
  240.                     money -= 150;
  241.                     shopButton4 = new Rectangle((int)screenSizeRounded.X / 2 - 500, (int)screenSizeRounded.Y / 2 - 120, 14 * (28 / 4 * 3), 20);
  242.                 }
  243.                 else if (shopButton4.Contains(Mouse.GetState().X, Mouse.GetState().Y) && money >= 400 && gotTurrent && turrentDamage<60)
  244.                 {
  245.                     turrentDamage += 10;
  246.                     money -= 400;
  247.                 }
  248.             }
  249.             #endregion mouseleft
  250.             #endregion KeyChecker
  251.             #region timers
  252.             elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
  253.             if(mapDraw)
  254.                 timer1 -= elapsed;
  255.             if (timer1 < 0)
  256.             {
  257.                 spawnZombie();
  258.                 timer1 = zSpawnTime;
  259.             }
  260.             if(timer2>0 && mapDraw)
  261.                 timer2 -= elapsed;
  262.             if (timer2 <= 0)
  263.             {
  264.                 timer2 = 2f;
  265.                 shoot = true;
  266.             }
  267.             if(gotTurrent)
  268.                 timer3 -= elapsed;
  269.             if (timer3 <= 0)
  270.             {
  271.                 timer3 = 1f;
  272.                 shootTurrent();
  273.             }
  274.            
  275.             #endregion timers
  276.             #region playerMovement
  277.             if (playerHP <= 0)
  278.             {
  279.                 gameOver = true;
  280.                 mapDraw = false;
  281.                 playerHP = 0;
  282.             }
  283.             if (Keyboard.GetState().IsKeyDown(Keys.Left))
  284.             {
  285.                 playerView = 0;
  286.             }
  287.             else if (Keyboard.GetState().IsKeyDown(Keys.Right))
  288.             {
  289.                 playerView = 2;
  290.             }
  291.             else
  292.             {
  293.                 //playerView = 1; Enables Front View While Not Moveing
  294.             }
  295.  
  296.             if (Keyboard.GetState().IsKeyDown(Keys.Left) && playerLoc.X>0+5)
  297.             {
  298.                 playerLoc.X -= gameTime.ElapsedGameTime.Milliseconds * 0.5f;
  299.             } if (Keyboard.GetState().IsKeyDown(Keys.Right) && playerLoc.X < (GraphicsDevice.Viewport.Width- player.Width-10))
  300.             {
  301.                 playerLoc.X += gameTime.ElapsedGameTime.Milliseconds * 0.5f;
  302.             }
  303.             if (Keyboard.GetState().IsKeyDown(Keys.Space) && shoot)
  304.             {
  305.                 bullets.Add(new Rectangle((int)Math.Round(playerLoc.X)+player.Width, (int)Math.Round(playerLoc.Y)+player.Height/2, bullet.Width, bullet.Height));
  306.                 shoot = false;
  307.             }
  308.             playerLoc.Y -= playerLocBufferY;
  309.            
  310.             #endregion playerMovement
  311.             #region collison
  312.            
  313.             for(int i=0; i<collisonBoxes.Count; i++){
  314.                 playerLocBufferY = 0f;
  315.                 //Checking bottom
  316.                 //if((playerLoc.Y+player.Height)>collisonBoxes[i].Y && playerLoc.X > collisonBoxes[i].X && playerLoc.X+player.Width>collisonBoxes[i].X-32)  Complex collision
  317.                 if(collisonBoxes[i].Intersects(new Rectangle((int)Math.Round(playerLoc.X),(int)Math.Round(playerLoc.Y), player.Width, player.Height)))  //Simple collision
  318.                 {
  319.                     playerLoc.Y = collisonBoxes[i].Y - (player.Height);
  320.                 }
  321.                 if ((playerLoc.Y + player.Height < collisonBoxes[i].Y))
  322.                 {
  323.                    
  324.                     playerLocBufferY -=3.5f;
  325.                 }
  326.                
  327.                
  328.             }
  329.            
  330.  
  331.             #endregion collison
  332.             #region zombies
  333.             if (!gameOver)
  334.             {
  335.                 for (int i = 0; i < zombieLoc.Count; i++)
  336.                 {
  337.                     Rectangle rect = zombieLoc[i];
  338.                     if (mapDraw)
  339.                         rect.X -= gameTime.ElapsedGameTime.Milliseconds/8;
  340. ;
  341.  
  342.                     zombieLoc[i] = rect;
  343.                     for (int b = 0; b < bullets.Count; b++)
  344.                     {
  345.                         if (zombieLoc[i].Contains(bullets[b].X + bullet.Width, bullets[b].Y))
  346.                         {
  347.                             zombieHP[i] -= playerDamage;
  348.                             bullets.Remove(bullets[b]);
  349.                         }
  350.  
  351.                     }
  352.                     for (int b = 0; b < turrentBullets.Count; b++)
  353.                     {
  354.                         if (zombieLoc[i].Contains(turrentBullets[b].X + turrentBullet.Width, turrentBullets[b].Y))
  355.                         {
  356.                             zombieHP[i] -= turrentDamage;
  357.                             turrentBullets.Remove(turrentBullets[b]);
  358.                         }
  359.                     }
  360.                     if (zombieHP[i] <= 0)
  361.                     {
  362.                         killZombie(i);
  363.                     }
  364.                     else if (zombieLoc[i].X < playerLoc.X + player.Width)
  365.                     {
  366.                         Rectangle rect2 = zombieLoc[i];
  367.                         if (mapDraw)
  368.                             rect2.X += 50;
  369.                         zombieLoc[i] = rect2;
  370.                         playerHP -= 25;
  371.                     }
  372.                
  373.                 }
  374.                 for (int b = 0; b < bullets.Count; b++)
  375.                 {
  376.                     try
  377.                     {
  378.                         Rectangle rect = bullets[b];
  379.                         if (mapDraw)
  380.                             rect.X += gameTime.ElapsedGameTime.Milliseconds * 1;
  381.                         bullets[b] = rect;
  382.                     }
  383.                     catch
  384.                     {
  385.  
  386.                     }
  387.                 }for(int b=0;b < turrentBullets.Count;b++){
  388.                     Rectangle rect=turrentBullets[b];
  389.                     try{
  390.                     rect.X+=gameTime.ElapsedGameTime.Milliseconds * 2;
  391.                     }catch{}
  392.                     turrentBullets[b] = rect;
  393.                 }
  394.             }
  395.             #endregion zombies
  396.             #region gameInfo
  397.             if (zombiesSpawned==(wave*3) && zombieLoc.Count>=0)
  398.             {
  399.                     wave++;
  400.                     zombieLoc.Clear();
  401.                     zombieHP.Clear();
  402.                     bullets.Clear();
  403.                     turrentBullets.Clear();
  404.                     zSpawnTime = waveZSpawn;
  405.                     timer1 = 30f;
  406.                     timer2 = 0f;
  407.                     zombiesSpawned = 0;
  408.                     if (waveZSpawn > 1)
  409.                         waveZSpawn -= 0.1f;
  410.             }
  411.             #endregion
  412.             base.Update(gameTime);
  413.         }
  414.         protected override void Draw(GameTime gameTime)
  415.         {
  416.             GraphicsDevice.Clear(Color.CornflowerBlue);
  417.  
  418.             spriteBatch.Begin();
  419.             #region mapDraw
  420.             if (mapDraw)
  421.             {
  422.                 #region tileMap
  423.                 for (int y = 0; y < map.GetLength(0); y++)
  424.                 {
  425.                     for (int x = 0; x < map.GetLength(1); x++)
  426.                     {
  427.                         int index = map[y, x];
  428.  
  429.                         if (index != -1)
  430.                         {
  431.                             Texture2D texture = textureMap[index];
  432.                             spriteBatch.Draw(texture, new Rectangle(x * 32, y * 32, 32, 32), Color.White);
  433.                             if (index == 1)
  434.                             {
  435.                                 collisonBoxes.Add(new Rectangle(x * 32, y * 32, 32, 32));
  436.                             }
  437.                         }
  438.                     }
  439.                 }
  440.                 #endregion tileMap
  441.                 for (int i = 0; i < turrentBullets.Count; i++)
  442.                 {
  443.                     spriteBatch.Draw(turrentBullet, turrentBullets[i], Color.White);
  444.                 }
  445.                 if(gotTurrent)
  446.                     spriteBatch.Draw(turrent, turrentLoc, Color.White);
  447.                 spriteBatch.Draw(playerRight, playerLoc, Color.White);
  448.                 for (int i = 0; i < zombieLoc.Count; i++)
  449.                 {
  450.                     spriteBatch.Draw(zombie, zombieLoc[i], Color.White);
  451.                 }
  452.                 for (int i = 0; i < bullets.Count; i++)
  453.                 {
  454.                     spriteBatch.Draw(bullet, bullets[i], Color.White);
  455.                 }
  456.                 spriteBatch.DrawString(font, "Wave " + wave, new Vector2(screenSize.X/2, 0), Color.White);
  457.  
  458.             }
  459.             #endregion mapDraw
  460.            
  461.             #region shop
  462.             if (shopOpen)
  463.             {
  464.                 spriteBatch.DrawString(font, "Back", new Vector2(shopButton1.X, shopButton1.Y), Color.White);
  465.                 spriteBatch.DrawString(font, "Health Upgrade: $50", new Vector2(shopButton2.X, shopButton2.Y), Color.White);
  466.                 if(playerDamage<45)
  467.                     spriteBatch.DrawString(font, "Damage Upgrade: $25", new Vector2(shopButton3.X, shopButton3.Y), Color.White);
  468.                 else if(playerDamage>=45)
  469.                     spriteBatch.DrawString(font, "Damage Upgrade: MAXED", new Vector2(shopButton3.X, shopButton3.Y), Color.White);
  470.                 if(!gotTurrent)
  471.                     spriteBatch.DrawString(font, "Turrent: $150", new Vector2(shopButton4.X, shopButton4.Y), Color.White);
  472.                 else if(turrentDamage<60)
  473.                     spriteBatch.DrawString(font, "Upgrade Turrents Damage: $400", new Vector2(shopButton4.X, shopButton4.Y), Color.White);
  474.                 else if(turrentDamage>= 60)
  475.                     spriteBatch.DrawString(font, "Upgrade Turrents Damage: MAXED", new Vector2(shopButton4.X, shopButton4.Y), Color.White);
  476.             }
  477.             #endregion shop
  478.             #region gameOver
  479.             if (gameOver)
  480.             {
  481.                 spriteBatch.DrawString(lFont, "Game Over.", new Vector2(screenSize.X / 2-40, screenSize.Y / 2), Color.White);
  482.                 //spriteBatch.DrawString(mFont, "Press F4 To retry!", new Vector2(screenSize.X / 2-40, screenSize.Y / 2-40), Color.White);
  483.             }
  484.             #endregion
  485.             spriteBatch.DrawString(font, ("Money: "+money.ToString()), new Vector2(0,screenSize.Y-20),Color.White);
  486.             spriteBatch.DrawString(font, ("Health: " + playerHP.ToString() + " / " + playerMaxHP), new Vector2(screenSize.X-130, screenSize.Y - 20), Color.White);
  487.             spriteBatch.End();
  488.  
  489.             base.Draw(gameTime);
  490.         }
  491.     }
  492. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement