//=========================================================================// // File: seeker.hpp // // Project: BattleTech // // Contents: A subsystem which guides, seek out and find a target // //----------------------------------------------------------------------------// // Date Who Modification // // -------- --- ------------------------------------------------------------// // 04/13/95 JM Initial coding. // // 07/12/95 GDU Complied with new libraries, added seeker logic // //----------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. All Rights reserved // // PROPRIETARY AND CONFIDENTIAL // //============================================================================// #if !defined (SEEKER_HPP) #define SEEKER_HPP #if !defined(SUBSYSTM_HPP) #include #endif #if !defined(POINT3D_HPP) #include #endif //######################### Forward Class Declarations ######################## class Missile; class Entity; //######################### Seeker Subsystem Resource ########################## struct Seeker__SubsystemResource: public Subsystem::SubsystemResource { }; //########################################################################### //######################### CLASS -- Seeker ########################## //########################################################################### class Seeker : public Subsystem { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Messaging Support // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data Support // public: static Derivation ClassDerivations; static SharedData DefaultData; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Attribute Support // public: enum { TargetPositionAttributeID = Subsystem::NextAttributeID, RangeToTargetAttributeID, RangeFromCreationAttributeID, NextAttributeID }; private: static const IndexEntry AttributePointers[]; protected: static AttributeIndexSet AttributeIndex; // // public attribute declarations go here // public: Point3D targetPosition; // for thruster const Point3D creationPoint; // where the missile was fired from Entity *targetEntity; const Point3D targetOffset; Scalar rangeToTarget, rangeFromCreation, startingRangeToTarget; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Model Support // public: enum { Empty = Subsystem::StateCount, StateCount}; typedef void (Seeker::*Performance)(Scalar time_slice); void LeadTarget(); void FindTarget(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // TestClass Support // public: static Logical TestClass(Missile &); void ResetToInitialState(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction // public: typedef Seeker__SubsystemResource SubsystemResource; Seeker ( Missile *owner, int subsystem_ID, SubsystemResource *subsystem_resource, Entity *target, const Point3D offset ); ~Seeker(); Logical TestInstance() const; }; #endif