void SendSnapshot() { ClientObj[] clientObjs = GetClientMsgPackObjs(); ChampionObj[] blueChampionObjs = Root.GetChild <WorldEntity>().GetChampionObjs(true); ChampionObj[] redChampionObjs = Root.GetChild <WorldEntity>().GetChampionObjs(false); BuildingObj[] buildingObjs = Root.GetChild <WorldEntity>().GetBuildingObj(); ActorObj[] blueVector3NoAnimObjs = Root.GetChild <WorldEntity>().GetActorObjs(true); ActorObj[] redVector3NoAnimObjs = Root.GetChild <WorldEntity>().GetActorObjs(false); UnitObj[] blueUnitObjs = Root.GetChild <WorldEntity>().GetUnitObjs(true); UnitObj[] redUnitObjs = Root.GetChild <WorldEntity>().GetUnitObjs(false); foreach (GameClient gameClient in peers.Values) { if (gameClient.Ready) { Unit unit = Root.GetChild <WorldEntity>().GetUnit(gameClient.UnitID); SnapshotObj snapshotObj = new SnapshotObj() { PlayerObj = Root.GetChild <WorldEntity>().GetUnit(gameClient.UnitID).GetPlayerObj(), ClientObjs = clientObjs, ChampionObjs = unit.Team == Team.Blue ? blueChampionObjs : redChampionObjs, BuildingObjs = buildingObjs, Vector3NoAnimObjs = unit.Team == Team.Blue ? blueVector3NoAnimObjs : redVector3NoAnimObjs, UnitObjs = unit.Team == Team.Blue ? blueUnitObjs : redUnitObjs }; Send(MessageType.Snapshot, gameClient.Peer.ID, MessagePackSerializer.Serialize(snapshotObj), PacketFlags.None); } } }
void Start() { network = GameObject.Find("Network").GetComponent <Network>(); List <TMP_Dropdown.OptionData> options = new List <TMP_Dropdown.OptionData>(); foreach (UnitType type in Enum.GetValues(typeof(UnitType))) { if (type >= UnitType.HatsuneMiku) { options.Add(new TMP_Dropdown.OptionData(type.ToString())); } } unitTypeDropdown.options = options; SnapshotObj snapshotObj = GameObject.Find("UnitManager").GetComponent <UnitManager>().GetSnapshotObj(); if (snapshotObj != null) { ChampionObj championObj = snapshotObj.ChampionObjs.ToList().FirstOrDefault(x => x.UnitID == snapshotObj.PlayerObj.UnitID); if (championObj != null) { teamDropdown.value = teamDropdown.options.FindIndex(x => x.text == championObj.Team.ToString()); nameInputField.text = championObj.DisplayName; unitTypeDropdown.value = unitTypeDropdown.options.FindIndex(x => x.text == championObj.Type.ToString()); } } }
void SnapshotHandler(byte[] data) { if (state != SceneState.Main) { SceneManager.LoadScene("Main"); } else { SnapshotObj snapshotObj = MessagePackSerializer.Deserialize <SnapshotObj>(data); unitManager.SetSnapshot(snapshotObj); } }
public void SetSnapshot(SnapshotObj snapshotObj) { this.snapshotObj = snapshotObj; Dictionary <int, GameObject> removeInstances = new Dictionary <int, GameObject>(unitInstances); UpdateData(snapshotObj.ChampionObjs, removeInstances); UpdateData(snapshotObj.BuildingObjs, removeInstances); UpdateData(snapshotObj.Vector3NoAnimObjs, removeInstances); UpdateData(snapshotObj.UnitObjs, removeInstances); foreach (var remove in removeInstances) { GameObject removeGameObject = unitInstances[remove.Key]; unitInstances.Remove(remove.Key); Destroy(removeGameObject); } if (unitInstances.ContainsKey(snapshotObj.PlayerObj.UnitID)) { GameObject playerUnitInstance = unitInstances[snapshotObj.PlayerObj.UnitID]; PlayerObj playerObj = snapshotObj.PlayerObj; ChampionObj championObj = (ChampionObj)playerUnitInstance.GetComponent <Unit>().Info; Camera.main.GetComponent <RTSCamera>().SetTarget(playerUnitInstance.transform); playerController.SetPlayerUnit(playerUnitInstance); playerController.SetPlayerObj(playerObj); playerUI.SetPlayerData(playerObj, championObj); recallUI.SetActive(championObj.AnimationNum == (byte)AnimationType.Recall); frontUI.SetPlayerData(playerObj, championObj); frontUI.SetData(snapshotObj.ClientObjs); } else { Camera.main.GetComponent <RTSCamera>().SetTarget(null); playerController.SetPlayerUnit(null); } }