void CBeamLaserProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { const unsigned char color[4] = {edgeColStart[0], edgeColStart[1], edgeColStart[2], 255}; lines.AddVertexQC(startPos, color); lines.AddVertexQC(targetPos, color); }
void InMapDraw_QuadDrawer::DrawQuad(int x, int y) { int drawQuadsX = imd->drawQuadsX; CInMapDraw::DrawQuad* dq = &imd->drawQuads[y * drawQuadsX + x]; va->EnlargeArrays(dq->points.size()*12,0,VA_SIZE_TC); //! draw point markers for (std::list<CInMapDraw::MapPoint>::iterator pi = dq->points.begin(); pi != dq->points.end(); ++pi) { if (pi->MaySee(imd)) { float3 pos = pi->pos; float3 dif(pos - camera->pos); dif.ANormalize(); float3 dir1(dif.cross(UpVector)); dir1.ANormalize(); float3 dir2(dif.cross(dir1)); unsigned char col[4]; col[0] = pi->color[0]; col[1] = pi->color[1]; col[2] = pi->color[2]; col[3] = 200; float size = 6; float3 pos1 = pos; pos1.y += 5.0f; float3 pos2 = pos1; pos2.y += 100.0f; va->AddVertexQTC(pos1 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos1 + dir1 * size + dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos1 - dir1 * size + dir2 * size, 0.00f, 0, col); va->AddVertexQTC(pos1 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos2 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos2 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos2 + dir1 * size - dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos2 - dir1 * size - dir2 * size, 0.00f, 0, col); if (pi->label.size() > 0) { font->SetTextColor(pi->color[0]/255.0f, pi->color[1]/255.0f, pi->color[2]/255.0f, 1.0f); //FIXME (overload!) font->glWorldPrint(pos2 + UpVector * 6, 26.0f, pi->label); } } } lineva->EnlargeArrays(dq->lines.size()*2,0,VA_SIZE_C); //! draw line markers for (std::list<CInMapDraw::MapLine>::iterator li = dq->lines.begin(); li != dq->lines.end(); ++li) { if (li->MaySee(imd)) { lineva->AddVertexQC(li->pos - (li->pos - camera->pos).ANormalize() * 26, li->color); lineva->AddVertexQC(li->pos2 - (li->pos2 - camera->pos).ANormalize() * 26, li->color); } } }
void InMapDraw_QuadDrawer::DrawQuad(int x, int y) { const int drawQuadsX = imd->drawQuadsX; CInMapDraw::DrawQuad* dq = &imd->drawQuads[y * drawQuadsX + x]; va->EnlargeArrays(dq->points.size()*12,0,VA_SIZE_TC); //! draw point markers for (std::list<CInMapDraw::MapPoint>::iterator pi = dq->points.begin(); pi != dq->points.end(); ++pi) { if (pi->MaySee(imd)) { const float3 pos = pi->pos; const float3 dif = (pos - camera->pos).ANormalize(); const float3 dir1 = (dif.cross(UpVector)).ANormalize(); const float3 dir2 = (dif.cross(dir1)); const unsigned char col[4] = { pi->color[0], pi->color[1], pi->color[2], 200 }; const float size = 6.0f; const float3 pos1(pos.x, pos.y + 5.0f, pos.z); const float3 pos2(pos1.x, pos1.y + 100.0f, pos1.z); va->AddVertexQTC(pos1 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos1 + dir1 * size + dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos1 - dir1 * size + dir2 * size, 0.00f, 0, col); va->AddVertexQTC(pos1 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos2 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos2 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos2 + dir1 * size - dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos2 - dir1 * size - dir2 * size, 0.00f, 0, col); if (!pi->label.empty()) { visLabels->push_back(&*pi); } } } lineva->EnlargeArrays(dq->lines.size() * 2, 0, VA_SIZE_C); //! draw line markers for (std::list<CInMapDraw::MapLine>::iterator li = dq->lines.begin(); li != dq->lines.end(); ++li) { if (li->MaySee(imd)) { lineva->AddVertexQC(li->pos - (li->pos - camera->pos).ANormalize() * 26, li->color); lineva->AddVertexQC(li->pos2 - (li->pos2 - camera->pos).ANormalize() * 26, li->color); } } }
void CLightningProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { const unsigned char lcolor[4] = { (unsigned char)(color[0] * 255), (unsigned char)(color[1] * 255), (unsigned char)(color[2] * 255), 255 }; lines.AddVertexQC(startPos, lcolor); lines.AddVertexQC(targetPos, lcolor); }
void CLightningProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { const unsigned char lcolor[4] = { (unsigned char)color[0] * 255, (unsigned char)color[1] * 255, (unsigned char)color[2] * 255, 1 * 255 }; lines.AddVertexQC(pos, lcolor); lines.AddVertexQC(endPos, lcolor); }
void CProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { points.AddVertexQC(pos, color4::whiteA); }
void CBeamLaserProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { unsigned char color[4] = { kocolstart[0], kocolstart[1], kocolstart[2], 255 }; lines.AddVertexQC(startPos, color); lines.AddVertexQC(endPos, color); }
void CWeaponProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { points.AddVertexQC(pos, color4::yellow); }
void InMapDraw_QuadDrawer::DrawLine(const CInMapDrawModel::MapLine* line) const { const unsigned char* color = line->IsBySpectator() ? color4::white : teamHandler->Team(line->GetTeamID())->color; linesVa->AddVertexQC(line->GetPos1() - (line->GetPos1() - camera->GetPos()).ANormalize() * 26, color); linesVa->AddVertexQC(line->GetPos2() - (line->GetPos2() - camera->GetPos()).ANormalize() * 26, color); }
void CSelectedUnits::Draw() { glDisable(GL_TEXTURE_2D); glDepthMask(false); glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); // for line smoothing glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glLineWidth(cmdColors.UnitBoxLineWidth()); GML_RECMUTEX_LOCK(grpsel); // Draw if (cmdColors.unitBox[3] > 0.05f) { const CUnitSet* unitSet; if (selectedGroup != -1) { unitSet = &grouphandlers[gu->myTeam]->groups[selectedGroup]->units; } else { unitSet = &selectedUnits; } CVertexArray* va = GetVertexArray(); va->Initialize(); va->EnlargeArrays(unitSet->size() * 8, 0, VA_SIZE_C); for (CUnitSet::const_iterator ui = unitSet->begin(); ui != unitSet->end(); ++ui) { const CUnit* unit = *ui; if (unit->isIcon) { continue; } const int uhxsize = (unit->xsize * SQUARE_SIZE) >> 1, uhzsize = (unit->zsize * SQUARE_SIZE) >> 1, mhxsize = (unit->mobility == NULL)? uhxsize: ((unit->mobility->xsize * SQUARE_SIZE) >> 1), mhzsize = (unit->mobility == NULL)? uhzsize: ((unit->mobility->zsize * SQUARE_SIZE) >> 1); const float3 verts[8] = { // UnitDef footprint corners float3(unit->drawPos.x + uhxsize, unit->drawPos.y, unit->drawPos.z + uhzsize), float3(unit->drawPos.x - uhxsize, unit->drawPos.y, unit->drawPos.z + uhzsize), float3(unit->drawPos.x - uhxsize, unit->drawPos.y, unit->drawPos.z - uhzsize), float3(unit->drawPos.x + uhxsize, unit->drawPos.y, unit->drawPos.z - uhzsize), // MoveDef footprint corners float3(unit->drawPos.x + mhxsize, unit->drawPos.y, unit->drawPos.z + mhzsize), float3(unit->drawPos.x - mhxsize, unit->drawPos.y, unit->drawPos.z + mhzsize), float3(unit->drawPos.x - mhxsize, unit->drawPos.y, unit->drawPos.z - mhzsize), float3(unit->drawPos.x + mhxsize, unit->drawPos.y, unit->drawPos.z - mhzsize), }; const unsigned char colors[2][4] = { {(0.0f + cmdColors.unitBox[0]) * 255, (0.0f + cmdColors.unitBox[1]) * 255, (0.0f + cmdColors.unitBox[2] * 255), cmdColors.unitBox[3] * 255}, {(1.0f - cmdColors.unitBox[0]) * 255, (1.0f - cmdColors.unitBox[1]) * 255, (1.0f - cmdColors.unitBox[2] * 255), cmdColors.unitBox[3] * 255}, }; va->AddVertexQC(verts[0], colors[0]); va->AddVertexQC(verts[1], colors[0]); va->AddVertexQC(verts[2], colors[0]); va->AddVertexQC(verts[3], colors[0]); if (globalRendering->drawdebug && (mhxsize != uhxsize || mhzsize != uhzsize)) { va->AddVertexQC(verts[4], colors[1]); va->AddVertexQC(verts[5], colors[1]); va->AddVertexQC(verts[6], colors[1]); va->AddVertexQC(verts[7], colors[1]); } } va->DrawArrayC(GL_QUADS); } // highlight queued build sites if we are about to build something // (or old-style, whenever the shift key is being held down) if (cmdColors.buildBox[3] > 0.0f) { if (!selectedUnits.empty() && ((cmdColors.BuildBoxesOnShift() && keyInput->IsKeyPressed(SDLK_LSHIFT)) || ((guihandler->inCommand >= 0) && (guihandler->inCommand < int(guihandler->commands.size())) && (guihandler->commands[guihandler->inCommand].id < 0)))) { GML_STDMUTEX_LOCK(cai); // Draw bool myColor = true; glColor4fv(cmdColors.buildBox); std::list<CBuilderCAI*>::const_iterator bi; for (bi = uh->builderCAIs.begin(); bi != uh->builderCAIs.end(); ++bi) { CBuilderCAI* builder = *bi; if (builder->owner->team == gu->myTeam) { if (!myColor) { glColor4fv(cmdColors.buildBox); myColor = true; } commandDrawer->DrawQuedBuildingSquares(builder); } else if (teamHandler->AlliedTeams(builder->owner->team, gu->myTeam)) { if (myColor) { glColor4fv(cmdColors.allyBuildBox); myColor = false; } commandDrawer->DrawQuedBuildingSquares(builder); } } } } glLineWidth(1.0f); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); glDepthMask(true); glEnable(GL_TEXTURE_2D); }
void CSelectedUnitsHandler::Draw() { glDisable(GL_TEXTURE_2D); glDepthMask(false); glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); // for line smoothing glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glLineWidth(cmdColors.UnitBoxLineWidth()); SColor color1(cmdColors.unitBox); SColor color2(cmdColors.unitBox); color2.r = 255 - color2.r; color2.g = 255 - color2.g; color2.b = 255 - color2.b; if (color1.a > 0) { const CUnitSet* unitSet; if (selectedGroup != -1) { // note: units in this set are not necessarily all selected themselves, eg. // if autoAddBuiltUnitsToSelectedGroup is true, so we check IsUnitSelected // for each unitSet = &grouphandlers[gu->myTeam]->groups[selectedGroup]->units; } else { unitSet = &selectedUnits; } CVertexArray* va = GetVertexArray(); va->Initialize(); va->EnlargeArrays(unitSet->size() * 8, 0, VA_SIZE_C); for (CUnitSet::const_iterator ui = unitSet->begin(); ui != unitSet->end(); ++ui) { const CUnit* unit = *ui; const MoveDef* moveDef = unit->moveDef; if (unit->isIcon) continue; if (!IsUnitSelected(unit)) continue; const int uhxsize = (unit->xsize * SQUARE_SIZE) >> 1, uhzsize = (unit->zsize * SQUARE_SIZE) >> 1, mhxsize = (moveDef == NULL)? uhxsize: ((moveDef->xsize * SQUARE_SIZE) >> 1), mhzsize = (moveDef == NULL)? uhzsize: ((moveDef->zsize * SQUARE_SIZE) >> 1); const float3 verts[8] = { // UnitDef footprint corners float3(unit->drawPos.x + uhxsize, unit->drawPos.y, unit->drawPos.z + uhzsize), float3(unit->drawPos.x - uhxsize, unit->drawPos.y, unit->drawPos.z + uhzsize), float3(unit->drawPos.x - uhxsize, unit->drawPos.y, unit->drawPos.z - uhzsize), float3(unit->drawPos.x + uhxsize, unit->drawPos.y, unit->drawPos.z - uhzsize), // MoveDef footprint corners float3(unit->drawPos.x + mhxsize, unit->drawPos.y, unit->drawPos.z + mhzsize), float3(unit->drawPos.x - mhxsize, unit->drawPos.y, unit->drawPos.z + mhzsize), float3(unit->drawPos.x - mhxsize, unit->drawPos.y, unit->drawPos.z - mhzsize), float3(unit->drawPos.x + mhxsize, unit->drawPos.y, unit->drawPos.z - mhzsize), }; va->AddVertexQC(verts[0], color1); va->AddVertexQC(verts[1], color1); va->AddVertexQC(verts[2], color1); va->AddVertexQC(verts[3], color1); if (globalRendering->drawdebug && (mhxsize != uhxsize || mhzsize != uhzsize)) { va->AddVertexQC(verts[4], color2); va->AddVertexQC(verts[5], color2); va->AddVertexQC(verts[6], color2); va->AddVertexQC(verts[7], color2); } } va->DrawArrayC(GL_QUADS); } // highlight queued build sites if we are about to build something // (or old-style, whenever the shift key is being held down) if (cmdColors.buildBox[3] > 0.0f) { if (!selectedUnits.empty() && ((cmdColors.BuildBoxesOnShift() && KeyInput::GetKeyModState(KMOD_SHIFT)) || ((guihandler->inCommand >= 0) && (guihandler->inCommand < int(guihandler->commands.size())) && (guihandler->commands[guihandler->inCommand].id < 0)))) { bool myColor = true; glColor4fv(cmdColors.buildBox); for (const auto bi: unitHandler->GetBuilderCAIs()) { const CBuilderCAI* builderCAI = bi.second; const CUnit* builder = builderCAI->owner; if (builder->team == gu->myTeam) { if (!myColor) { glColor4fv(cmdColors.buildBox); myColor = true; } commandDrawer->DrawQuedBuildingSquares(builderCAI); } else if (teamHandler->AlliedTeams(builder->team, gu->myTeam)) { if (myColor) { glColor4fv(cmdColors.allyBuildBox); myColor = false; } commandDrawer->DrawQuedBuildingSquares(builderCAI); } } } } glLineWidth(1.0f); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); glDepthMask(true); glEnable(GL_TEXTURE_2D); }
void InMapDraw_QuadDrawer::DrawQuad(int x, int y) { int drawQuadsX = imd->drawQuadsX; CInMapDraw::DrawQuad* dq = &imd->drawQuads[y * drawQuadsX + x]; va->EnlargeArrays(dq->points.size()*12,0,VA_SIZE_TC); // draw point markers for (std::list<CInMapDraw::MapPoint>::iterator pi = dq->points.begin(); pi != dq->points.end(); ++pi) { const int allyteam = pi->senderAllyTeam; const bool spec = pi->senderSpectator; const bool allied = (gs->Ally(gu->myAllyTeam, allyteam) && gs->Ally(allyteam, gu->myAllyTeam)); const bool maySee = (gu->spectating || (!spec && allied) || imd->drawAll); if (maySee) { float3 pos = pi->pos; float3 dif(pos - camera->pos); float camDist = dif.Length(); dif /= camDist; float3 dir1(dif.cross(UpVector)); dir1.Normalize(); float3 dir2(dif.cross(dir1)); unsigned char col[4]; col[0] = pi->color[0]; col[1] = pi->color[1]; col[2] = pi->color[2]; col[3] = 200; float size = 6; float3 pos1 = pos; float3 pos2 = pos1; pos2.y += 100; va->AddVertexQTC(pos1 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos1 + dir1 * size + dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos1 - dir1 * size + dir2 * size, 0.00f, 0, col); va->AddVertexQTC(pos1 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos1 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 + dir1 * size, 0.75f, 1, col); va->AddVertexQTC(pos2 - dir1 * size, 0.75f, 0, col); va->AddVertexQTC(pos2 - dir1 * size, 0.25f, 0, col); va->AddVertexQTC(pos2 + dir1 * size, 0.25f, 1, col); va->AddVertexQTC(pos2 + dir1 * size - dir2 * size, 0.00f, 1, col); va->AddVertexQTC(pos2 - dir1 * size - dir2 * size, 0.00f, 0, col); if (pi->label.size() > 0) { glPushMatrix(); glTranslatef3(pi->pos + UpVector * 105); glScalef(1200, 1200, 1200); glColor4ub(pi->color[0], pi->color[1], pi->color[2], 250); font->glWorldPrint(pi->label.c_str()); glPopMatrix(); } } } va->EnlargeArrays(dq->lines.size()*2,0,VA_SIZE_C); // draw line markers for (std::list<CInMapDraw::MapLine>::iterator li = dq->lines.begin(); li != dq->lines.end(); ++li) { const int allyteam = li->senderAllyTeam; const bool spec = li->senderSpectator; const bool allied = (gs->Ally(gu->myAllyTeam, allyteam) && gs->Ally(allyteam, gu->myAllyTeam)); const bool maySee = (gu->spectating || (!spec && allied) || imd->drawAll); if (maySee) { lineva->AddVertexQC(li->pos - (li->pos - camera->pos).ANormalize() * 26, li->color); lineva->AddVertexQC(li->pos2 - (li->pos2 - camera->pos).ANormalize() * 26, li->color); } } }
void CGfxProjectile::DrawOnMinimap(CVertexArray& lines, CVertexArray& points) { points.AddVertexQC(pos, color4::green); }