WeaponTeleport.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 <weapons/WeaponTeleport.h>
00022 #include <engine/ActionController.h>
00023 #include <landscapemap/LandscapeMaps.h>
00024 #include <landscapedef/LandscapeTex.h>
00025 #include <actions/Teleport.h>
00026 #include <common/Defines.h>
00027 
00028 REGISTER_ACCESSORY_SOURCE(WeaponTeleport);
00029 
00030 WeaponTeleport::WeaponTeleport() : groundOnly_(true)
00031 {
00032 
00033 }
00034 
00035 WeaponTeleport::~WeaponTeleport()
00036 {
00037 
00038 }
00039 
00040 bool WeaponTeleport::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00041 {
00042         if (!Weapon::parseXML(context, accessoryNode)) return false;
00043         if (!accessoryNode->getNamedChild("delay", delay_)) return false;
00044         if (!accessoryNode->getNamedChild("sound", sound_)) return false;
00045         accessoryNode->getNamedChild("groundonly", groundOnly_, false);
00046         
00047         if (!S3D::checkDataFile(getSound())) return false;
00048 
00049         return true;
00050 }
00051 
00052 fixed WeaponTeleport::getDelay(ScorchedContext &context)
00053 {
00054         return delay_.getValue(context);
00055 }
00056 
00057 void WeaponTeleport::fireWeapon(ScorchedContext &context,
00058         WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00059 {
00060         // Mininum height
00061         fixed allowedHeight = 0;
00062         LandscapeTex &tex = *context.getLandscapeMaps().getDefinitions().getTex();
00063                 if (tex.border->getType() == LandscapeTexType::eWater)
00064         {
00065                 LandscapeTexBorderWater *water = 
00066                         (LandscapeTexBorderWater *) tex.border;
00067 
00068                 allowedHeight = water->height;
00069         }
00070 
00071         int arenaX = context.getLandscapeMaps().getGroundMaps().getArenaX();
00072         int arenaY = context.getLandscapeMaps().getGroundMaps().getArenaY();
00073         int arenaWidth = context.getLandscapeMaps().getGroundMaps().getArenaWidth();
00074         int arenaHeight = context.getLandscapeMaps().getGroundMaps().getArenaHeight();
00075 
00076         if (position[0] > fixed(arenaX + 5) && 
00077                 position[1] > fixed(arenaY + 5) &&
00078                 position[0] < fixed(arenaX + arenaWidth - 5) &&
00079                 position[1] < fixed(arenaY + arenaHeight - 5))
00080         {
00081                 fixed landscapeHeight = context.getLandscapeMaps().getGroundMaps().getInterpHeight(
00082                         position[0], position[1]);
00083                 if (landscapeHeight >= allowedHeight - 1)
00084                 {
00085                         context.getActionController().addAction(
00086                                 new Teleport(position, weaponContext, this));
00087                 }
00088         }
00089 }

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