TOGGLE_POLYS flags

handleClick

TOOLMODE_TOGGLE_POLYS

    以点击的点为中心用navquery->findNearestPoly(p, halfExtents,&filter, &ref, tgt);

    找到最近的polypoly上面距离p最近的点tgt

    如果找到了

    flags ^= SAMPLE_POLYFLAGS_DISABLED;

    nav->setPolyFlags(ref, flags);

    改变这个polyflag

 

    关于flag:

    CrowdToolState::init的时候会

    crowd->getEditableFilter(0)->setExcludeFlags(SAMPLE_POLYFLAGS_DISABLED);

    从而让有disabledflagpolygon失效也就是这种polygon不可通过

    注意 crowd可以支持不同种类的fileter

    getEditableFilter(0)是获取的m_filters[0]

    这种filter目前就包含这么几种:

    enumSamplePolyFlags

{

        SAMPLE_POLYFLAGS_WALK       = 0x01,     //Ability to walk (ground, grass, road)

        SAMPLE_POLYFLAGS_SWIM       = 0x02,     //Ability to swim (water).

        SAMPLE_POLYFLAGS_DOOR       = 0x04,     //Ability to move through doors.

        SAMPLE_POLYFLAGS_JUMP       = 0x08,     //Ability to jump.

        SAMPLE_POLYFLAGS_DISABLED   = 0x10,     //Disabled polygon

        SAMPLE_POLYFLAGS_ALL        = 0xffff    //All abilities.

};

 

真正使用的时候passFilter会检查(poly->flags& m_includeFlags) != 0 && (poly->flags& m_excludeFlags) == 0

 

    可是,如果是door, flags会被设置成SAMPLE_POLYFLAGS_WALK | SAMPLE_POLYFLAGS_DOOR

    如果m_includeFlags中只有SAMPLE_POLYFLAGS_WALK,岂不是也会通过成功??

====

ConvexVolumeTool::handleMenu()

创建convex volume的工具

 

m_boxHeight控制volume的高度

m_boxDescent上下移动

m_polyOffset

 

选择Area Type  --> water

m_areaType = SAMPLE_POLYAREA_WATER;

然后再buildTileMesh的时候会:

m_pmesh->flags[i]= SAMPLE_POLYFLAGS_SWIM;

其他的Ground,Grass,Road也类似,会:

m_pmesh->flags[i]= SAMPLE_POLYFLAGS_WALK;

SAMPLE_POLYAREA_DOOR比较特殊:

m_pmesh->flags[i]= SAMPLE_POLYFLAGS_WALK | SAMPLE_POLYFLAGS_DOOR;

理解上就是,area属性表示polygon的地表类型

flags是用户自定义的可以通过什么样的方式去通过

比如ground可以以walk的方式通过

猜你喜欢

转载自blog.csdn.net/icebergliu1234/article/details/80335158
今日推荐