Пример #1
0
        public static void OnDeleteBlockReq(Player player, MemoryStream stream)
        {
            Ultilities.Print("OnDeleteBlockReq");
            CSDeleteBlockReq req = NetworkManager.Deserialize <CSDeleteBlockReq>(stream);

            Vector2Int chunk   = Ultilities.GetChunk(req.position);
            bool       deleted = TerrainData.RemoveBlockInChunk(chunk, req.position);

            CSDeleteBlockRes res = new CSDeleteBlockRes();

            if (deleted)
            {
                res.RetCode  = 0;
                res.position = req.position;
            }
            else
            {
                res.RetCode = 3;
            }
            NetworkManager.Enqueue(player.socket, ENUM_CMD.CS_DELETE_BLOCK_RES, res);
            if (deleted)
            {
                //同步给有该chunk视野的其他玩家
                foreach (Player p in TerrainData.GetChunkViewPlayers(chunk))
                {
                    if (p.id != player.id)
                    {
                        DeleteBlockNotify(p, req.position);
                    }
                }
            }
        }
Пример #2
0
    static void Single_OnDeleteBlockReq(object obj, Action <object> callback)
    {
        CSDeleteBlockReq req = obj as CSDeleteBlockReq;
        CSDeleteBlockRes res = new CSDeleteBlockRes();

        res.RetCode = 0;
        DeleteBlock(req.position.ToVector3Int(), res.position);
        callback(res);
    }
Пример #3
0
    void DeleteBlockRes(object data)
    {
        CSDeleteBlockRes rsp = NetworkManager.Deserialize <CSDeleteBlockRes>(data);

        //Debug.Log("DeleteBlockRes,retCode=" + rsp.RetCode);
        if (rsp.RetCode == 0)
        {
            Vector3Int  pos  = new Vector3Int(rsp.position.x, rsp.position.y, rsp.position.z);
            CSBlockType type = ChunkManager.GetBlockType(rsp.position.x, rsp.position.y, rsp.position.z);
            ChunkManager.RemoveBlock(rsp.position.x, rsp.position.y, rsp.position.z);
        }
        else
        {
            FastTips.Show(rsp.RetCode);
        }
    }
Пример #4
0
    static void Single_OnDeleteBlockReq(object obj, Action <object> callback)
    {
        CSDeleteBlockReq req = obj as CSDeleteBlockReq;
        CSDeleteBlockRes res = new CSDeleteBlockRes();

        res.RetCode  = 0;
        res.position = req.position;
        if (dependenceDict.ContainsKey(req.position.ToVector3Int()))
        {
            dependenceDict.Remove(req.position.ToVector3Int());
        }
        if (orientationDict.ContainsKey(req.position.ToVector3Int()))
        {
            orientationDict.Remove(req.position.ToVector3Int());
        }
        callback(res);
    }
Пример #5
0
    void DeleteBlockRes(object data)
    {
        CSDeleteBlockRes rsp = NetworkManager.Deserialize <CSDeleteBlockRes>(data);

        //Debug.Log("DeleteBlockRes,retCode=" + rsp.RetCode);
        if (rsp.RetCode == 0)
        {
            foreach (CSVector3Int pos in rsp.position)
            {
                ChunkManager.RemoveBlock(pos.ToVector3Int());
            }
            ChunkManager.RebuildChunks();
        }
        else
        {
            FastTips.Show(rsp.RetCode);
        }
    }