Пример #1
0
        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);
                }
            }
        }
Пример #2
0
    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());
            }
        }
    }
Пример #3
0
 void SnapshotHandler(byte[] data)
 {
     if (state != SceneState.Main)
     {
         SceneManager.LoadScene("Main");
     }
     else
     {
         SnapshotObj snapshotObj = MessagePackSerializer.Deserialize <SnapshotObj>(data);
         unitManager.SetSnapshot(snapshotObj);
     }
 }
Пример #4
0
    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);
        }
    }