//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; } } } }
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; }
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; }
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; }
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); }
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); }
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)); } }
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]; }
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; }
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; }
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); }
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; }
//adiionar tanque á lista public void Add(Tank tank) { listaTanques.Add(tank); }
//colisoes de balas com inimigos //update de colisoes public void UpdateColisions(Tank tank) { colisionDetection(tank); }
/// <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(); }
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); }
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; }
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); }
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(); }
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); }
public void TargetPlayer(Tank playerTank) { this.targetTank = playerTank; }
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); }