//---------------------------------------------------------------------------- void GameRadar::drawBackGround() { IEngineUtil* engUtil = ClientMain::getInstance().getEngine()->engineUtil(); if ( engUtil ) { VecI2 srcSize = engUtil->getTextureSize( mWorldMapName, mWorldMapGroup ); engUtil->drawTextureToSurface(mWorldMapName, mWorldMapGroup, VecI2(0,0), srcSize, mapName, mapGroup, VecI2(0,0), mMiniMapSize); } }
//---------------------------------------------------------------------------- VecI2 GameRadar::convertContainerPositionToImagePosition(VecI2 containerPos) { //获得相对控件左上角的位移 Vec2 imagePos; imagePos.x = ((Flt)containerPos.x / (Flt)mContainerSize.x) * (Flt)mMiniMapSize.x; imagePos.y = ((Flt)containerPos.y / (Flt)mContainerSize.y) * (Flt)mMiniMapSize.y; return VecI2((Int)imagePos.x, (Int)imagePos.y); }
void Game::spawnGhost() { if(num_entities<(int)entities.size()) { entities[num_entities]->reset(); } else { GameEntity* entity = entityFac->createGhost(VecI2(3, 1), maze); entities.push_back(entity); } num_entities++; }
//---------------------------------------------------------------------------- VecI2 GameRadar::convertWorldPositionToImagePosition( Vec3 worldPos ) { //获取绘制图片相对底图中心的位移 Vec2 imageOffset; imageOffset.x = ( worldPos.x - mVisibleWorldCenter.x ) * ((Flt)mMiniMapSize.x / mVisibleWorldSize.x); imageOffset.y = ( worldPos.z - mVisibleWorldCenter.y ) * ((Flt)mMiniMapSize.y / mVisibleWorldSize.y); //通过这个位移获取具体位置 Vec2 imagePos = Vec2( (Flt)mMiniMapSize.x * 0.5f, (Flt)mMiniMapSize.y * 0.5f ) + imageOffset; //修正边界值 imagePos.x = min( imagePos.x, (Flt)mMiniMapSize.x ); imagePos.x = max( 0.0f, imagePos.x ); imagePos.y = min( imagePos.y, (Flt)mMiniMapSize.y ); imagePos.y = max( 0.0f, imagePos.y ); return VecI2((I32)imagePos.x, (I32)imagePos.y); }
//---------------------------------------------------------------------------- void GameRadar::drawUnit(Vec3 pos, const Str& iconName, const Str& iconGroup) { IEngineUtil* engUtil = ClientMain::getInstance().getEngine()->engineUtil(); if ( engUtil ) { //转换坐标 VecI2 imagePos = convertWorldPositionToImagePosition(pos); //获取绘制图标单元的尺寸 VecI2 unitImageSize = engUtil->getTextureSize( iconName, iconGroup ); if ( unitImageSize.x == 0 || unitImageSize.y == 0 ) return; //绘制的图片是否缩放 VecI2 unitScaledImageSize = unitImageSize; unitScaledImageSize.x *= 1; unitScaledImageSize.y *= 1; //中央对齐 imagePos.x -= ( unitScaledImageSize.x >> 1); imagePos.y -= ( unitScaledImageSize.y >> 1); //修正边界值 if ( imagePos.x > mMiniMapSize.x - unitScaledImageSize.x ) imagePos.x = mMiniMapSize.x - unitScaledImageSize.x; if ( imagePos.y > mMiniMapSize.y - unitScaledImageSize.y ) imagePos.y = mMiniMapSize.y - unitScaledImageSize.y; if ( imagePos.x < 0 ) imagePos.x = 0; if ( imagePos.y < 0 ) imagePos.y = 0; engUtil->drawTextureToSurface( iconName, iconGroup, VecI2(0,0), unitImageSize, mapName, mapGroup, imagePos, unitScaledImageSize ); } }