九宮格廣播

/////////////////////////////////////////////////////////
//// 九宮格廣播,廣播給周圍九宮範圍內的對象
/////////////////////////////////////////////////////////
BOOL CGameWorld::Broadcast9GridMessage(POINTS ptCurTile, int nGridWidth, int nGridHeight, DWORD dwMsg, LPCSTR buf, int nLen)
{
	static WORD s_wCreateMsgID = MAKE_MSGID(MAINACTION_CIRCULTYPE_BCM, MAINACTION_MSGID_CREATE);
	static WORD s_wDestroyMsgID= MAKE_MSGID(MAINACTION_CIRCULTYPE_BCM, MAINACTION_MSGID_DESTROY);
	MapItemEnumMsgData Data;
	Data.buf=buf;
	Data.dwMsg=dwMsg;
	Data.nLen=nLen;
	RECT rcBroadcast;
	POINT pt;
	pt.x=ptCurTile.x;
	pt.y=ptCurTile.y;
	m_9GridMan.GetScreenAll9Grid(pt,nGridWidth,nGridHeight,rcBroadcast);
	m_BroadcastMonitor.BroadCast(pt.x/16,pt.y/16);
	
	int nListCount = 4096;
	SNAP_ITEM snap[4096]; 
	if(dwMsg == s_wCreateMsgID || dwMsg == s_wDestroyMsgID)
	{
		if(!m_MapContainerDecorate.SnapshotRectItem(rcBroadcast, nListCount, snap))
		{
			return FALSE;
		}
	}
	else
	{
		if(!m_MapContainerDecorate.SnapshotRectActorItem(rcBroadcast, nListCount, snap))
		{
			return FALSE;
		}
	}

	for(int i = 0; i < nListCount; i++)
	{
		if(!(m_MapContainer.GetTile(snap[i].ptTile).FindItem(snap[i].pItem)))
		{
			continue;
		}

		m_MapItemEnumSink.OnEnumMapItemMessage(snap[i].ptTile, snap[i].pItem, &Data);
	}

	return TRUE;
}

發佈了70 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章