zoukankan      html  css  js  c++  java
  • 玩家移动

    玩家移动
    //好长时间没看这些,好多都看不懂了
    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处理
        
    }
  • 相关阅读:
    谜题92:双绞线
    谜题91:序列杀手
    谜题90:荒谬痛苦的超类
    谜题89:泛型迷药
    谜题88:原生类型的处理
    谜题87:紧张的关系
    谜题86:有毒的括号垃圾
    谜题85:惰性初始化
    谜题84:被粗暴地中断
    easyUi DataGrid
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4162074.html
Copyright © 2011-2022 走看看