KLittleMap.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:19k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 2003 by Kingsoft
  3. //
  4. // File: KLittleMap.cpp
  5. // Date: 2003.05.08
  6. // Code: 边城浪子
  7. //---------------------------------------------------------------------------
  8. #include "KCore.h"
  9. #ifndef _SERVER
  10. #include "ImgRef.h"
  11. #include "KSubWorld.h"
  12. #include "KRegion.h"
  13. #include "KLittleMap.h"
  14. #include "KPlayer.h"
  15. #include    "../../Engine/Src/KSG_StringProcess.h"
  16. //---------------------------------------------------------------------------
  17. // 功能:构造函数
  18. //---------------------------------------------------------------------------
  19. KLittleMap::KLittleMap()
  20. {
  21. memset(&m_sMapRect, 0, sizeof(this->m_sMapRect));
  22. m_nMapWidth = 0;
  23. m_nMapHeight = 0;
  24. m_pbyLoadFlag = NULL;
  25. m_ppbtBarrier = NULL;
  26. m_nScreenX = 500;
  27. m_nScreenY = 100;
  28. m_nShowWidth = LITTLE_MAP_SHOW_REGION_WIDTH;
  29. m_nShowHeight = LITTLE_MAP_SHOW_REGION_HEIGHT;
  30. m_sBarrierColor.Color_dw = 0xffffff00;
  31. m_sSelfColor.Color_dw = 0x00ff00ff;
  32. m_sTeammateColor.Color_dw = 0x00ff00ff;
  33. m_sPlayerColor.Color_dw = 0x00ff00ff;
  34. m_sFightNpcColor.Color_dw = 0x00ff00ff;
  35. m_sNormalNpcColor.Color_dw = 0x00ff00ff;
  36. m_bTeammateShowFlag = TRUE;
  37. m_bPlayerShowFlag = TRUE;
  38. m_bFightNpcShowFlag = TRUE;
  39. m_bNormalNpcShowFlag = TRUE;
  40. m_bColorLoadFlag = FALSE;
  41. }
  42. //---------------------------------------------------------------------------
  43. // 功能:析构函数
  44. //---------------------------------------------------------------------------
  45. KLittleMap::~KLittleMap()
  46. {
  47. Release();
  48. m_nShowFlag = 0;
  49. }
  50. //---------------------------------------------------------------------------
  51. // 功能:清空
  52. //---------------------------------------------------------------------------
  53. void KLittleMap::Release()
  54. {
  55. if (m_ppbtBarrier)
  56. {
  57. for (int i = 0; i < m_nMapWidth * m_nMapHeight; i++)
  58. {
  59. if (!m_ppbtBarrier[i])
  60. continue;
  61. delete []m_ppbtBarrier[i];
  62. m_ppbtBarrier[i] = NULL;
  63. }
  64. delete []m_ppbtBarrier;
  65. m_ppbtBarrier = NULL;
  66. }
  67. if (m_pbyLoadFlag)
  68. {
  69. delete []m_pbyLoadFlag;
  70. m_pbyLoadFlag = NULL;
  71. }
  72. memset(&m_sMapRect, 0, sizeof(this->m_sMapRect));
  73. m_nMapWidth = 0;
  74. m_nMapHeight = 0;
  75. // m_nShowFlag = 0;
  76. }
  77. //---------------------------------------------------------------------------
  78. // 功能:初始化,分配内存空间
  79. //---------------------------------------------------------------------------
  80. void KLittleMap::Init(int nLeft, int nTop, int nRight, int nBottom)
  81. {
  82. Release();
  83. if (nRight < nLeft || nBottom < nTop)
  84. return;
  85. this->m_sMapRect.left = nLeft;
  86. this->m_sMapRect.top = nTop;
  87. this->m_sMapRect.right = nRight;
  88. this->m_sMapRect.bottom = nBottom;
  89. this->m_nMapWidth = nRight - nLeft + 1;
  90. this->m_nMapHeight = nBottom - nTop + 1;
  91. this->m_pbyLoadFlag = (BYTE*)new BYTE[m_nMapWidth * m_nMapHeight];
  92. memset(m_pbyLoadFlag, 0, sizeof(BYTE) * m_nMapWidth * m_nMapHeight);
  93. this->m_ppbtBarrier = (BYTE**)new LPVOID[m_nMapWidth * m_nMapHeight];
  94. for (int i = 0; i < m_nMapWidth * m_nMapHeight; i++)
  95. {
  96. this->m_ppbtBarrier[i] = NULL;
  97. }
  98. if (m_bColorLoadFlag == FALSE)
  99. {
  100. KIniFile cColorIni;
  101. int nR, nG, nB;
  102. char szTemp[32];
  103.         const char *pcszTemp = NULL;
  104. m_bColorLoadFlag = TRUE;
  105. // g_SetFilePath("\");
  106. if (cColorIni.Load(defLITTLE_MAP_SET_FILE))
  107. {
  108. cColorIni.GetString("MapColor", "MapColor", "255,255,255", szTemp, sizeof(szTemp));
  109.             
  110.             pcszTemp = szTemp;
  111.             nR = KSG_StringGetInt(&pcszTemp, 255);
  112.             KSG_StringSkipSymbol(&pcszTemp, ',');
  113.             nG = KSG_StringGetInt(&pcszTemp, 255);
  114.             KSG_StringSkipSymbol(&pcszTemp, ',');
  115.             nB = KSG_StringGetInt(&pcszTemp, 255);
  116. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  117. this->m_sBarrierColor.Color_b.r = (BYTE)nR;
  118. this->m_sBarrierColor.Color_b.g = (BYTE)nG;
  119. this->m_sBarrierColor.Color_b.b = (BYTE)nB;
  120. this->m_sBarrierColor.Color_b.a = 0;
  121. cColorIni.GetString("MapColor", "SelfColor", "255,255,255", szTemp, sizeof(szTemp));
  122.             pcszTemp = szTemp;
  123.             nR = KSG_StringGetInt(&pcszTemp, 255);
  124.             KSG_StringSkipSymbol(&pcszTemp, ',');
  125.             nG = KSG_StringGetInt(&pcszTemp, 255);
  126.             KSG_StringSkipSymbol(&pcszTemp, ',');
  127.             nB = KSG_StringGetInt(&pcszTemp, 255);
  128. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  129. this->m_sSelfColor.Color_b.r = (BYTE)nR;
  130. this->m_sSelfColor.Color_b.g = (BYTE)nG;
  131. this->m_sSelfColor.Color_b.b = (BYTE)nB;
  132. this->m_sSelfColor.Color_b.a = 0;
  133. cColorIni.GetInteger("MapColor", "TeammateShow", 1, &this->m_bTeammateShowFlag);
  134. cColorIni.GetString("MapColor", "TeammateColor", "255,255,255", szTemp, sizeof(szTemp));
  135.             pcszTemp = szTemp;
  136.             nR = KSG_StringGetInt(&pcszTemp, 255);
  137.             KSG_StringSkipSymbol(&pcszTemp, ',');
  138.             nG = KSG_StringGetInt(&pcszTemp, 255);
  139.             KSG_StringSkipSymbol(&pcszTemp, ',');
  140.             nB = KSG_StringGetInt(&pcszTemp, 255);
  141. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  142. this->m_sTeammateColor.Color_b.r = (BYTE)nR;
  143. this->m_sTeammateColor.Color_b.g = (BYTE)nG;
  144. this->m_sTeammateColor.Color_b.b = (BYTE)nB;
  145. this->m_sTeammateColor.Color_b.a = 0;
  146. cColorIni.GetInteger("MapColor", "PlayerShow", 1, &this->m_bPlayerShowFlag);
  147. cColorIni.GetString("MapColor", "PlayerColor", "255,255,255", szTemp, sizeof(szTemp));
  148.             pcszTemp = szTemp;
  149.             nR = KSG_StringGetInt(&pcszTemp, 255);
  150.             KSG_StringSkipSymbol(&pcszTemp, ',');
  151.             nG = KSG_StringGetInt(&pcszTemp, 255);
  152.             KSG_StringSkipSymbol(&pcszTemp, ',');
  153.             nB = KSG_StringGetInt(&pcszTemp, 255);
  154. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  155. this->m_sPlayerColor.Color_b.r = (BYTE)nR;
  156. this->m_sPlayerColor.Color_b.g = (BYTE)nG;
  157. this->m_sPlayerColor.Color_b.b = (BYTE)nB;
  158. this->m_sPlayerColor.Color_b.a = 0;
  159. cColorIni.GetInteger("MapColor", "FightNpcShow", 1, &this->m_bFightNpcShowFlag);
  160. cColorIni.GetString("MapColor", "FightNpcColor", "255,255,255", szTemp, sizeof(szTemp));
  161.             pcszTemp = szTemp;
  162.             nR = KSG_StringGetInt(&pcszTemp, 255);
  163.             KSG_StringSkipSymbol(&pcszTemp, ',');
  164.             nG = KSG_StringGetInt(&pcszTemp, 255);
  165.             KSG_StringSkipSymbol(&pcszTemp, ',');
  166.             nB = KSG_StringGetInt(&pcszTemp, 255);
  167. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  168. this->m_sFightNpcColor.Color_b.r = (BYTE)nR;
  169. this->m_sFightNpcColor.Color_b.g = (BYTE)nG;
  170. this->m_sFightNpcColor.Color_b.b = (BYTE)nB;
  171. this->m_sFightNpcColor.Color_b.a = 0;
  172. cColorIni.GetInteger("MapColor", "NormalNpcShow", 1, &this->m_bNormalNpcShowFlag);
  173. cColorIni.GetString("MapColor", "NormalNpcColor", "255,255,255", szTemp, sizeof(szTemp));
  174.             pcszTemp = szTemp;
  175.             nR = KSG_StringGetInt(&pcszTemp, 255);
  176.             KSG_StringSkipSymbol(&pcszTemp, ',');
  177.             nG = KSG_StringGetInt(&pcszTemp, 255);
  178.             KSG_StringSkipSymbol(&pcszTemp, ',');
  179.             nB = KSG_StringGetInt(&pcszTemp, 255);
  180. //sscanf(szTemp, "%d,%d,%d", &nR, &nG, &nB);
  181. this->m_sNormalNpcColor.Color_b.r = (BYTE)nR;
  182. this->m_sNormalNpcColor.Color_b.g = (BYTE)nG;
  183. this->m_sNormalNpcColor.Color_b.b = (BYTE)nB;
  184. this->m_sNormalNpcColor.Color_b.a = 0;
  185. }
  186. }
  187. }
  188. //---------------------------------------------------------------------------
  189. // 功能:获得某个region的障碍数据的存储地址
  190. //---------------------------------------------------------------------------
  191. BYTE* KLittleMap::GetBarrierBuf(int nX, int nY)
  192. {
  193. if (nX < m_sMapRect.left ||
  194. nX > m_sMapRect.right ||
  195. nY < m_sMapRect.top ||
  196. nY > m_sMapRect.bottom)
  197. return NULL;
  198. if (!m_pbyLoadFlag || !m_ppbtBarrier)
  199. return NULL;
  200. int nRegion = (nY - m_sMapRect.top) * m_nMapWidth + nX - m_sMapRect.left;
  201. if (m_pbyLoadFlag[nRegion])
  202. return NULL;
  203. if (!m_ppbtBarrier[nRegion])
  204. {
  205. m_ppbtBarrier[nRegion] = (BYTE*)new BYTE[REGION_GRID_WIDTH * REGION_GRID_HEIGHT];
  206. memset(m_ppbtBarrier[nRegion], 0, sizeof(BYTE) * REGION_GRID_WIDTH * REGION_GRID_HEIGHT);
  207. }
  208. return m_ppbtBarrier[nRegion];
  209. }
  210. //---------------------------------------------------------------------------
  211. // 功能:设定已载入某个region的障碍数据
  212. //---------------------------------------------------------------------------
  213. void KLittleMap::SetHaveLoad(int nX, int nY)
  214. {
  215. if (nX < m_sMapRect.left ||
  216. nX > m_sMapRect.right ||
  217. nY < m_sMapRect.top ||
  218. nY > m_sMapRect.bottom)
  219. return;
  220. if (m_pbyLoadFlag)
  221. m_pbyLoadFlag[(nY - m_sMapRect.top) * m_nMapWidth + nX - m_sMapRect.left] = 1;
  222. }
  223. //---------------------------------------------------------------------------
  224. // 功能:绘制
  225. //---------------------------------------------------------------------------
  226. void KLittleMap::Draw(int nX, int nY)
  227. {
  228. if (!m_nShowFlag)
  229. return;
  230. if (!this->m_pbyLoadFlag || !this->m_ppbtBarrier)
  231. return;
  232. int nRx, nRy, nOx, nOy, nSx, nSy, nTx, nTy;
  233. nSx = nX - REGION_GRID_WIDTH * m_nShowWidth / 2;
  234. nSy = nY - REGION_GRID_HEIGHT * m_nShowHeight / 2;
  235. // 显示障碍
  236. m_nPointPos = 0;
  237. for (int i = 0; i < m_nShowWidth * REGION_GRID_WIDTH; i++)
  238. {
  239. for (int j = 0; j < m_nShowHeight * REGION_GRID_HEIGHT; j++)
  240. {
  241. nRx = (nSx + i) / REGION_GRID_WIDTH;
  242. nRy = (nSy + j) / REGION_GRID_HEIGHT;
  243. if (nRx < m_sMapRect.left ||
  244. nRx > m_sMapRect.right ||
  245. nRy < m_sMapRect.top ||
  246. nRy > m_sMapRect.bottom)
  247. continue;
  248. nRx -= m_sMapRect.left;
  249. nRy -= m_sMapRect.top;
  250. if (!m_pbyLoadFlag[nRy * m_nMapWidth + nRx] || !m_ppbtBarrier[nRy * m_nMapWidth + nRx])
  251. continue;
  252. nOx = (nSx + i) % REGION_GRID_WIDTH;
  253. nOy = (nSy + j) % REGION_GRID_HEIGHT;
  254. if (m_ppbtBarrier[nRy * m_nMapWidth + nRx][nOy * REGION_GRID_WIDTH + nOx])
  255. {
  256. m_sPoint[m_nPointPos].Color.Color_dw = m_sBarrierColor.Color_dw;
  257. m_sPoint[m_nPointPos].oPosition.nZ = 0;
  258. m_sPoint[m_nPointPos].oPosition.nX = m_nScreenX + i * 2;
  259. m_sPoint[m_nPointPos].oPosition.nY = m_nScreenY + j;
  260. m_nPointPos++;
  261. if (m_nPointPos == LITTLE_MAP_POINT_NUM)
  262. {
  263. g_pRepresent->DrawPrimitives(m_nPointPos, m_sPoint, RU_T_POINT, true);
  264. m_nPointPos = 0;
  265. }
  266. }
  267. }
  268. }
  269. if (m_nPointPos > 0 && m_nPointPos < LITTLE_MAP_POINT_NUM)
  270. {
  271. g_pRepresent->DrawPrimitives(m_nPointPos, m_sPoint, RU_T_POINT, true);
  272. m_nPointPos = 0;
  273. }
  274. int nNpcIdx;
  275. // 显示其他玩家和普通npc
  276. nNpcIdx = 0;
  277. while (1)
  278. {
  279. nNpcIdx = NpcSet.GetNextIdx(nNpcIdx);
  280. if (nNpcIdx == 0)
  281. break;
  282. if (Npc[nNpcIdx].m_RegionIndex == -1)
  283. continue;
  284. if (Npc[nNpcIdx].m_Kind == kind_normal)
  285. {
  286. if (!m_bFightNpcShowFlag)
  287. continue;
  288. nRx = LOWORD(Npc[nNpcIdx].m_dwRegionID);
  289. nRy = HIWORD(Npc[nNpcIdx].m_dwRegionID);
  290. if (nRx < m_sMapRect.left || nRx > m_sMapRect.right || nRy < m_sMapRect.top || nRy > m_sMapRect.bottom)
  291. continue;
  292. nOx = Npc[nNpcIdx].m_MapX;
  293. nOy = Npc[nNpcIdx].m_MapY;
  294. nTx = nRx * REGION_GRID_WIDTH + nOx;
  295. nTy = nRy * REGION_GRID_HEIGHT + nOy;
  296. m_sBigPoint.Color.Color_dw = m_sFightNpcColor.Color_dw;
  297. m_sBigPoint.oPosition.nX = m_nScreenX + (nTx - nSx) * 2 - 1;
  298. m_sBigPoint.oPosition.nY = m_nScreenY + nTy - nSy - 1;
  299. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  300. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  301. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  302. }
  303. else if (Npc[nNpcIdx].m_Kind == kind_dialoger)
  304. {
  305. if (!m_bNormalNpcShowFlag)
  306. continue;
  307. nRx = LOWORD(Npc[nNpcIdx].m_dwRegionID);
  308. nRy = HIWORD(Npc[nNpcIdx].m_dwRegionID);
  309. if (nRx < m_sMapRect.left || nRx > m_sMapRect.right || nRy < m_sMapRect.top || nRy > m_sMapRect.bottom)
  310. continue;
  311. nOx = Npc[nNpcIdx].m_MapX;
  312. nOy = Npc[nNpcIdx].m_MapY;
  313. nTx = nRx * REGION_GRID_WIDTH + nOx;
  314. nTy = nRy * REGION_GRID_HEIGHT + nOy;
  315. m_sBigPoint.Color.Color_dw = m_sNormalNpcColor.Color_dw;
  316. m_sBigPoint.oPosition.nX = m_nScreenX + (nTx - nSx) * 2 - 1;
  317. m_sBigPoint.oPosition.nY = m_nScreenY + nTy - nSy - 1;
  318. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  319. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  320. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  321. }
  322. else if (Npc[nNpcIdx].m_Kind == kind_player)
  323. {
  324. if (!m_bPlayerShowFlag)
  325. continue;
  326. if (nNpcIdx == Player[CLIENT_PLAYER_INDEX].m_nIndex)
  327. continue;
  328. if (m_bTeammateShowFlag &&
  329. Player[CLIENT_PLAYER_INDEX].m_cTeam.m_nFlag &&
  330. ((DWORD)g_Team[0].m_nCaptain == Npc[nNpcIdx].m_dwID || g_Team[0].FindMemberID(Npc[nNpcIdx].m_dwID) >= 0))
  331. continue;
  332. nRx = LOWORD(Npc[nNpcIdx].m_dwRegionID);
  333. nRy = HIWORD(Npc[nNpcIdx].m_dwRegionID);
  334. if (nRx < m_sMapRect.left || nRx > m_sMapRect.right || nRy < m_sMapRect.top || nRy > m_sMapRect.bottom)
  335. continue;
  336. nOx = Npc[nNpcIdx].m_MapX;
  337. nOy = Npc[nNpcIdx].m_MapY;
  338. nTx = nRx * REGION_GRID_WIDTH + nOx;
  339. nTy = nRy * REGION_GRID_HEIGHT + nOy;
  340. m_sBigPoint.Color.Color_dw = m_sPlayerColor.Color_dw;
  341. m_sBigPoint.oPosition.nX = m_nScreenX + (nTx - nSx) * 2 - 1;
  342. m_sBigPoint.oPosition.nY = m_nScreenY + nTy - nSy - 1;
  343. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  344. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  345. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  346. }
  347. }
  348. // 显示队友
  349. if (Player[CLIENT_PLAYER_INDEX].m_cTeam.m_nFlag && m_bTeammateShowFlag)
  350. {
  351. // 队长
  352. if ((DWORD)g_Team[0].m_nCaptain != Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_dwID)
  353. {
  354. nNpcIdx = NpcSet.SearchID(g_Team[0].m_nCaptain);
  355. if (nNpcIdx > 0 && Npc[nNpcIdx].m_RegionIndex != -1)
  356. {
  357. nRx = LOWORD(Npc[nNpcIdx].m_dwRegionID);
  358. nRy = HIWORD(Npc[nNpcIdx].m_dwRegionID);
  359. if (nRx >= m_sMapRect.left && nRx <= m_sMapRect.right && nRy >= m_sMapRect.top && nRy <= m_sMapRect.bottom)
  360. {
  361. nOx = Npc[nNpcIdx].m_MapX;
  362. nOy = Npc[nNpcIdx].m_MapY;
  363. nTx = nRx * REGION_GRID_WIDTH + nOx;
  364. nTy = nRy * REGION_GRID_HEIGHT + nOy;
  365. m_sBigPoint.Color.Color_dw = m_sTeammateColor.Color_dw;
  366. m_sBigPoint.oPosition.nX = m_nScreenX + (nTx - nSx) * 2 - 1;
  367. m_sBigPoint.oPosition.nY = m_nScreenY + nTy - nSy - 1;
  368. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  369. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  370. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  371. }
  372. }
  373. }
  374. // 队友
  375. for (i = 0; i < MAX_TEAM_MEMBER; i++)
  376. {
  377. if (g_Team[0].m_nMember[i] <= 0 || (DWORD)g_Team[0].m_nMember[i] == Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_dwID)
  378. continue;
  379. nNpcIdx = NpcSet.SearchID(g_Team[0].m_nMember[i]);
  380. if (nNpcIdx <= 0 || Npc[nNpcIdx].m_RegionIndex == -1)
  381. continue;
  382. nRx = LOWORD(Npc[nNpcIdx].m_dwRegionID);
  383. nRy = HIWORD(Npc[nNpcIdx].m_dwRegionID);
  384. if (nRx < m_sMapRect.left || nRx > m_sMapRect.right || nRy < m_sMapRect.top || nRy > m_sMapRect.bottom)
  385. continue;
  386. nOx = Npc[nNpcIdx].m_MapX;
  387. nOy = Npc[nNpcIdx].m_MapY;
  388. nTx = nRx * REGION_GRID_WIDTH + nOx;
  389. nTy = nRy * REGION_GRID_HEIGHT + nOy;
  390. m_sBigPoint.Color.Color_dw = m_sTeammateColor.Color_dw;
  391. m_sBigPoint.oPosition.nX = m_nScreenX + (nTx - nSx) * 2 - 1;
  392. m_sBigPoint.oPosition.nY = m_nScreenY + nTy - nSy - 1;
  393. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  394. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  395. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  396. }
  397. }
  398. // 显示主角位置
  399. nRx = nX / REGION_GRID_WIDTH;
  400. nRy = nY / REGION_GRID_HEIGHT;
  401. if (nRx < m_sMapRect.left || nRx > m_sMapRect.right || nRy < m_sMapRect.top || nRy > m_sMapRect.bottom)
  402. return;
  403. nRx -= m_sMapRect.left;
  404. nRy -= m_sMapRect.top;
  405. nOx = nX % REGION_GRID_WIDTH;
  406. nOy = nY % REGION_GRID_HEIGHT;
  407. m_sBigPoint.Color.Color_dw = m_sSelfColor.Color_dw;
  408. m_sBigPoint.oPosition.nX = m_nScreenX + (nX - nSx) * 2 - 1;
  409. m_sBigPoint.oPosition.nY = m_nScreenY + nY - nSy - 1;
  410. m_sBigPoint.oEndPos.nX = m_sBigPoint.oPosition.nX + 3;
  411. m_sBigPoint.oEndPos.nY = m_sBigPoint.oPosition.nY + 3;
  412. g_pRepresent->DrawPrimitives(1, &m_sBigPoint, RU_T_SHADOW, true);
  413. }
  414. //---------------------------------------------------------------------------
  415. // 功能:队友显示开关
  416. //---------------------------------------------------------------------------
  417. void KLittleMap::SetTeammateShow(BOOL bFlag)
  418. {
  419. this->m_bTeammateShowFlag = bFlag;
  420. }
  421. //---------------------------------------------------------------------------
  422. // 功能:其它玩家显示开关
  423. //---------------------------------------------------------------------------
  424. void KLittleMap::SetPlayerShow(BOOL bFlag)
  425. {
  426. this->m_bPlayerShowFlag = bFlag;
  427. }
  428. //---------------------------------------------------------------------------
  429. // 功能:战斗npc显示开关
  430. //---------------------------------------------------------------------------
  431. void KLittleMap::SetFightNpcShow(BOOL bFlag)
  432. {
  433. this->m_bFightNpcShowFlag = bFlag;
  434. }
  435. //---------------------------------------------------------------------------
  436. // 功能:普通npc显示开关
  437. //---------------------------------------------------------------------------
  438. void KLittleMap::SetNormalNpcShow(BOOL bFlag)
  439. {
  440. this->m_bNormalNpcShowFlag = bFlag;
  441. }
  442. //---------------------------------------------------------------------------
  443. // 功能:设定小地图在屏幕上的显示位置
  444. //---------------------------------------------------------------------------
  445. void KLittleMap::SetScreenPos(int nX, int nY)
  446. {
  447. m_nScreenX = nX;
  448. m_nScreenY = nY;
  449. }
  450. //---------------------------------------------------------------------------
  451. // 功能:小地图显示开关
  452. //---------------------------------------------------------------------------
  453. void KLittleMap::Show(int nFlag)
  454. {
  455. this->m_nShowFlag = nFlag;
  456. }
  457. //---------------------------------------------------------------------------
  458. // 功能:设定显示内容的大小
  459. //---------------------------------------------------------------------------
  460. void KLittleMap::SetShowSize(int nWidth, int nHeight)
  461. {
  462. nWidth /= REGION_GRID_WIDTH * 2;
  463. nHeight /= REGION_GRID_HEIGHT;
  464. if (nWidth < 3)
  465. nWidth = 3;
  466. if (nHeight < 3)
  467. nHeight = 3;
  468. if (nWidth > 20)
  469. nWidth = 20;
  470. if (nHeight > 15)
  471. nHeight = 15;
  472. this->m_nShowWidth = nWidth;
  473. this->m_nShowHeight = nHeight;
  474. // for test
  475. // int i, j;
  476. // int x, y;
  477. // x = LOWORD(Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_dwRegionID) - m_nShowWidth / 2;
  478. // y = HIWORD(Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_dwRegionID) - m_nShowHeight / 2;
  479. // for (i = x; i < x + m_nShowWidth; i++)
  480. // {
  481. // for (j = y; j < y + m_nShowHeight; j++)
  482. // {
  483. // KRegion::LoadLittleMapData(i, j, SubWorld[0].m_szMapPath, GetBarrierBuf(i, j));
  484. // SetHaveLoad(i, j);
  485. // }
  486. // }
  487. }
  488. #endif