// HumanSimpleParty.cpp: implementation of the CHumanSimpleParty class. // ////////////////////////////////////////////////////////////////////// #include "ClientMain.h" #include "GUITextEdit.h" #include "HumanSimpleParty.h" #include "CharacterControl.h" #include "WinInput.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CHumanSimpleParty::CHumanSimpleParty() { } CHumanSimpleParty::~CHumanSimpleParty() { } BOOL CHumanSimpleParty::Init(unsigned short x, unsigned short y) { CSprite *lpSprite; lpSprite = new CSprite; lpSprite->Create(x, 0, 0, 0, 126, 22, g_ClientMain.m_lpInterface->m_lstTexture[28]); m_lstSprite.push_back(lpSprite); lpSprite = new CSprite; // HP lpSprite->Create(x + 99, 5, 32, 22, 53, 26, g_ClientMain.m_lpInterface->m_lstTexture[28]); m_lstSprite.push_back(lpSprite); lpSprite = new CSprite; // MP lpSprite->Create(x + 99, 10, 32, 26, 53, 30, g_ClientMain.m_lpInterface->m_lstTexture[28]); m_lstSprite.push_back(lpSprite); lpSprite = new CSprite; // Àå½Ä lpSprite->Create(x + 76, 0, 76, 22, 126, 58, g_ClientMain.m_lpInterface->m_lstTexture[28]); m_lstSprite.push_back(lpSprite); m_dwWindowKind = WINDOW_FIX; m_rcWindowSize.left = x; m_rcWindowSize.top = y; m_rcWindowSize.right = x + 126; m_rcWindowSize.bottom = y + 22; m_rcMoveEdge.left = x; m_rcMoveEdge.top = y; m_rcMoveEdge.right = x + 126; m_rcMoveEdge.bottom = y + 22; InitValue(); return TRUE; } void CHumanSimpleParty::InitValue(void) { } BOOL CHumanSimpleParty::Update(BOOL &bClick, BOOL &bEdge) { if(g_DeviceInput.InRect(m_rcWindowSize.left, m_rcWindowSize.top, m_rcWindowSize.right, m_rcWindowSize.bottom)) { bEdge = TRUE; if(g_DeviceInput.GetIsLeftMouseDown() || g_DeviceInput.GetIsMiddleMouseDown() || g_DeviceInput.GetIsRightMouseDown() || g_DeviceInput.GetIsLeftMousePress() || g_DeviceInput.GetIsMiddleMousePress() || g_DeviceInput.GetIsRightMousePress() || g_DeviceInput.GetIsLeftMouseUp() || g_DeviceInput.GetIsMiddleMouseUp() || g_DeviceInput.GetIsRightMouseUp()) { bClick = TRUE; } } return TRUE; } void CHumanSimpleParty::Render(LPDIRECT3DDEVICE8 lpD3DDevice) { RECT rcRect; CCreature *lpCreature; char strTempName[16], strDot[4] = "..."; unsigned long lengthDot = g_TextEdit.GetStringLength(strDot); int count = 1; for(int i = 0; i < g_ClientMain.m_csStatus.m_PartyInfo.m_cMemberNum; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.ServerID[i]) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] == g_ClientMain.m_dwMyChrID) { m_lstSprite[0]->Render(lpD3DDevice, 0xFF, 0, 0); SetRect(&rcRect, m_rcWindowSize.left + 3, 0, m_rcWindowSize.left + 93, 22); if(g_TextEdit.GetStringLength(g_ClientMain.m_csStatus.m_PartyInfo.Name[i]) > 90) { int nNumUnicode = 0; for(int j = 0; j < 15; j++) { strTempName[j] = g_ClientMain.m_csStatus.m_PartyInfo.Name[i][j]; strTempName[j + 1] = '\0'; if(strTempName[j] & 0x80) nNumUnicode++; if(g_TextEdit.GetStringLength(strTempName) + lengthDot > 90) { if(nNumUnicode % 2) { memcpy(&strTempName[j], strDot, 4); } else { memcpy(&strTempName[j - 1], strDot, 4); } break; } } g_TextEdit.DrawText(strTempName, &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255)); } else { g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_PartyInfo.Name[i], &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255)); } m_lstSprite[1]->SetRate(g_ClientMain.m_csStatus.m_Info.HP / (float)g_ClientMain.m_csStatus.m_MaxHP); m_lstSprite[1]->Render(lpD3DDevice, 0xFF, 0, 0); m_lstSprite[2]->SetRate(g_ClientMain.m_csStatus.m_Info.MP / (float)g_ClientMain.m_csStatus.m_MaxMP); m_lstSprite[2]->Render(lpD3DDevice, 0xFF, 0, 0); } else { m_lstSprite[0]->Render(lpD3DDevice, 0xFF, 0, count * 22); SetRect(&rcRect, m_rcWindowSize.left + 3, count * 22, m_rcWindowSize.left + 93, count * 22 + 22); if(g_TextEdit.GetStringLength(g_ClientMain.m_csStatus.m_PartyInfo.Name[i]) > 90) { int nNumUnicode = 0; for(int j = 0; j < 15; j++) { strTempName[j] = g_ClientMain.m_csStatus.m_PartyInfo.Name[i][j]; strTempName[j + 1] = '\0'; if(strTempName[j] & 0x80) nNumUnicode++; if(g_TextEdit.GetStringLength(strTempName) + lengthDot > 90) { if(nNumUnicode % 2) { memcpy(&strTempName[j], strDot, 4); } else { memcpy(&strTempName[j - 1], strDot, 4); } break; } } g_TextEdit.DrawText(strTempName, &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255)); } else { g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_PartyInfo.Name[i], &rcRect, DT_VCENTER | DT_LEFT, D3DCOLOR_RGBA(255, 255, 255, 255)); } lpCreature = g_CharacterData.GetCreature(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]); if(lpCreature) { if(lpCreature->m_wMaxHP != 0) { m_lstSprite[1]->SetRate(lpCreature->m_sCurrHP / (float)lpCreature->m_wMaxHP); m_lstSprite[1]->Render(lpD3DDevice, 0xFF, 0, count * 22); } if(lpCreature->m_wMaxMP != 0) { m_lstSprite[2]->SetRate(lpCreature->m_sCurrMP / (float)lpCreature->m_wMaxMP); m_lstSprite[2]->Render(lpD3DDevice, 0xFF, 0, count * 22); } } count++; } } } if(g_ClientMain.m_csStatus.m_PartyInfo.m_cMemberNum) m_lstSprite[3]->Render(lpD3DDevice, 0xFF, 0, count * 22); else m_lstSprite[3]->Render(lpD3DDevice, 0xFF, 0, 0); }