00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <tankai/TankAISniperGuesser.h>
00022 #include <tank/Tank.h>
00023 #include <tank/TankLib.h>
00024 #include <tank/TankPosition.h>
00025 #include <server/ScorchedServer.h>
00026 #include <common/Logger.h>
00027 #include <common/RandomGenerator.h>
00028
00029 TankAISniperGuesser::TankAISniperGuesser()
00030 {
00031 }
00032
00033 TankAISniperGuesser::~TankAISniperGuesser()
00034 {
00035 }
00036
00037 bool TankAISniperGuesser::guess(Tank *tank, Vector &target,
00038 float distForSniper, bool checkIntersection, float offset)
00039 {
00040 fixed angleXYDegs, angleYZDegs, power;
00041 RandomGenerator generator;
00042 generator.seed(rand());
00043
00044 FixedVector shotPosition = tank->getPosition().getTankPosition();
00045 if (TankLib::getSniperShotTowardsPosition(
00046 ScorchedServer::instance()->getContext(),
00047 shotPosition,
00048 FixedVector::fromVector(target),
00049 fixed::fromFloat(distForSniper),
00050 angleXYDegs, angleYZDegs, power,
00051 checkIntersection))
00052 {
00053 fixed xyOffset = generator.getRandFixed() * fixed::fromFloat(offset);
00054 fixed yzOffset = fixed::fromFloat(offset) - xyOffset;
00055
00056 tank->getPosition().rotateGunXY(angleXYDegs + xyOffset, false);
00057 tank->getPosition().rotateGunYZ(angleYZDegs + yzOffset, false);
00058 tank->getPosition().changePower(power, false);
00059
00060 return true;
00061 }
00062 return false;
00063 }