TankAISniperGuesser.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D is distributed in the hope that it will be useful,
00012 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 }

Generated on Mon Feb 16 15:14:53 2009 for Scorched3D by  doxygen 1.5.3