// FGAICarrier - AIShip-derived class creates an AI aircraft carrier // // Written by David Culp, started October 2004. // // Copyright (C) 2004 David P. Culp - davidculp2@comcast.net // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #ifndef _FG_AICARRIER_HXX #define _FG_AICARRIER_HXX #include #include #include #include SG_USING_STD(string); SG_USING_STD(list); #include "AIShip.hxx" class FGAIManager; class FGAICarrier; class FGAICarrierHardware : public ssgBase { public: enum Type { Catapult, Wire, Solid }; FGAICarrier *carrier; int id; Type type; static FGAICarrierHardware* newCatapult(FGAICarrier *c) { FGAICarrierHardware* ch = new FGAICarrierHardware; ch->carrier = c; ch->type = Catapult; ch->id = unique_id++; return ch; } static FGAICarrierHardware* newWire(FGAICarrier *c) { FGAICarrierHardware* ch = new FGAICarrierHardware; ch->carrier = c; ch->type = Wire; ch->id = unique_id++; return ch; } static FGAICarrierHardware* newSolid(FGAICarrier *c) { FGAICarrierHardware* ch = new FGAICarrierHardware; ch->carrier = c; ch->type = Solid; ch->id = unique_id++; return ch; } private: static int unique_id; }; class FGAICarrier : public FGAIShip { public: FGAICarrier(FGAIManager* mgr); ~FGAICarrier(); void setSolidObjects(const list& solid_objects); void setWireObjects(const list& wire_objects); void setCatapultObjects(const list& catapult_objects); void setParkingPositions(const list& p); void setSign(const string& ); void setFlolsOffset(const Point3D& off); void getVelocityWrtEarth(sgVec3 v); virtual void bind(); virtual void unbind(); void UpdateFlols ( double dt ); bool init(); bool getParkPosition(const string& id, Point3D& geodPos, double& hdng, sgdVec3 uvw); private: void update(double dt); void mark_nohot(ssgEntity*); bool mark_wires(ssgEntity*, const list&, bool = false); bool mark_cat(ssgEntity*, const list&, bool = false); bool mark_solid(ssgEntity*, const list&, bool = false); list solid_objects; // List of solid object names list wire_objects; // List of wire object names list catapult_objects; // List of catapult object names list ppositions; // List of positions where an aircraft can start. string sign; // The sign of this carrier. // Velocity wrt earth. sgVec3 vel_wrt_earth; // these describe the flols Point3D flols_off; double dist; // the distance of the eyepoint from the flols double angle; int source; // the flols light which is visible at the moment }; #endif // _FG_AICARRIER_HXX