void SpawnUnit(UnitList *SQ,UnitList *UL, FunctionQueue *FQ) { if (UnitSize(SQ)>0) { Unit *U; U = UnitFirst(SQ); UnitDequeue(SQ); UnitEnqueue(UL,U); CreateREDRAWQUEUE(FQ,SQ); CreateSPAWN(FQ,U); } }
void RedrawQueue(UnitList *SQ) { ClearSpawnQueue(); Unit *tempUnit; for (int i = 0; i < UnitSize(SQ); i++) { tempUnit = UnitPeek(i,SQ); attron(COLOR_PAIR(UnitID(tempUnit)-96)); if (UnitSize(SQ) <= 36) { mvprintw(7+i,113,"%d",tempUnit->health); } else if (UnitSize(SQ) <= 73) { if (i <= 36) { mvprintw(7+i,111,"%d",tempUnit->health); } else mvprintw(7+i-37,115,"%d",tempUnit->health); } else if (UnitSize(SQ) <= 111) { if (i <= 36) { mvprintw(7+i,111,"%d",tempUnit->health); } else if (i <= 73) mvprintw(7+i-37,113,"%d",tempUnit->health); else mvprintw(7+i-74,115,"%d",tempUnit->health); } attroff(COLOR_PAIR(UnitID(tempUnit)-96)); } Home(); }
void KMemViewer::DumpPage(void) { TCHAR buffer[1024]; buffer[0] = 0; unsigned char * p = m_current; for (unsigned row=0; row<m_pagesize/16; row++, p+=16) { DumpLine(p, 0, UnitSize()); strcat(buffer, m_line); } SetDlgItemText(m_hWnd, IDC_DUMP, buffer); }
BOOL KMemViewer::OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { switch ( LOWORD(wParam) ) { case IDC_BYTE: case IDC_WORD: case IDC_DWORD: DumpPage(); return TRUE; case IDC_DOWN: if ( m_current + m_pagesize >= m_start + m_size ) return FALSE; m_current += m_pagesize; DumpPage(); return TRUE; case IDC_UP: if ( m_current == m_start ) return FALSE; m_current -= m_pagesize; DumpPage(); return TRUE; case IDC_MEMORYDUMP: OpenDump(); Dump(m_start, 0, m_size, UnitSize()); CloseDump(); return TRUE; case IDC_SEARCH: Search(); return TRUE; case IDOK: EndDialog(m_hWnd, TRUE); return TRUE; } return FALSE; }
int HandleInput (UnitList *SQ, UnitList *PDUL, FunctionQueue *FQ, Level *lvl, int *running) { char c = TakeInput(); if (c == ERR) { return 1; } else if (c == 'q') { InputQ(running); return 1; } else if (c == 'r') { CreateCLEARMSG(FQ); InputR(running); return 1; } else if (c == 's') { CreateCLEARMSG(FQ); if (SQ->size == 0) { CreatePRINTMSG(FQ, 3); } else { CreateCLEARPROMPTS(FQ); InputS(running); } return 1; } else if (c == 'x') { CreateCLEARMSG(FQ); InputX(SQ,lvl); CreateREDRAWQUEUE(FQ,SQ); CreateREDRAWRESOURCES(FQ,lvl); return 1; } else if (c-'a' >= 0 && c-'a' < UnitSize(PDUL)) { if (SQ->size < UNITQUEUESIZE) { int i, flag = false; CreateCLEARMSG(FQ); for (i = 0; i < AVAILUNITS; i++) { if (c == lvl->available[i]) flag = true; }; if (flag) { InputUnit(PDUL,c,SQ,lvl); CreateREDRAWQUEUE(FQ,SQ); CreateREDRAWRESOURCES(FQ,lvl); return 1; } else { CreatePRINTMSG(FQ, 1); return 1; } } return 0; } else { CreateCLEARMSG(FQ); CreatePRINTMSG(FQ, 1); return 0; } }
void TowerTargetting(UnitList *UL, UnitList *PDUL, TowerList *TL, PathList *PL, FunctionQueue *FQ, int loopCounter) { for (int i = 0; i < TowerSize(TL); i++) { // Declare and initiage of variables needed per loop int j; Tower *T; Path *P; Unit *U; int targetFlag; targetFlag = false; // Get the tower T = TowerPeek(i, TL); if (loopCounter % TowerRate(T) == 0) { // Iterate through the unit list for (j = 0; j < UnitSize(UL); j++) { if (TowerEffect(T) != EFFECT_AOE) { if (targetFlag == false) { // Get unit & position data U = UnitPeek(j, UL); P = PathPeek(UnitPosition(U), PL); // check range if (TowerPosX(T) + TowerRange(T) >= PathX(P) && TowerPosX(T) - TowerRange(T) <= PathX(P)) { if (TowerPosY(T) + TowerRange(T) >= PathY(P) && TowerPosY(T) - TowerRange(T) <= PathY(P)) { targetFlag = true; if (UnitSpeed(U) == SPEED_SLOW) { // Exit the unit loop, we have our target break; } } } } else { Unit *target; // Get unit & position data target = UnitPeek(j, UL); P = PathPeek(UnitPosition(target), PL); // Check unit speed for aggro. Less calls than range checking to eliminate cases if (UnitSpeed(target) == SPEED_SLOW) { // Check if the unit is within tower range if (TowerPosX(T) + TowerRange(T) >= PathX(P) && TowerPosX(T) - TowerRange(T) <= PathX(P)) { if (TowerPosY(T) + TowerRange(T) >= PathY(P) && TowerPosY(T) - TowerRange(T) <= PathY(P)) { // exit the unit loop, we have our target U = target; break; } } } } } // AoE damage else { // Get unit & position data U = UnitPeek(j, UL); P = PathPeek(UnitPosition(U), PL); // check range if (TowerPosX(T) + TowerRange(T) >= PathX(P) && TowerPosX(T) - TowerRange(T) <= PathX(P)) { if (TowerPosY(T) + TowerRange(T) >= PathY(P) && TowerPosY(T) - TowerRange(T) <= PathY(P)) { // Deal the damage to the unit in range. DamageHandler(U, T, PDUL); CreateSPAWN(FQ,U); } } } } // Deal damage to target if (targetFlag == true) { DamageHandler(U, T, PDUL); CreateSPAWN(FQ,U); } } } }
int CheckLoss(UnitList *SQ, UnitList *UL) { return UnitSize(SQ) == 0 && UnitSize(UL) == 0; }