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); } } }
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); } } }