00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponMoveTank.h>
00022 #include <weapons/AccessoryStore.h>
00023 #include <actions/TankMovement.h>
00024 #include <engine/ActionController.h>
00025 #include <landscapemap/LandscapeMaps.h>
00026 #include <landscapedef/LandscapeDefn.h>
00027
00028 REGISTER_ACCESSORY_SOURCE(WeaponMoveTank);
00029
00030 WeaponMoveTank::WeaponMoveTank() :
00031 stepTime_(fixed(true, 500)), useFuel_(-1), maximumRange_(100)
00032 {
00033
00034 }
00035
00036 WeaponMoveTank::~WeaponMoveTank()
00037 {
00038
00039 }
00040
00041 bool WeaponMoveTank::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00042 {
00043 if (!Weapon::parseXML(context, accessoryNode)) return false;
00044 accessoryNode->getNamedChild("steptime", stepTime_, false);
00045 accessoryNode->getNamedChild("maximumrange", maximumRange_, false);
00046
00047 std::string usefuel;
00048 if (accessoryNode->getNamedChild("usefuel", usefuel, false))
00049 {
00050 if (0 == strcmp(usefuel.c_str(), "true")) useFuel_ = -1;
00051 else if (0 == strcmp(usefuel.c_str(), "false")) useFuel_ = 0;
00052 else useFuel_ = atoi(usefuel.c_str());
00053 }
00054
00055 return true;
00056 }
00057
00058 void WeaponMoveTank::fireWeapon(ScorchedContext &context,
00059 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00060 {
00061 int arenaX = context.getLandscapeMaps().getDefinitions().getDefn()->getArenaX();
00062 int arenaY = context.getLandscapeMaps().getDefinitions().getDefn()->getArenaY();
00063 int arenaWidth = context.getLandscapeMaps().getDefinitions().getDefn()->getArenaWidth();
00064 int arenaHeight = context.getLandscapeMaps().getDefinitions().getDefn()->getArenaHeight();
00065
00066 int posX = position[0].asInt();
00067 int posY = position[1].asInt();
00068 if (posX > arenaX + 5 && posX < arenaX + arenaWidth - 5 &&
00069 posY > arenaY + 5 && posY < arenaY + arenaHeight - 5)
00070 {
00071 context.getActionController().addAction(
00072 new TankMovement(weaponContext, this, posX, posY));
00073 }
00074 }