Float BuildTower(Script * script) { if (script->VerifyArguments(2) == true) { Word * targetWord = script->GetNextWord(); Word * posWord = script->GetNextWord(); Point2D position(0, 0); Point2D * pos = (Point2D *)(uint32)posWord->value; if (pos != NULL) { position.SetValues(pos->GetX(), pos->GetY()); } else { return false; } if ((IntervalCheck(position.GetX(), 1, GRID_SIZE - 2) == true) && (IntervalCheck(position.GetY(), 1, GRID_SIZE - 2) == true)) { if (targetWord->type == POINTER) { Object * target = script->GetTarget(targetWord); if ((target != NULL) && (target->CheckType(OBJ_TYPE_TOWER) == true)) { Grid * grid = WorldGame.GetGrid(); Tower * tower = (Tower *)target; //To bypass grid auto-filling tower->SetState(false); Point2D towerCoords = tower->GetPosition(); towerCoords.SetValues((towerCoords.GetX() - 80)/32, (towerCoords.GetY() - 80)/32); grid->SetPath(towerCoords, 0); if (BuildTower(tower->GetTowerType(), position, true) == true) { Tower * newTower = grid->GetData(Point2D(position.GetX(), position.GetY())); tower->SetState(true); grid->FindPath(Origin); newTower->Copy(*tower); newTower->SetUInt32Value(TOWER_VAR_BUILD_TIME, GetGameTime()); return true; } else { tower->SetState(true); grid->FindPath(Origin); } } } else if ((targetWord->type == NUMERIC) && (IntervalCheck(targetWord->value, 1, GetTowerDataSize()) == true)) { return (BuildTower(targetWord->value, position, true)); } } } return false; }
void Font::PrintText(const char * text, const Point2D& pos, const Rect& bounds, uint8 format) const { Point2D offset; glPushMatrix(); glLoadIdentity(); glColor(Black); glTranslated(pos.GetX(), pos.GetY(), 0); uint8 justify = format & 0x03; Float lineOffset = (int32)(CalculateLineLength(text, bounds.GetWidth(), 0)/2.0 * justify); offset.SetValues(offset.GetX() + lineOffset, offset.GetY()); glTranslated(lineOffset, 0.0, 0); uint32 textPos = 0; while (textPos < strlen(text)) { bool wordBegin = true; uint32 wordLength = GetWordLength(text, textPos); uint32 wordSpace = GetWordSpace(text, textPos); for (uint32 i = textPos; i < textPos + wordLength; i++) { if (text[i] == '&') { ParseSpecial(text, i, true); continue; } else if (((text[i] == '\n') || ((text[i] == '\\') && (text[i+1] == 'n')) || (offset.GetX() > bounds.GetWidth())) || ((wordSpace + offset.GetX() >= bounds.GetWidth()) && (wordSpace < bounds.GetWidth()) && (wordBegin == true))) { glTranslated(-offset.GetX(), baseSize, 0); offset.SetValues(0, offset.GetY() + baseSize); if (offset.GetY() > bounds.GetHeight()) { glPopMatrix(); return; } lineOffset = (int32)(CalculateLineLength(text, bounds.GetWidth(), i + 1)/2.0 * justify); offset.SetValues(offset.GetX() + lineOffset, offset.GetY()); glTranslated(lineOffset, 0.0, 0); if (text[i] == '\n') { continue; } else if ((text[i] == '\\') && (text[i+1] == 'n')) { i++; continue; } } glCallList(text[i] + displayLists); offset.SetValues(offset.GetX() + width[text[i]], offset.GetY()); wordBegin = false; } offset.SetValues(offset.GetX() + baseSize, offset.GetY()); glTranslated(baseSize, 0, 0); textPos += wordLength + 1; } glPopMatrix(); }