void CMobileCAI::DrawCommands(void) { lineDrawer.StartPath(owner->midPos, cmdColors.start); deque<Command>::iterator ci; for(ci=commandQue.begin();ci!=commandQue.end();++ci){ bool draw=false; switch(ci->id){ case CMD_WAIT:{ lineDrawer.DrawIconAtLastPos(ci->id); break; } case CMD_MOVE:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.move); break; } case CMD_FIGHT:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.fight); break; } case CMD_PATROL:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.patrol); break; } case CMD_ATTACK: case CMD_DGUN:{ if(ci->params.size()==1){ const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else { const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_GUARD:{ const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.guard); } break; } } } lineDrawer.FinishPath(); }
void CCommandAI::DrawCommands(void) { lineDrawer.StartPath(owner->drawMidPos, cmdColors.start); if (owner->selfDCountdown != 0) { lineDrawer.DrawIconAtLastPos(CMD_SELFD); } CCommandQueue::iterator ci; for (ci = commandQue.begin(); ci != commandQue.end(); ++ci) { switch (ci->id) { case CMD_ATTACK: case CMD_DGUN: { if (ci->params.size() == 1) { const CUnit* unit = uh->GetUnit(ci->params[0]); if ((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else { const float3 endPos(ci->params[0],ci->params[1]+3,ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_WAIT:{ DrawWaitIcon(*ci); break; } case CMD_SELFD:{ lineDrawer.DrawIconAtLastPos(ci->id); break; } default:{ DrawDefaultCommand(*ci); break; } } } lineDrawer.FinishPath(); }
void CCommandAI::DrawDefaultCommand(const Command& c) const { // TODO add Lua callin perhaps, for more elaborate needs? const CCommandColors::DrawData* dd = cmdColors.GetCustomCmdData(c.id); if (dd == NULL) { return; } const int paramsCount = c.params.size(); if (paramsCount == 1) { const unsigned int unitID = (unsigned int) c.params[0]; if (unitID < uh->MaxUnits()) { const CUnit* unit = uh->units[unitID]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(dd->cmdIconID, endPos, dd->color); } } return; } if (paramsCount < 3) { return; } const float3 endPos(c.params[0], c.params[1] + 3.0f, c.params[2]); if (!dd->showArea || (paramsCount < 4)) { lineDrawer.DrawLineAndIcon(dd->cmdIconID, endPos, dd->color); } else { const float radius = c.params[3]; lineDrawer.DrawLineAndIcon(dd->cmdIconID, endPos, dd->color); lineDrawer.Break(endPos, dd->color); glSurfaceCircle(endPos, radius, 20); lineDrawer.RestartSameColor(); } }
void CFactoryCAI::DrawCommands(void) { lineDrawer.StartPath(owner->midPos, cmdColors.start); if (owner->selfDCountdown != 0) { lineDrawer.DrawIconAtLastPos(CMD_SELFD); } if (!commandQue.empty() && (commandQue.front().id == CMD_WAIT)) { DrawWaitIcon(commandQue.front()); } CCommandQueue::iterator ci; for(ci=newUnitCommands.begin();ci!=newUnitCommands.end();++ci){ switch(ci->id){ case CMD_MOVE:{ const float3 endPos(ci->params[0],ci->params[1]+3,ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.move); break; } case CMD_FIGHT:{ const float3 endPos(ci->params[0],ci->params[1]+3,ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.fight); break; } case CMD_PATROL:{ const float3 endPos(ci->params[0],ci->params[1]+3,ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.patrol); break; } case CMD_ATTACK:{ if(ci->params.size()==1){ const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else { const float3 endPos(ci->params[0],ci->params[1]+3,ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_GUARD:{ const CUnit* unit = uh->units[int(ci->params[0])]; if ((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.guard); } break; } case CMD_WAIT:{ DrawWaitIcon(*ci); break; } case CMD_SELFD:{ lineDrawer.DrawIconAtLastPos(ci->id); break; } default: DrawDefaultCommand(*ci); break; } if ((ci->id < 0) && (ci->params.size() >= 3)) { BuildInfo bi; bi.def = unitDefHandler->GetUnitByID(-(ci->id)); if (ci->params.size() == 4) { bi.buildFacing = int(ci->params[3]); } bi.pos = float3(ci->params[0], ci->params[1], ci->params[2]); bi.pos = helper->Pos2BuildPos(bi); cursorIcons.AddBuildIcon(ci->id, bi.pos, owner->team, bi.buildFacing); lineDrawer.DrawLine(bi.pos, cmdColors.build); // draw metal extraction range if (bi.def->extractRange > 0) { lineDrawer.Break(bi.pos, cmdColors.build); glColor4fv(cmdColors.rangeExtract); if (bi.def->extractSquare) { glSurfaceSquare(bi.pos, bi.def->extractRange, bi.def->extractRange); } else { glSurfaceCircle(bi.pos, bi.def->extractRange, 40); } lineDrawer.Restart(); } } } lineDrawer.FinishPath(); }
void CBuilderCAI::DrawCommands(void) { if(uh->limitDgun && owner->unitDef->isCommander) { glColor4f(1.0f, 1.0f, 1.0f, 0.6f); glSurfaceCircle(gs->Team(owner->team)->startPos, uh->dgunRadius, 40); } lineDrawer.StartPath(owner->midPos, cmdColors.start); if (owner->selfDCountdown != 0) { lineDrawer.DrawIconAtLastPos(CMD_SELFD); } deque<Command>::iterator ci; for (ci = commandQue.begin(); ci != commandQue.end(); ++ci) { switch(ci->id) { case CMD_MOVE: { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.move); break; } case CMD_FIGHT:{ const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.fight); break; } case CMD_PATROL: { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.patrol); break; } case CMD_GUARD: { const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.guard); } break; } case CMD_RESTORE: { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.restore); lineDrawer.Break(endPos, cmdColors.restore); glSurfaceCircle(endPos, ci->params[3], 20); lineDrawer.RestartSameColor(); break; } case CMD_ATTACK: case CMD_DGUN: { if (ci->params.size() == 1) { const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_RECLAIM: case CMD_RESURRECT: { const float* color = (ci->id == CMD_RECLAIM) ? cmdColors.reclaim : cmdColors.resurrect; if (ci->params.size() == 4) { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, color); lineDrawer.Break(endPos, color); glSurfaceCircle(endPos, ci->params[3], 20); lineDrawer.RestartSameColor(); } else { int id = (int)ci->params[0]; if (id >= MAX_UNITS) { if (featureHandler->features[id - MAX_UNITS]) { const float3 endPos = featureHandler->features[id - MAX_UNITS]->midPos; lineDrawer.DrawLineAndIcon(ci->id, endPos, color); } } else { const CUnit* unit = uh->units[id]; if((unit != NULL) && (unit != owner) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, color); } } } break; } case CMD_REPAIR: case CMD_CAPTURE: { const float* color = (ci->id == CMD_REPAIR) ? cmdColors.repair : cmdColors.capture; if (ci->params.size() == 4) { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, color); lineDrawer.Break(endPos, color); glSurfaceCircle(endPos, ci->params[3], 20); lineDrawer.RestartSameColor(); } else { const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, color); } } break; } case CMD_WAIT:{ DrawWaitIcon(*ci); break; } case CMD_SELFD:{ lineDrawer.DrawIconAtLastPos(ci->id); break; } } if (ci->id < 0) { map<int, string>::const_iterator boi = buildOptions.find(ci->id); if (boi != buildOptions.end()) { BuildInfo bi; bi.def = unitDefHandler->GetUnitByID(-(ci->id)); if (ci->params.size() == 4) { bi.buildFacing = int(ci->params[3]); } bi.pos = float3(ci->params[0], ci->params[1], ci->params[2]); bi.pos = helper->Pos2BuildPos(bi); cursorIcons.AddBuildIcon(ci->id, bi.pos, owner->team, bi.buildFacing); lineDrawer.DrawLine(bi.pos, cmdColors.build); // draw metal extraction range if (bi.def->extractRange > 0) { lineDrawer.Break(bi.pos, cmdColors.build); glColor4fv(cmdColors.rangeExtract); glSurfaceCircle(bi.pos, bi.def->extractRange, 40); lineDrawer.Restart(); } } } } lineDrawer.FinishPath(); }
void CMobileCAI::DrawCommands(void) { lineDrawer.StartPath(owner->drawMidPos, cmdColors.start); if (owner->selfDCountdown != 0) { lineDrawer.DrawIconAtLastPos(CMD_SELFD); } CCommandQueue::iterator ci; for (ci = commandQue.begin(); ci != commandQue.end(); ++ci) { switch (ci->id) { case CMD_MOVE: { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.move); break; } case CMD_PATROL: { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.patrol); break; } case CMD_FIGHT: { if (ci->params.size() != 1) { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.fight); break; } } case CMD_ATTACK: case CMD_DGUN: { if (ci->params.size() == 1) { const CUnit* unit = uh->GetUnit(ci->params[0]); if ((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else if (ci->params.size() >= 3) { const float3 endPos(ci->params[0], ci->params[1], ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_GUARD: { const CUnit* unit = uh->GetUnit(ci->params[0]); if ((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.guard); } break; } case CMD_LOAD_ONTO: { const CUnit* unit = uh->GetUnitUnsafe(ci->params[0]); lineDrawer.DrawLineAndIcon(ci->id, unit->pos, cmdColors.load); break; } case CMD_WAIT: { DrawWaitIcon(*ci); break; } case CMD_SELFD: { lineDrawer.DrawIconAtLastPos(ci->id); break; } default: { DrawDefaultCommand(*ci); break; } } } lineDrawer.FinishPath(); }
void CAirCAI::DrawCommands(void) { lineDrawer.StartPath(owner->pos, cmdColors.start); if (owner->selfDCountdown != 0) { lineDrawer.DrawIconAtLastPos(CMD_SELFD); } CCommandQueue::iterator ci; for(ci=commandQue.begin();ci!=commandQue.end();++ci){ switch(ci->id){ case CMD_MOVE:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.move); break; } case CMD_FIGHT:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.fight); break; } case CMD_PATROL:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.patrol); break; } case CMD_ATTACK:{ if(ci->params.size()==1){ const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } } else { const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); } break; } case CMD_AREA_ATTACK:{ const float3 endPos(ci->params[0],ci->params[1],ci->params[2]); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.attack); lineDrawer.Break(endPos, cmdColors.attack); glSurfaceCircle(endPos, ci->params[3], 20); lineDrawer.RestartSameColor(); break; } case CMD_GUARD:{ const CUnit* unit = uh->units[int(ci->params[0])]; if((unit != NULL) && isTrackable(unit)) { const float3 endPos = helper->GetUnitErrorPos(unit, owner->allyteam); lineDrawer.DrawLineAndIcon(ci->id, endPos, cmdColors.guard); } break; } case CMD_WAIT:{ DrawWaitIcon(*ci); break; } case CMD_SELFD:{ lineDrawer.DrawIconAtLastPos(ci->id); break; } default: DrawDefaultCommand(*ci); break; } } lineDrawer.FinishPath(); }