00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponCenterPosition.h>
00022 #include <weapons/AccessoryStore.h>
00023 #include <landscapemap/LandscapeMaps.h>
00024 #include <landscapedef/LandscapeTex.h>
00025 #include <engine/ActionController.h>
00026
00027 REGISTER_ACCESSORY_SOURCE(WeaponCenterPosition);
00028
00029 WeaponCenterPosition::WeaponCenterPosition() :
00030 nextAction_(0)
00031 {
00032
00033 }
00034
00035 WeaponCenterPosition::~WeaponCenterPosition()
00036 {
00037
00038 }
00039
00040 bool WeaponCenterPosition::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00041 {
00042 if (!Weapon::parseXML(context, accessoryNode)) return false;
00043
00044 if (!accessoryNode->getNamedChild("height", height_)) return false;
00045
00046 XMLNode *subNode = 0;
00047 if (!accessoryNode->getNamedChild("nextaction", subNode)) return false;
00048
00049
00050 AccessoryPart *accessory = context.getAccessoryStore().
00051 createAccessoryPart(context, parent_, subNode);
00052 if (!accessory || accessory->getType() != AccessoryPart::AccessoryWeapon)
00053 {
00054 return subNode->returnError("Failed to find sub weapon, not a weapon");
00055 }
00056 nextAction_ = (Weapon*) accessory;
00057
00058 return true;
00059 }
00060
00061 void WeaponCenterPosition::fireWeapon(ScorchedContext &context,
00062 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00063 {
00064 int arenaX = context.getLandscapeMaps().getGroundMaps().getArenaX();
00065 int arenaY = context.getLandscapeMaps().getGroundMaps().getArenaY();
00066 int arenaWidth = context.getLandscapeMaps().getGroundMaps().getArenaWidth();
00067 int arenaHeight = context.getLandscapeMaps().getGroundMaps().getArenaHeight();
00068
00069 FixedVector newPositon = position;
00070 newPositon[0] = (arenaWidth / 2) + arenaX;
00071 newPositon[1] = (arenaHeight / 2) + arenaY;
00072 newPositon[2] = height_.getValue(context);
00073
00074 nextAction_->fireWeapon(context, weaponContext, newPositon, velocity);
00075
00076 }