Ejemplo n.º 1
0
    private void FixedUpdate()
    {
        float radius = Mathf.Max(transform.lossyScale.x, transform.lossyScale.y, transform.lossyScale.z);

        Collider2D[]     overlappedCols = Physics2D.OverlapCircleAll(transform.position, radius);
        List <PlayerRPC> rpcsNotFound   = new List <PlayerRPC>(previousFoundRPCs);

        foreach (Collider2D col in overlappedCols)
        {
            PlayerRPC prpc = col.GetComponent <PlayerRPC>();
            if (prpc)
            {
                if (!rpcsNotFound.Contains(prpc))
                {
                    prpc.SetCondition(ConditionToString(Condition));
                    previousFoundRPCs.Add(prpc);
                }
                else
                {
                    rpcsNotFound.Remove(prpc);
                }
            }
        }
        while (rpcsNotFound.Count > 0)
        {
            rpcsNotFound[0].SetCondition(ConditionToString(PlayerCondition.NONE));
            rpcsNotFound.RemoveAt(0);
        }
    }
    void Update()
    {
        if (readyToStart)
        {
            MakeGamePlayer();
        }

        if (refreshData)
        {
            foreach (TransformVO tv in dataList)
            {
                if (tv.socketId != myId) //내가 아니라면
                {
                    GameObject p = null;
                    players.TryGetValue(tv.socketId, out p);
                    if (p == null) //해당 유저는 새롭게 접속한 것이니 갱신해서 넣어준다.
                    {
                        p = MakeRemotePlayer(tv);
                        players.Add(tv.socketId, p);
                    }

                    //생성된 애들에 대해서는 데이터를 갱신한다.
                    PlayerRPC remoteRPC = p.GetComponent <PlayerRPC>();
                    remoteRPC.SetTransform(tv.point, tv.rotation);
                }
            }
            refreshData = false;
        }
    }
    private GameObject MakeRemotePlayer(TransformVO data)
    {
        GameObject remotePlayer = Instantiate(tankPrefab, data.point, Quaternion.identity);

        remotePlayer.GetComponent <SpriteRenderer>().color = Color.red;
        PlayerRPC remoteRPC = remotePlayer.GetComponent <PlayerRPC>();

        remoteRPC.SetRemote();
        remoteRPC.SetTransform(data.point, data.rotation);
        return(remotePlayer);
    }
Ejemplo n.º 4
0
    private void assignTeam(Player player)
    {
        Layers layer = Layers.Team1Actor;

        if (this.firstPlayerJoined)
        {
            layer = Layers.Team2Actor;
        }

        this.firstPlayerJoined = true;
        player.Team            = layer;

        Debug.Log("Assigned layer: " + layer);

        PlayerRPC.SetPlayerTeam(player.ID, (int)player.Team);
    }
Ejemplo n.º 5
0
    private void OnPlayerConnected(NetworkPlayer networkPlayer)
    {
        if (!this.firstPlayerJoined)
        {
            ObjectRPC.LoadLevel(0);
        }
        else
        {
            ObjectRPC.LoadLevel(networkPlayer, 0);
        }

        Debug.Log("A new player has joined.");
        Debug.Log("Current number of players: " + base.Players.Count);

        foreach (Player p in base.Players.Values)
        {
            PlayerRPC.NewPlayerJoined(networkPlayer, p.NetworkPlayerInfo, p.ID);
        }

        // Generate a viewID for the new player.
        NetworkViewID viewID = Network.AllocateViewID();

        // Notice everyone that the new player has joined.
        PlayerRPC.NewPlayerJoined(networkPlayer, viewID);

        Player newPlayer = base.Players[viewID];

        // Tell the new player the teams of all the other players.
        foreach (Player p in base.Players.Values)
        {
            if (!(p.ID == base.NetworkControl.LocalViewID || p.ID == newPlayer.ID))
            {
                PlayerRPC.SetPlayerTeam(newPlayer.NetworkPlayerInfo, p.ID, (int)p.Team);
            }
        }

        this.assignTeam(newPlayer);

        // Sync the existing game world with the new player.
        this.CurrentLevel.SyncNewPlayer(newPlayer);
    }