Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}