bool CWeapon::TryTargetRotate(CUnit* unit, bool userTarget){ float3 tempTargetPos(helper->GetUnitErrorPos(unit,owner->allyteam)); tempTargetPos+=errorVector*(weaponDef->targetMoveError*30*unit->speed.Length()*(1.0f-owner->limExperience)); float appHeight=ground->GetApproximateHeight(tempTargetPos.x,tempTargetPos.z)+2; if(tempTargetPos.y < appHeight){ tempTargetPos.y=appHeight; } short weaponHeadding = GetHeadingFromVector(mainDir.x, mainDir.z); short enemyHeadding = GetHeadingFromVector( tempTargetPos.x - weaponPos.x, tempTargetPos.z - weaponPos.z); return TryTargetHeading(enemyHeadding - weaponHeadding, tempTargetPos,userTarget, unit); }
bool CWeapon::TryTargetRotate(float3 pos, bool userTarget) { if (!userTarget && weaponDef->noAutoTarget) { return false; } if (weaponDef->interceptor || !weaponDef->canAttackGround || (weaponDef->onlyTargetCategory != 0xffffffff)) { return false; } if (!weaponDef->waterweapon && pos.y < 1) { pos.y = 1; } short weaponHeading = GetHeadingFromVector(mainDir.x, mainDir.z); short enemyHeading = GetHeadingFromVector( pos.x - weaponPos.x, pos.z - weaponPos.z); return TryTargetHeading(enemyHeading - weaponHeading, pos, userTarget, 0); }