示例#1
0
文件: DC_Game.cs 项目: benotter/DigiC
    [Server] public void RequestAvatar(DC_Player player)
    {
        Debug.Log("Avatar Request from " + player.playerName);

        if (!player.avatarSpawn || player.avatar)
        {
            return;
        }

        if (!player.avatarSpawn.lockedIn)
        {
            return;
        }

        GameObject avatarO = Instantiate(avatarPrefab);
        DC_Avatar  avatar  = avatarO.GetComponent <DC_Avatar>();

        avatar.playerO = player.gameObject;

        if (NetworkServer.SpawnWithClientAuthority(avatarO, player.gameObject))
        {
            player.avatar = avatar; // Only on Server

            player.avatarO = avatarO;
            player.RpcSetAvatar(avatarO);

            player.avatarSpawn.PositionAvatar(avatar);
        }
        else
        {
            NetworkServer.Destroy(avatarO);
        }
    }
示例#2
0
文件: DC_Game.cs 项目: benotter/DigiC
    [Server] public void RequestAvatarSpawn(DC_Player player)
    {
        Debug.Log("AvatarSpawn Request from " + player.playerName);

        if (player.avatarSpawnO)
        {
            return;
        }

        GameObject      avatarSpawnO = Instantiate(avatarSpawnPrefab);
        DC_Avatar_Spawn avatarSpawn  = avatarSpawnO.GetComponent <DC_Avatar_Spawn>();

        avatarSpawn.playerO = player.gameObject;

        if (NetworkServer.SpawnWithClientAuthority(avatarSpawnO, player.gameObject))
        {
            player.avatarSpawn = avatarSpawn; // Only on Server

            player.avatarSpawnO = avatarSpawnO;
            player.RpcSetAvatarSpawn(avatarSpawnO);
        }
        else
        {
            NetworkServer.Destroy(avatarSpawnO);
        }
    }
示例#3
0
    // Server-Side Commands

    // Client-Side Commands

    [ClientRpc] public void RpcSetAvatar(GameObject aO)
    {
        DC_Avatar avatar = aO.GetComponent <DC_Avatar>();
        DC_Player player = avatar.playerO.GetComponent <DC_Player>();

        this.avatar = avatar;
        this.player = player;
    }
示例#4
0
文件: DC_Game.cs 项目: benotter/DigiC
    [Server] public void RemPlayer(DC_Player player)
    {
        // Player gridCell is auto-cleared by handy - dandy unity null referencing
        gamePlayerCount--;
        RpcPlayerLeft(player.gameObject);

        gameGrid.UpdateAllClients();
    }
示例#5
0
    void Update()
    {
        ServerUpdate();
        ClientUpdate();

        if (playerO && !player)
        {
            player = playerO.GetComponent <DC_Player>();
        }
    }
示例#6
0
文件: DC_Game.cs 项目: benotter/DigiC
    [Server] public void AddPlayer(GameObject playerO)
    {
        if (!gameGrid)
        {
            preStartPlayers.Add(playerO);
            return;
        }

        DC_Player player = playerO.GetComponent <DC_Player>();

        player.RpcGameSetup(gameObject);

        if (player.connectionToClient.address == "localClient")
        {
            gameOwnerPlayerObj = player.gameObject;
        }

        // Whhooooh, Lad.
        bool breaker = false;

        for (int x = 1; x <= 3; x++)
        {
            for (int y = 1; y <= 3; y++)
            {
                if (gameGrid.CheckPosition(x, y))
                {
                    breaker = gameGrid.SetPlayerToPosition(player.gameObject, x, y);
                }
                else
                {
                    Debug.Log("Bad X pos: " + x);
                    Debug.Log("Bad Y pos: " + y);
                }

                if (breaker)
                {
                    break;
                }
            }
            if (breaker)
            {
                break;
            }
        }


        gamePlayerCount++;
        RpcPlayerJoined(player.gameObject);

        gameGrid.UpdateAllClients();
    }
示例#7
0
    [Server] public bool SetPlayerToPosition(GameObject playerO, int x, int y)
    {
        if (!CheckPosition(x, y))
        {
            return(false);
        }

        DC_Player player = playerO.GetComponent <DC_Player>();

        if (player.gameGridX > 0)
        {
            int oldPos = GetPosInt(player.gameGridX, player.gameGridY);

            // var oldCell = cells[oldPos];
            var oldCell = gridCells[oldPos];

            oldCell.player = null;

            // cells[oldPos] = oldCell;
            // cells.Dirty(oldPos);

            gridCells[oldPos] = oldCell;

            RpcSetCell(oldPos, oldCell);
        }

        player.gameGridX = x;
        player.gameGridY = y;

        int newPos = GetPosInt(x, y);

        // GCell cell = cells[newPos];
        GCell cell = gridCells[newPos];

        cell.player = playerO;

        // cells[newPos] = cell;
        // cells.Dirty(newPos);

        gridCells[newPos] = cell;

        player.RpcUpdatePosition(cell.cellPos);
        RpcSetCell(newPos, cell);

        return(true);
    }
示例#8
0
    public void SetRemotePlayer(DC_Player player = null)
    {
        remotePlayer = player;
        gameJoined   = !!player;

        if (player)
        {
            player.localPlayer = localPlayer;

            player.homeRoom   = this;
            player.serverGame = serverGame;
            player.gameGrid   = gameGrid;

            JoinGame();
        }
        else
        {
            LeaveGame();
        }
    }
示例#9
0
    public override void OnServerDisconnect(NetworkConnection conn)
    {
        Debug.Log("Client Left From: " + conn.address);

        GameObject playerO = conn.playerControllers[0].gameObject;
        DC_Player  player  = playerO.GetComponent <DC_Player>();

        serverGame.RemPlayer(player);

        if (player.avatarSpawnO)
        {
            NetworkServer.Destroy(player.avatarSpawnO);
        }

        if (player.avatarO)
        {
            NetworkServer.Destroy(player.avatarO);
        }

        NetworkServer.DestroyPlayersForConnection(conn);
    }
示例#10
0
 public override void OnJoinGame(DC_Player p)
 {
     TogglePlayerActive(true);
 }
示例#11
0
 public void SetPlayer(GameObject p)
 {
     player = p.GetComponent <DC_Player>();
 }
示例#12
0
 public virtual void OnJoinGame(DC_Player player)
 {
 }