float3 CSelectedUnitsAI::MoveToPos(int unit, float3 nextCornerPos, float3 dir, Command* command, std::vector<std::pair<int,Command> >* frontcmds, bool* newline) { //int lineNum=posNum/numColumns; //int colNum=posNum-lineNum*numColumns; //float side=(0.25f+colNum*0.5f)*columnDist*(colNum&1 ? -1:1); *newline = false; if ((nextCornerPos.x - addSpace) > frontLength) { nextCornerPos.x = 0; nextCornerPos.z -= avgLength * 2 * 8; *newline = true; } if (!frontcmds) { return nextCornerPos; } int unitSize = 16; const CUnit* u = uh->units[unit]; if (u) { const UnitDef* ud = u->unitDef; unitSize = (int)((ud->xsize + ud->zsize) / 2); } float3 retPos( nextCornerPos.x + unitSize * 8 * 2 + addSpace, 0, nextCornerPos.z); float3 movePos(nextCornerPos.x + unitSize * 8 + addSpace, 0, nextCornerPos.z); // posit in coordinates of "front" if (nextCornerPos.x == 0) { movePos.x = unitSize * 8; retPos.x -= addSpace; } float3 pos; pos.x = rightPos.x + (movePos.x * (dir.x / dir.y)) - (movePos.z * (dir.z/dir.y)); pos.z = rightPos.z + (movePos.x * (dir.z / dir.y)) + (movePos.z * (dir.x/dir.y)); pos.y = ground->GetHeightAboveWater(pos.x, pos.z); Command c(command->GetID(), command->options); c.params.push_back(pos.x); c.params.push_back(pos.y); c.params.push_back(pos.z); frontcmds->push_back(std::pair<int, Command>(unit, c)); return retPos; }
float3 CSelectedUnitsAI::MoveToPos(int unit, float3 nextCornerPos, float3 dir, Command* command) { //int lineNum=posNum/numColumns; //int colNum=posNum-lineNum*numColumns; //float side=(0.25f+colNum*0.5f)*columnDist*(colNum&1 ? -1:1); if(nextCornerPos.x-addSpace>frontLength) { nextCornerPos.x=0; nextCornerPos.z-=avgLength*2*8; } int unitSize=16; CUnit* u = uh->units[unit]; if (u) { const UnitDef* ud = u->unitDef; unitSize = (int)((ud->xsize + ud->zsize)/2); } float3 retPos(nextCornerPos.x+unitSize*8*2+addSpace, 0, nextCornerPos.z); float3 movePos(nextCornerPos.x+unitSize*8+addSpace, 0, nextCornerPos.z); //posit in coordinates of "front" if (nextCornerPos.x==0) { movePos.x=unitSize*8; retPos.x -= addSpace ; } float3 pos; pos.x = rightPos.x + (movePos.x * (dir.x / dir.y)) - (movePos.z * (dir.z/dir.y)); pos.z = rightPos.z + (movePos.x * (dir.z / dir.y)) + (movePos.z * (dir.x/dir.y)); pos.y = ground->GetHeight(pos.x, pos.z); Command c; c.id = command->id; c.params.push_back(pos.x); c.params.push_back(pos.y); c.params.push_back(pos.z); c.options = command->options; uh->units[unit]->commandAI->GiveCommand(c, false); return retPos; }