• 玩家移动


    玩家移动
    //好长时间没看这些,好多都看不懂了
    void Map::UpdatePlayerPos(TgtPos pos, PlayerInfo* pl)
    {
    //    m_pLog->Logs(eLogLevel_Warning, "人物移动");
        // 检查位置包
        auto& mpos = m_spBase->GetMapPos(pos.tgtPos);
        if(!CheckMovePos(pos, pl))//纠正包不知干啥的
            return;
    
        pl->m_CurPos = pl->tgtPos;
        pl->tgtPos = pos.tgtPos;
        pl->m_fSpeed = pos.speed;
        pl->mov_face = pos.mov_face;
        pl->mov_mode = pos.mov_mode;
        pl->dir = pos.dir;
    
        int curPosX = pl->m_CurPos.x;
        int curPosY = pl->m_CurPos.y;
        int tgtPosX = pl->tgtPos.x;
        int tgtPosY = pl->tgtPos.y;
    
        //[+]设置阻挡(压测的时候取消设置)
        pos2d cur_map_pos = m_spBase->GetMapPos(curPosX, curPosY);
        pos2d tgt_map_pos = m_spBase->GetMapPos(tgtPosX, tgtPosY);
    
        int id = pl->objId.id;
        //标记移动
        m_MoveMgr.AddMask(pl);
    
        //没有发生位置移动
        if(cur_map_pos == tgt_map_pos)
            return;
    
        m_MapCellMgr.UpdateObjPos(pl, cur_map_pos, tgt_map_pos);
    
        //分配到指定的地图块上面(确定是否离开了所在块)
        int x = pl->m_nBlockX;
        int y = pl->m_nBlockY;
    
        //更新区域
        //pl->region = getRegion(tgt_map_pos);
        UpdateRegionInfo(pl, tgt_map_pos);
    
        pos2d new_block_pos = m_spBase->GetBlockPos(tgtPosX, tgtPosY);
        // 火墙移动处理
        FireWall(pl, pos.tgtPos);
    
        if((x == new_block_pos.x) && (y == new_block_pos.y))
            return ; //没变化
    
        //删除原来的
        ObjID plid;
        plid.id = id;
        plid.type = ObjID_Player;
        m_MapCellMgr.m_vecRolesBlock[x][y].Del(plid);
    
        //更新玩家附近的对象(其他玩家/怪)
        pos2d olDBlockPos = {x, y}; 
        NotifyBlock(olDBlockPos, new_block_pos, pl);
        //加入新的
        pl->m_nBlockX = new_block_pos.x;
        pl->m_nBlockY = new_block_pos.y;
        m_MapCellMgr.m_vecRolesBlock[new_block_pos.x][new_block_pos.y].Add(pl);
        //eSkillId_FireWall处理
        
    }
  • 相关阅读:
    阿里p3c(代码规范,eclipse插件、模版,idea插件)
    mac 电脑 打开隐藏文件
    groovy安装 ideal
    JNI字段描述符
    java 中函数的参数传递详细介绍
    java把函数作为参数传递
    Android获取wifi MAC,关闭的wifi不能获取
    Android权限操作之uses-permission详解
    Android Studio断点调试
    android 启动socket 失败:socket(af_inet sock_stream 0) 返回-1
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4162074.html
Copyright © 2020-2023  润新知