Ejemplo n.º 1
0
        //detetar colisoes dos inimigos com tanque do player
        private void colisionDetection(Tank tank)
        {
            //colisao de tanques inimigos com tanque do player
                foreach (Tank Tank in listaTanques)
                {
                    if (!Tank.playerControl)
                    {
                        if (tank.boundingSphere.Intersects(Tank.boundingSphere))
                        {
                            //tank.velocidade = 0;
                            Tank.velocidade = 0;
                        }
                        else
                        {
                            Tank.velocidade = 0.07f;
                        }
                    }
                }
                //colisao das balas com tanques inimigos
                //obter lista de balas ativas
                listaBalas = BulletManager.getListaBalasAtivas();
                foreach (Bullet bala in listaBalas)
                {
                    foreach (Tank TankInimigo in listaTanques)
                    {
                        if (bala.boundingSphere.Intersects(TankInimigo.boundingSphere))
                        {
                            TankInimigo.tankDestroyed = true;
                            bala.balaDestruida = true;
                        }
                    }

                }
        }
Ejemplo n.º 2
0
 public TankEnemy(Model m, Vector3 Position,Tank tank, int speed )
     : base(m)
 {
     world =  Matrix.CreateScale(.1f)*Matrix.CreateTranslation(Position) ;
     this.tank1 = tank;
     this.speed = speed;
 }
Ejemplo n.º 3
0
        public void CreateParticle(GameTime gametime, Vector3 posicaoCentro, float larguraRetangulo, float alturaRetangulo, Vector3 novaDirecao, Tank tank, Matrix worldSistema)
        {
            worldMatrix = worldSistema;
            centro = new Vector3(0, 0, 0);
            time += (float)gametime.ElapsedGameTime.TotalMilliseconds;
            //geracao de valores random para definir posicao e magnitude
            randomPosicao = RandomGenerator.getRandomNext();
            randomMagnitude = RandomGenerator.getRandomMinMax();

            magnitudeLargura = randomMagnitude ;
            magnitudeAltura = randomMagnitude ;

            //para definir a posicao soma-se ao centro o valor da largura do retangulo mais a magnitude para que encontre
            //em ponto intermiedio entre o centro e o limite exterior.
            posicaoX = centro.X + larguraRetangulo * magnitudeLargura;
            posicaoY = centro.Y /*+ alturaRetangulo * magnitudeAltura*/;
            this.posicao = new Vector3(posicaoX, posicaoY, centro.Z);

            //criaçao dos vertices que compoem a particula, um recebe a posicao calculada o outro é criado um pouco abaixo.
            vertices[0].Position = this.posicao;
            vertices[0].Color = Color.DarkGreen;
            vertices[1].Position = this.posicao + new Vector3(0,1f,0);
            vertices[1].Color = Color.Yellow;

            //a direcao da particula é calculada atraves do cross entre o vetor direcao do tanque e o vetor direita.
            Vector3 direcao = RandomGenerator.getRandomNextDouble() * novaDirecao + new Vector3(0,1,0);
            velocidade =  direcao;
        }
Ejemplo n.º 4
0
        public static Vector3 GerirDistancia(List<Tank> listaTank, Tank tank)
        {
            cont = 0;
            somaForcas = Vector3.Zero;
            foreach (Tank otherTank in listaTank)
            {
                if (!otherTank.playerControl)
                {
                    distancia = Vector3.Distance(tank.position, otherTank.position);
                    if (distancia > 0 && distancia < distanciaMinima)
                    {
                        Vector3 diferenca = tank.position - otherTank.position;
                        Vector3.Normalize(diferenca);
                        somaForcas += diferenca;

                        cont++;
                    }
                }

            }
            if (cont > 0)
            {
                somaForcas = somaForcas / cont;
            }

            return somaForcas;
        }
Ejemplo n.º 5
0
        public void Update(GameTime gameTime,Tank tank)
        {
            boundingSphere.Center = this.position;
            time += (float)gameTime.ElapsedGameTime.TotalMilliseconds / 4096f;

            position += (Vector3.Normalize(direcao) * velocidade);
            position.Y -= 0.098f * (time * time);
            world = Matrix.CreateScale(0.3f) * Matrix.CreateTranslation(position);
        }
Ejemplo n.º 6
0
        public void Initialize(GraphicsDeviceManager graphics, VertexPositionNormalTexture[] vertices, int alturaMapa, Vector3 posicaoTank, Matrix worldTank, Matrix ViewTank, Tank tank)
        {
            this.tank = tank;

            this.alturaMapa = alturaMapa;
            this.vertices = vertices;

            cameraAula = new CameraAula(graphics);
            cameraSurface = new CameraSurfaceFollow(graphics, vertices, alturaMapa);
            cameraTank = new CameraTank(graphics, vertices, alturaMapa, posicaoTank, worldTank, ViewTank);
        }
Ejemplo n.º 7
0
        public static void Initialize(Tank tankQueDispara, ContentManager cont)
        {
            balasAtivas = new List<Bullet>(500);
            balasNaoAtivas = new List<Bullet>(500);
            tank = tankQueDispara;
            content = cont;
            numeroDeBalas = 500;
            copiaBalasAtivas = balasAtivas;

            for (int i = 0; i < numeroDeBalas; i++)
            {
                balasNaoAtivas.Add(new Bullet(tank, content));
            }
        }
Ejemplo n.º 8
0
        public Human(Model m, Vector3 Position, Tank tank, int speed)
            : base(m)
        {
            ghostState = GhostState.IDLE;
            this.position = Position;
            this.targetTank = tank;
            this.maxSpeed = speed;

            currentVelocity = Vector3.Normalize(new Vector3(0, 0, 1));

            //RandomPatrolPoint();
            translation = Matrix.CreateTranslation(position);
            //behavious[0] = Flee;
            behavious = new Behavious[2];
        }
Ejemplo n.º 9
0
        public Bullet(Tank tank,ContentManager content)
        {
            playerTank = tank;
            vetorBase = new Vector3(0, 0, 1);
            balaDestruida = false;

            world = Matrix.CreateScale(0.3f) * Matrix.CreateTranslation(position);
            LoadContent(content);
            //poicao e direcao da bala. cria se um offset para a bala começar na ponta do canhao, aplica-se todas as rotaçoes existentes no canhaoe calcula a direcao
            //transformando o vetor direcao ( cross da normal do tanque com o vetor rigth da turret) com a rotacao.
            Vector3 offset = new Vector3(0, 2, 3);
            Matrix rotacao = Matrix.CreateRotationX(tank.CannonRotation) * Matrix.CreateRotationY(tank.TurretRotation) * Matrix.CreateFromQuaternion(tank.rotacaoFinal.Rotation);
            offset = Vector3.Transform(offset, rotacao);
            direcao = Vector3.Transform(Vector3.Cross(tank.newRigth, tank.newNormal), rotacao);
            position = tank.position + offset;
            boundingSphere = new BoundingSphere();
            boundingSphere.Radius = 0.3f;
        }
Ejemplo n.º 10
0
 public PursuitEnemy(Model model, Vector3 position,GraphicsDevice device, Camera camera,Tank tank)
     : base(model, device, camera)
 {
     tankBox = new BoundingBox(MIN, MAX);
     CurrentPosition = position;
     pickPosition = CurrentPosition;
     translation = Matrix.CreateTranslation(Map.MapToWorld(new Point(10, 10)));
     velocity = Vector3.Zero;
     new Tank(model, device, camera);
     steer = new Steering(100f, 100f);
     map = new Map();
     pathfinder = new Pathfinder(map);
     isMoving = false;
     initialAngle = MathHelper.PiOver2;
     moveorder = 0;
     mousepick = new MousePicking(device, camera);
     targetTank = tank;
 }
Ejemplo n.º 11
0
        public void Update(GameTime gametime, Vector3 posicao, Vector3 novaDirecao, Tank tank)
        {
            moverParaTraseiraTank(tank);

            //para cada Update retiram-se x particulas da lista nao ativa e colocam-se as mesmas na lista de particulas ativas.
            for (int i = 0; i < 5; i++)
            {
                if (listaParticulasAtiva.Count < quantidadeParticulas-1000)
                {
                    //particula temporaria recebe a primeira particula da lista de nao ativas.
                    particulaTemp = listaParticulas.First();
                    //calcula posicao e direcao.
                    if(criarParticulas && tank.playerControl)
                        particulaTemp.CreateParticle(gametime, posicaoCentro, larguraRetangulo, alturaRetangulo, novaDirecao, tank, worldMatrix);
                    //adiciona particula a lista ativa.
                    listaParticulasAtiva.Add(particulaTemp);
                    //remove da lista nao ativa.
                    listaParticulas.Remove(particulaTemp);
                }
            }

            foreach (Particula p in listaParticulasAtiva)
            {
                //Update de cada particula da lista ativa.
                p.Update(gametime);
                //se a particula ultrapassar a posicao em Y de -10...
                if (p.posicao.Y < -10f)
                {
                    //...é adicionada á lista nao ativa...
                    listaParticulas.Add(p);
                }

            }
            //... e é removida da lista ativa.
            listaParticulasAtiva.RemoveAll(particula => particula.posicao.Y < -10f);
        }
Ejemplo n.º 12
0
        public void CreateParticle(GameTime gametime, Vector3 posicaoCentro, float larguraRetangulo, float alturaRetangulo, Vector3 novaDirecao, Tank tank, Matrix worldSistema)
        {
            worldMatrix = worldSistema;
            centro      = new Vector3(0, 0, 0);
            time       += (float)gametime.ElapsedGameTime.TotalMilliseconds;
            //geracao de valores random para definir posicao e magnitude
            randomPosicao   = RandomGenerator.getRandomNext();
            randomMagnitude = RandomGenerator.getRandomMinMax();

            magnitudeLargura = randomMagnitude;
            magnitudeAltura  = randomMagnitude;


            //para definir a posicao soma-se ao centro o valor da largura do retangulo mais a magnitude para que encontre
            //em ponto intermiedio entre o centro e o limite exterior.
            posicaoX     = centro.X + larguraRetangulo * magnitudeLargura;
            posicaoY     = centro.Y /*+ alturaRetangulo * magnitudeAltura*/;
            this.posicao = new Vector3(posicaoX, posicaoY, centro.Z);

            //criaçao dos vertices que compoem a particula, um recebe a posicao calculada o outro é criado um pouco abaixo.
            vertices[0].Position = this.posicao;
            vertices[0].Color    = Color.DarkGreen;
            vertices[1].Position = this.posicao + new Vector3(0, 1f, 0);
            vertices[1].Color    = Color.Yellow;

            //a direcao da particula é calculada atraves do cross entre o vetor direcao do tanque e o vetor direita.
            Vector3 direcao = RandomGenerator.getRandomNextDouble() * novaDirecao + new Vector3(0, 1, 0);

            velocidade = direcao;
        }
Ejemplo n.º 13
0
 //adiionar tanque á lista
 public void Add(Tank tank)
 {
     listaTanques.Add(tank);
 }
Ejemplo n.º 14
0
 //colisoes de balas com inimigos
 //update de colisoes
 public void UpdateColisions(Tank tank)
 {
     colisionDetection(tank);
 }
Ejemplo n.º 15
0
        /// <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);
            //Criar e definir o resterizerState a utilizar para desenhar a geometria
            RasterizerState rasterizerState = new RasterizerState();
            //rasterizerState.CullMode = CullMode.None;
            //rasterizerState.FillMode = FillMode.WireFrame;
            rasterizerState.MultiSampleAntiAlias = true;
            GraphicsDevice.RasterizerState = rasterizerState;
            // TODO: use this.Content to load your game content here

            //Camera.Initialize(GraphicsDevice);

            mapaAlturas = Content.Load<Texture2D>("mapaAlturas");
            textura = Content.Load<Texture2D>("grass50x50");
            terreno = new Terreno(GraphicsDevice, mapaAlturas, mapaAlturas, 1f, textura);
            //terreno2 = new Terreno2(GraphicsDevice, mapaAlturas, mapaAlturas, 1f, textura);
            VertexPositionNormalTexture[] vertices = terreno.getVertices();
            tank = new Tank(GraphicsDevice, terreno.getVertices(), terreno.larguraMapa,new Vector3(10,20,10), true,Content);
            tankEnimigo = new Tank(GraphicsDevice, terreno.getVertices(), terreno.larguraMapa,new Vector3(80,20,80) ,false,Content);
            tankEnimigo2 = new Tank(GraphicsDevice, terreno.getVertices(), terreno.larguraMapa, new Vector3(80, 20, 20), false, Content);
            tankEnimigo3 = new Tank(GraphicsDevice, terreno.getVertices(), terreno.larguraMapa, new Vector3(70, 20, 50), false, Content);
            listaTanques.Add(tank);
            listaTanques.Add(tankEnimigo);
            listaTanques.Add(tankEnimigo2);
            listaTanques.Add(tankEnimigo3);
            colisionManager = new ColisionManager(listaTanques);

            cameraSurfaceFollow = new CameraSurfaceFollow(graphics, vertices, mapaAlturas.Width);
            camera = new CameraAula(graphics);
            cameraTank = new CameraTank(graphics, vertices, mapaAlturas.Width, tank.getPosition(), tank.getWorldMAtrix(),tank.view);
            camera2 = new CameraVersao2();
            effect = new BasicEffect(GraphicsDevice);
            mousePosition = new Vector2(0, 0);
            IsMouseVisible = false;
            cameraAtiva = CameraAtiva.free;

            //float aspectRatio = (float)GraphicsDevice.Viewport.Width / GraphicsDevice.Viewport.Height;

            //effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 0.1f, 1000.0f);
            tank.LoadContent(Content);
            tankEnimigo.LoadContent(Content);
            tankEnimigo2.LoadContent(Content);
            tankEnimigo3.LoadContent(Content);
            BulletManager.Initialize(tank,Content);
            IA.Initialize();
        }
        public override void Initialize()
        {
            ground = new Ground(Game.Content.Load<Model>(@"Models/Ground/Ground"));

            models.Add(new SkyBox(
                   Game.Content.Load<Model>(@"Models/Skybox/skybox")));
            tank = new Tank(Game.Content.Load<Model>(@"Models/Tank/tank"), (((Game1)Game).GraphicsDevice), ((Game1)Game).camera);

            base.Initialize();
        }
Ejemplo n.º 17
0
        public void updateCamera( Vector3 posicaoTank, Matrix worldTank, Matrix viewTank, Tank tank)
        {
            //rotacao = Matrix.CreateFromYawPitchRoll(yaw, 0, pitch);
            KeyboardState kb = Keyboard.GetState();
            if (kb.IsKeyDown(Keys.D) )
            {
                //rotacao += Matrix.CreateRotationY(MathHelper.ToRadians( tank.rotacaoY));
                //this.posicao.Z -= 2;
                //this.posicao.Y += 5;
            }
            if (kb.IsKeyDown(Keys.A))
            {
                //rotacao -= Matrix.CreateRotationY(MathHelper.ToRadians(-tank.rotacaoY));
                //this.posicao.Z -= 2;
                //this.posicao.Y += 5;
            }
            if(  kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.W))
            {

            }

            Vector3 offset = new Vector3(0,10,-20);
            rotacao = Matrix.CreateRotationY(MathHelper.ToRadians(tank.rotacaoY));
            Vector3 transformOffset = Vector3.Transform(offset, rotacao);
            posicao = transformOffset + posicaoTank;

            view = Matrix.CreateLookAt(posicao, posicaoTank,Vector3.Up);
        }
Ejemplo n.º 18
0
        private void moverParaTraseiraTank(Tank tank)
        {
            Vector3 offset = new Vector3(-0.6f, 0.2f, -1f);
            Matrix rotacao =  Matrix.CreateTranslation(offset) * Matrix.CreateFromQuaternion(tank.rotacaoFinal.Rotation);
            Vector3 transformOffset = Vector3.Transform(offset, rotacao);
            this.posicaoCentro = transformOffset + tank.position;

            this.worldMatrix =  rotacao;
            this.worldMatrix.Translation = transformOffset + tank.position;
        }
Ejemplo n.º 19
0
        public void Update(GameTime gameTime, Tank playerTank, List<Tank> listTanksInimigos)
        {
            if (!tankDestroyed)
            {

                findNormal();
                boundingSphere.Center = this.position;

                if(playerControl)
                {
                    HandleTankInput(0.02f,gameTime);
                    UpdateTankRotation();
                    //sistemaParticulas.Update(gameTime, posicaoSistemaParticulas());
                }
                else
                {
                    IAControl(playerTank.position, listTanksInimigos);

                }

                if (bala != null)
                    bala.Update(gameTime, this);

            }

            //particulas

            sistemaParticulasTraseira.Update(gameTime, position , Vector3.Cross(newNormal, newRigth), this);
        }
Ejemplo n.º 20
0
        public override void Initialize()
        {
            ground = new Ground(Game.Content.Load<Model>(@"Models/Ground/Ground"));

            models.Add(new SkyBox(
                   Game.Content.Load<Model>(@"Models/Skybox/skybox")));
            tank = new Tank(Game.Content.Load<Model>(@"Models/Tank/tank"), (((Game1)Game).GraphicsDevice), ((Game1)Game).camera);
            //pursuitenemy = new PursuitEnemy(Game.Content.Load<Model>(@"Models/Tank/tank"), (((Game1)Game).GraphicsDevice), ((Game1)Game).camera);
            for (int i = 0; i < wallstone.Length; i++)
            {
                Vector3 stoneposition = map.MapToWorld(map.barrierList[i], true);
                wallstone[i] = new Wallstone(Game.Content.Load<Model>(@"Models/Obstacle/stone"), stoneposition);
                obstacles.Add(wallstone[i]);
            }

            //for(int x=0; x<21; x++)
            //{
            //    for (int y = 0; y < 21; y++)
            //    {
            //        if (y == 0 ||x==0 || y==20||x==20)
            //        {
            //            AddWall(-1200 + y * 120, -1200 + x * 120);
            //        }

            //    }
            //}
            for (int x = -1 * 1200; x <= 1200; x += 120)
            {
                AddWall(x, 1200);
                AddWall(x, -1200);
                AddWall(1200, x);
                AddWall(-1200, x);

            }

            base.Initialize();
        }
Ejemplo n.º 21
0
        protected override void Update(GameTime gameTime)
        {
            gameSeconds = gameTime;
            key         = Keyboard.GetState();
            if (key.IsKeyDown(Keys.Escape) && prekey.IsKeyUp(Keys.Escape))
            {
                if (gameState == GameState.GameClient || gameState == GameState.GameServer)
                {
                    if (start_cRec)
                    {
                        cRec.Abort();
                        start_cRec = false;
                    }
                    if (start_tRec)
                    {
                        tRec.Abort();
                        start_tRec = false;
                    }
                    if (start_gameClientRec)
                    {
                        gameClientRec.Abort();
                        start_gameClientRec = false;
                        Client.tanks.ElementAt(Client.slot).alive = false;
                    }
                    if (start_gameServerRec)
                    {
                        gameServerRec.Abort();
                        start_gameServerRec             = false;
                        Server.tanks.ElementAt(0).alive = false;
                    }
                    gameState = GameState.Menu;
                }
            }
            switch (gameState)
            {
            case GameState.Menu:
                if (key.IsKeyDown(Keys.Up) && prekey.IsKeyUp(Keys.Up))
                {
                    OptionCounter--;
                    optionsCounter = OptionCounter;
                }
                if (key.IsKeyDown(Keys.Down) && prekey.IsKeyUp(Keys.Down))
                {
                    OptionCounter++;
                    optionsCounter = OptionCounter;
                }
                if (key.IsKeyDown(Keys.Enter) && prekey.IsKeyUp(Keys.Enter))
                {
                    switch (option)
                    {
                    case MenuOptions.CreateGame:
                        gameState = GameState.ExpectationServer;
                        break;

                    case MenuOptions.EnterGame:
                        gameState = GameState.ConnectedClient;
                        break;

                    case MenuOptions.Exit:
                        Exit();
                        break;
                    }
                }
                break;

            case GameState.ExpectationServer:
                if (Server.numConnectedClients < 3)
                {
                    if (!start_tRec)
                    {
                        Server.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_green"), Content.Load <Texture2D>("g"), new Vector2(30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                        //Запускаем поток принятие сообщений
                        tRec = new Thread(new ThreadStart(Server.ReceiverServer));
                        tRec.Start();
                        start_tRec = true;
                    }
                    if (Server.numConnectedClients != quantuityClient)
                    {
                        quantuityClient++;
                        switch (Server.numConnectedClients)
                        {
                        case 1:
                            Server.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_yellow"), Content.Load <Texture2D>("y"), new Vector2(screenWidht - 30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;

                        case 2:
                            Server.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_red"), Content.Load <Texture2D>("r"), new Vector2(30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;

                        case 3:
                            Server.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_blue"), Content.Load <Texture2D>("b"), new Vector2(screenWidht - 30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;
                        }
                    }
                }
                for (int i = 0; i < Server.numConnectedClients; i++)
                {
                    if (Server.AddressClient[i] != null)
                    {
                        Server.SendSlot(Server.AddressClient[i]);
                    }
                }
                if (key.IsKeyDown(Keys.Enter) && prekey.IsKeyUp(Keys.Enter))
                {
                    tRec.Abort();
                    start_tRec = false;
                    gameState  = GameState.Countdown;
                    countDown  = gameTime.TotalGameTime.Seconds;
                    Server.InitializateJsonTanks();
                    for (int i = 0; i < Server.numConnectedClients; i++)
                    {
                        Server.SendStartGame(Server.AddressClient[i], "start");
                    }
                }
                break;

            case GameState.ConnectedClient:
                if (Client.connect)
                {
                    if (!start_cRec)
                    {
                        cRec = new Thread(new ThreadStart(Client.ReceiverClient));
                        cRec.Start();
                        start_cRec = true;
                    }
                    if (Client.slot != 0)
                    {
                        Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_green"), Content.Load <Texture2D>("g"), new Vector2(30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                        switch (Client.slot)
                        {
                        case 1:
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_yellow"), Content.Load <Texture2D>("y"), new Vector2(screenWidht - 30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;

                        case 2:
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_red"), Content.Load <Texture2D>("r"), new Vector2(30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_yellow"), Content.Load <Texture2D>("y"), new Vector2(screenWidht - 30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;

                        case 3:
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_blue"), Content.Load <Texture2D>("b"), new Vector2(screenWidht - 30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_red"), Content.Load <Texture2D>("r"), new Vector2(30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_yellow"), Content.Load <Texture2D>("y"), new Vector2(screenWidht - 30, 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                            break;
                        }
                        gameState = GameState.ExpectationClient;
                    }
                }
                else
                {
                    Client.Send();
                }
                break;

            case GameState.ExpectationClient:
                if (Client.InsertSlot != 0 && Client.tanks.Count - 1 < Client.InsertSlot)
                {
                    switch (Convert.ToInt32(Client.InsertSlot))
                    {
                    case 2:
                        Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_red"), Content.Load <Texture2D>("r"), new Vector2(30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                        break;

                    case 3:
                        Client.tanks.Add(new Tank(Content.Load <Texture2D>("Tank_blue"), Content.Load <Texture2D>("b"), new Vector2(screenWidht - 30, screenHeight - 30), rechair, shell_speed, speed, angle, HP, turn_speed, graphics));
                        break;
                    }
                    Client.InsertSlot = 0;
                }
                Client.Send();
                if (Client.startGame)
                {
                    cRec.Abort();
                    start_cRec = false;
                    Client.InitializateJsonTanks();
                    gameState = GameState.Countdown;
                    countDown = gameTime.TotalGameTime.Seconds;
                }
                break;

            case GameState.GameServer:
                if (!start_gameServerRec)
                {
                    gameServerRec = new Thread(new ThreadStart(Server.ReceiverTank));
                    gameServerRec.Start();
                    start_gameServerRec = true;
                }
                tank = Server.tanks.ElementAt(0);
                if (tank.alive)
                {
                    tank.Move(gameTime);
                    tank.Shoot(gameTime, key, prekey);
                }
                Server.tanks.ElementAt(0).HP = Int32.Parse(Server.jsonTanks.tanks.ElementAt(0).HP);
                for (int i = 1; i < Server.jsonTanks.number; i++)
                {
                    JsonTank tank = Server.jsonTanks.tanks.ElementAt(i);
                    Server.tanks.ElementAt(i).HP                = Int32.Parse(Server.jsonTanks.tanks.ElementAt(i).HP);
                    Server.tanks.ElementAt(i).rotationAngle     = Convert.ToSingle(Server.jsonTanks.tanks.ElementAt(i).rotationAngle);
                    Server.tanks.ElementAt(i).position          = new Vector2(Convert.ToSingle(Server.jsonTanks.tanks.ElementAt(i).positionX), Convert.ToSingle(Server.jsonTanks.tanks.ElementAt(i).positionY));
                    Server.tanks.ElementAt(i).shells_on_baraban = Int32.Parse(tank.shellOnBaraban);
                    Server.tanks.ElementAt(i).shells            = new List <Shell>();
                    for (int j = 0; j < tank.shells.Count(); j++)
                    {
                        Server.tanks.ElementAt(i).shells.Add(new Shell(Server.tanks.ElementAt(i).shell, Server.tanks.ElementAt(i).shell_speed, new Vector2(Convert.ToSingle(tank.shells.ElementAt(j).positionX), Convert.ToSingle(tank.shells.ElementAt(j).positionY)), Convert.ToSingle(tank.shells.ElementAt(j).angle)));
                    }
                }
                foreach (var Tank in Server.tanks)
                {
                    foreach (var shell in Tank.shells)
                    {
                        foreach (var InTank in Server.tanks)
                        {
                            if (shell.Hit(InTank) && tank != InTank)
                            {
                                tank.delete_shells.Add(shell);
                                InTank.HP--;
                                break;
                            }
                        }
                    }
                    Tank.DeleteShells();
                }
                Server.DeleteTank();
                Server.jsonTanks.number = Server.tanks.Count;
                for (int i = 0; i < Server.tanks.Count; i++)
                {
                    Tank             tank   = Server.tanks.ElementAt(i);
                    List <JsonShell> shells = new List <JsonShell>();
                    for (int j = 0; j < tank.shells.Count; j++)
                    {
                        shells.Add(new JsonShell()
                        {
                            positionX = tank.shells.ElementAt(j).position.X.ToString(),
                            positionY = tank.shells.ElementAt(j).position.Y.ToString(),
                            angle     = tank.shells.ElementAt(j).angle.ToString()
                        });
                    }
                    Server.jsonTanks.tanks[i] = new JsonTank()
                    {
                        slot           = i.ToString(),
                        HP             = tank.HP.ToString(),
                        rotationAngle  = tank.rotationAngle.ToString(),
                        positionX      = tank.position.X.ToString(),
                        positionY      = tank.position.Y.ToString(),
                        shellOnBaraban = tank.shells_on_baraban.ToString(),
                        shells         = shells
                    };
                }
                string serialized = JsonConvert.SerializeObject(Server.jsonTanks);
                for (int i = 0; i < Server.numConnectedClients; i++)
                {
                    Server.SendTanks(Server.AddressClient[i], serialized);
                }
                break;

            case GameState.GameClient:
                if (!start_gameClientRec)
                {
                    gameClientRec = new Thread(new ThreadStart(Client.ReceiverTanks));
                    gameClientRec.Start();
                    start_gameClientRec = true;
                }
                tank = Client.tanks.ElementAt(Client.slot);
                if (tank.alive)
                {
                    tank.Move(gameTime);
                    tank.Shoot(gameTime, key, prekey);
                }
                Client.SendTank(Client.addressServer);
                for (int i = 0; i < Client.jsonTanks.number; i++)
                {
                    JsonTank tank = Client.jsonTanks.tanks.ElementAt(i);
                    Client.tanks.ElementAt(i).HP = Int32.Parse(tank.HP);
                    if (i != Client.slot)
                    {
                        Client.tanks.ElementAt(i).shells            = new List <Shell>();
                        Client.tanks.ElementAt(i).rotationAngle     = Convert.ToSingle(tank.rotationAngle);
                        Client.tanks.ElementAt(i).position          = new Vector2(Convert.ToSingle(tank.positionX), Convert.ToSingle(tank.positionY));
                        Client.tanks.ElementAt(i).shells_on_baraban = Int32.Parse(tank.shellOnBaraban);
                        for (int j = 0; j < tank.shells.Count(); j++)
                        {
                            Client.tanks.ElementAt(i).shells.Add(new Shell(Client.tanks.ElementAt(i).shell, Client.tanks.ElementAt(i).shell_speed, new Vector2(Convert.ToSingle(tank.shells.ElementAt(j).positionX), Convert.ToSingle(tank.shells.ElementAt(j).positionY)), Convert.ToSingle(tank.shells.ElementAt(j).angle)));
                        }
                    }
                }
                foreach (var Tank in Client.tanks)
                {
                    foreach (var shell in Tank.shells)
                    {
                        foreach (var InTank in Client.tanks)
                        {
                            if (shell.Hit(InTank) && tank != InTank)
                            {
                                tank.delete_shells.Add(shell);
                                InTank.HP--;
                                break;
                            }
                        }
                    }
                    Tank.DeleteShells();
                }
                Server.jsonTanks.number = Client.tanks.Count;
                for (int i = 0; i < Client.tanks.Count; i++)
                {
                    Tank             tank   = Client.tanks.ElementAt(i);
                    List <JsonShell> shells = new List <JsonShell>();
                    for (int j = 0; j < tank.shells.Count; j++)
                    {
                        shells.Add(new JsonShell()
                        {
                            positionX = tank.shells.ElementAt(j).position.X.ToString(),
                            positionY = tank.shells.ElementAt(j).position.Y.ToString(),
                            angle     = tank.shells.ElementAt(j).angle.ToString()
                        });
                    }
                    Server.jsonTanks.tanks[i] = new JsonTank()
                    {
                        slot           = i.ToString(),
                        HP             = tank.HP.ToString(),
                        rotationAngle  = tank.rotationAngle.ToString(),
                        positionX      = tank.position.X.ToString(),
                        positionY      = tank.position.Y.ToString(),
                        shellOnBaraban = tank.shells_on_baraban.ToString(),
                        shells         = shells
                    };
                }
                string sserialized = JsonConvert.SerializeObject(Client.jsonTanks);
                Client.SendTanks(Client.addressServer, sserialized);
                Client.DeleteTank();
                break;

            case GameState.Countdown:
                if (gameTime.TotalGameTime.Seconds - 3 == countDown && Server.numConnectedClients != 0)
                {
                    gameState = GameState.GameServer;
                }
                if (gameTime.TotalGameTime.Seconds - 3 == countDown && Client.connect)
                {
                    gameState = GameState.GameClient;
                }
                break;
            }

            prekey = key;

            base.Update(gameTime);
        }
Ejemplo n.º 22
0
 public void TargetPlayer(Tank playerTank)
 {
     this.targetTank = playerTank;
 }
Ejemplo n.º 23
0
        public void updateCamera(Vector3 posicaoTank, Matrix worldTank, Matrix viewTank, Tank tank)
        {
            //rotacao = Matrix.CreateFromYawPitchRoll(yaw, 0, pitch);
            KeyboardState kb = Keyboard.GetState();

            if (kb.IsKeyDown(Keys.D))
            {
                //rotacao += Matrix.CreateRotationY(MathHelper.ToRadians( tank.rotacaoY));
                //this.posicao.Z -= 2;
                //this.posicao.Y += 5;
            }
            if (kb.IsKeyDown(Keys.A))
            {
                //rotacao -= Matrix.CreateRotationY(MathHelper.ToRadians(-tank.rotacaoY));
                //this.posicao.Z -= 2;
                //this.posicao.Y += 5;
            }
            if (kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.W))
            {
            }

            Vector3 offset = new Vector3(0, 10, -20);

            rotacao = Matrix.CreateRotationY(MathHelper.ToRadians(tank.rotacaoY));
            Vector3 transformOffset = Vector3.Transform(offset, rotacao);

            posicao = transformOffset + posicaoTank;

            view = Matrix.CreateLookAt(posicao, posicaoTank, Vector3.Up);
        }