コード例 #1
0
 public void CheckShipData(ref ShipStateData shipStateData)
 {
     /*shipStatesData[shipStateData.timeData.dataNumber % count] = shipStateData;
      * if (shipStateData.timeData.dataNumber > FirstElementNumber)
      *  FirstElementNumber = shipStateData.timeData.dataNumber;
      * return;*/
     if (shipStateData.timeData.dataNumber <= LastElementNumber)
     {
         return;
     }
     if (shipStateData.timeData.dataNumber == FirstElementNumber + 1)
     {
         shipStatesData[shipStateData.timeData.dataNumber % count] = shipStateData;
         FirstElementNumber = shipStateData.timeData.dataNumber;
         //AddInputData(ref shipStateData.timeData, ref shipStateData.inputData);
         //shipStatesData[shipStateData.timeData.dataNumber % count].shipData = shipStateData.shipData;
     }
     else
     {
         shipStatesData[shipStateData.timeData.dataNumber % count] = shipStateData;
         if (shipStateData.timeData.dataNumber > FirstElementNumber)
         {
             CalculateShipDataStates(FirstElementNumber, shipStateData.timeData.dataNumber);
             FirstElementNumber = shipStateData.timeData.dataNumber;
         }
         else
         {
             CalculateShipDataStates(shipStateData.timeData.dataNumber, FirstElementNumber);
         }
     }
 }
コード例 #2
0
        private void Update()
        {
            double time = DateTime.UtcNow.TimeOfDay.TotalSeconds;

            byte[] bytes;
            if (time - lastIterationTime >= iterationTime)
            {
                gameTime++;
                float deltaTime = (float)(time - lastIterationTime);
                lastIterationTime = time;
                for (int i = 0; i < players.Count; i++)
                {
                    if (players[i].Initialized && !CheckPlayerConnection(players[i]))
                    {
                        structConverter.ConvertStructToBytes(new DestroyShipActionData()
                        {
                            id = players[i].Id
                        }, DataType.DestroyShipAction, out bytes);
                        players.RemoveAt(i);
                        i--;
                        foreach (Player player in players)
                        {
                            player.SendTcpData(bytes);
                        }
                    }
                }
                ShipStateData[] shipsStateData = new ShipStateData[players.Count];
                projectilesController.Update(deltaTime);
                physicsController.CheckCollisions();

                for (int i = 0; i < players.Count; i++)
                {
                    shipsStateData[i] = players[i].GetShipStateData(time - 0.2d);
                    if (shipsStateData[i].shipData.health <= 0f)
                    {
                        DestroyShipActionData destroyShipActionData = new DestroyShipActionData()
                        {
                            id = shipsStateData[i].shipId
                        };
                        structConverter.ConvertStructToBytes(destroyShipActionData, DataType.DestroyShipAction, out bytes);
                        foreach (Player player in players)
                        {
                            player.SendTcpData(bytes);
                        }
                        players[i].CreateShip();
                        structConverter.ConvertStructToBytes(players[i].GetCreateShipActionData(), DataType.CreateShipAction, out bytes);
                        foreach (Player player in players)
                        {
                            player.SendTcpData(bytes);
                        }
                    }
                }
                structConverter.ConvertStructsToBytes(shipsStateData, DataType.ShipState, out bytes);
                foreach (Player player in players)
                {
                    udp.SendTo(bytes, player.PlayerEndPoint);
                }
            }
        }