#pragma once #include "subsystm.h" #include "camship.h" #include "controls.h" //########################################################################## //####################### CameraControlsMapper ######################## //########################################################################## class CameraControlsMapper : public Subsystem { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data support // public: static Derivation *GetClassDerivations(); static SharedData DefaultData; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Messaging Support // public: enum { KeypressMessageID = Subsystem::NextMessageID, DirectorModeMessageID, IncrementCameraMessageID, DecrementCameraMessageID, CreateCameraInstanceMessageID, DeleteCameraInstanceMessageID, OutputCameraInstancesMessageID, NextMessageID }; void KeypressMessageHandler(ReceiverDataMessageOf *message); void DirectorModeMessageHandler(ReceiverDataMessageOf *message); void IncrementCameraMessageHandler(ReceiverDataMessageOf *message); void DecrementCameraMessageHandler(ReceiverDataMessageOf *message); void CreateCameraInstanceMessageHandler(ReceiverDataMessageOf *message); void DeleteCameraInstanceMessageHandler(ReceiverDataMessageOf *message); void OutputCameraInstancesMessageHandler(ReceiverDataMessageOf *message); protected: static const HandlerEntry MessageHandlerEntries[]; //static MessageHandlerSet MessageHandlers; static MessageHandlerSet& GetMessageHandlers(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Attribute Support // public: enum { StickPositionAttributeID = Subsystem::NextAttributeID, ThrottlePositionAttributeID, PedalsPositionAttributeID, ReverseThrustAttributeID, DriveCameraAttributeID, SlideOrClampAttributeID, NextAttributeID }; private: static const IndexEntry AttributePointers[]; protected: //static AttributeIndexSet AttributeIndex static AttributeIndexSet& GetAttributeIndex(); // // public attribute declarations go here // public: ControlsJoystick stickPosition; Scalar throttlePosition; Scalar pedalsPosition; ControlsButton reverseThrust; ControlsButton driveCamera; ControlsButton slideOrClamp; //########################################################################## // Model support // public: CameraShip* GetEntity() { return (CameraShip*)Subsystem::GetEntity(); } typedef void (CameraControlsMapper::*Performance)(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction // protected: CameraControlsMapper(CameraShip *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data); public: ~CameraControlsMapper(); Logical TestInstance() const; };