//===========================================================================// // File: powersub.hpp // // Project: BattleTech // // Contents: Implementation details for powered subsystems // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // // //---------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // // This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // //===========================================================================// #if !defined(POWERSUB_HPP) # define POWERSUB_HPP # if !defined(HEAT_HPP) # include # endif //##################### Forward Class Declarations ####################### class Mech; //########################################################################### //################### PoweredSubsystem Model Resource ################### //########################################################################### struct PoweredSubsystem__SubsystemResource: public HeatSink::SubsystemResource { int voltageSourceIndex; Scalar thermalResistivityCoefficient; int auxScreenNumber; int auxScreenPlacement; char auxScreenLabel[64]; char engScreenLabel[64]; Scalar startTime; }; //########################################################################### //######################### PoweredSubsystem ############################ //########################################################################### class PoweredSubsystem: public HeatSink { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data Support // public: static Derivation ClassDerivations; static SharedData DefaultData; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Test Class Support // public: static Logical TestClass(Mech &); Logical TestInstance() const; void ResetToInitialState(Logical powered); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Power support // public: Subsystem* ResolveVoltageSource() { return voltageSource.Resolve(); } void AttachToVoltageSource(Subsystem *source); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction // public: typedef PoweredSubsystem__SubsystemResource SubsystemResource; PoweredSubsystem( Mech *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data = DefaultData ); ~PoweredSubsystem(); static int CreateStreamedSubsystem( NotationFile *model_file, const char *model_name, const char *subsystem_name, SubsystemResource *subsystem_resource, NotationFile *subsystem_file, const ResourceDirectories *directories, int passes = 1 ); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Local Data // protected: Scalar inputVoltage; Scalar outputVoltage; Scalar ratedVoltage; SubsystemConnection voltageSource; AlarmIndicator electricalStateAlarm; AlarmIndicator modeAlarm; }; //########################################################################### //################### PowerWatcher Model Resource ###################### //########################################################################### struct PowerWatcher__SubsystemResource: public HeatWatcher::SubsystemResource { Scalar minVoltagePercent; }; //########################################################################### //############################ PowerWatcher ############################ //########################################################################### // // A HeatWatcher that also watches its subject's supply voltage. Base of the // Torso / HUD / Gyroscope cockpit subsystems. // class PowerWatcher: public HeatWatcher { public: static Derivation ClassDerivations; static SharedData DefaultData; static Logical TestClass(Mech &); Logical TestInstance() const; void ResetToInitialState(Logical powered); void Simulation(Scalar time_slice); public: typedef PowerWatcher__SubsystemResource SubsystemResource; PowerWatcher( Mech *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data = DefaultData ); ~PowerWatcher(); protected: Scalar minVoltage; AlarmIndicator watchdogAlarm; }; //########################################################################### //#################### Generator Model Resource ######################## //########################################################################### struct Generator__SubsystemResource: public HeatSink::SubsystemResource { Scalar ratedVoltage; int maxTapCount; Scalar startTime; Scalar shortRecoveryTime; }; //########################################################################### //############################## Generator ############################# //########################################################################### // // The voltage SOURCE a PoweredSubsystem attaches to (currentTapCount tracks // attached loads). A HeatSink that produces power. // class Generator: public HeatSink { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data Support // public: static Derivation ClassDerivations; static SharedData DefaultData; enum { GeneratorOff = 0, GeneratorStarting, GeneratorReady, GeneratorShorted, GeneratorFailed, GeneratorStateCount }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Test / reset // public: static Logical TestClass(Mech &); Logical TestInstance() const; void ResetToInitialState(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Power interface // public: Scalar MeasuredVoltage() { Check(this); return outputVoltage; } Scalar RatedVoltageOf() { Check(this); return ratedVoltage; } int GetGeneratorNumber(){ Check(this); return generatorNumber; } void GeneratorSimulation(Scalar time_slice); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction // public: typedef Generator__SubsystemResource SubsystemResource; Generator( Mech *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data = DefaultData ); ~Generator(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Local Data // public: Scalar percentVoltageAvailable; int generatorOn; Scalar ratedVoltage; Scalar outputVoltage; int generatorNumber; int maxTapCount; int currentTapCount; Scalar startTime; Scalar startTimer; Scalar shortRecoveryTime; Scalar shortTimer; AlarmIndicator stateAlarm; }; #endif