#if !defined(MECHTECH_HPP) # define MECHTECH_HPP # if !defined(MECHSUB_HPP) # include # endif //########################################################################## //###################### MechTech::StatusInfo ######################## //########################################################################## struct MechTech__StatusInfo SIGNATURED { public: int currentStatus, wooHooed; Time startTime, wooHooEnd; }; //########################################################################## //###############3### MechTech::SubsystemMonitor ##################### //########################################################################## struct MechTech__SubsystemMonitor: public Plug { friend class MechTech; //########################################################################## // Memory Allocation Support // private: static MemoryBlock AllocatedMemory; void* operator new(size_t) {return AllocatedMemory.New();} void operator delete(void *where) {AllocatedMemory.Delete(where);} public: MechTech__StatusInfo statusArray[MechSubsystem::TechStatusTypeCount]; MechSubsystem *monitoredSubsystem; MechTech__SubsystemMonitor(MechSubsystem *subsystem); ~MechTech__SubsystemMonitor(); }; //########################################################################## //##################### MechTech::ModelResource ###################### //########################################################################## struct MechTech__SubsystemResource: public Subsystem::SubsystemResource { ResourceDescription::ResourceID alarmModel; Scalar wooHooMinimumDuration, wooHooDurationRange, wooHooChance; }; //########################################################################## //############################ MechTech ############################## //########################################################################## class MechTech: public Subsystem { //########################################################################## // Shared Data Support // public: static Derivation ClassDerivations; static SharedData DefaultData; //########################################################################## // Attribute Support // public: typedef MechTech__StatusInfo StatusInfo; typedef MechTech__SubsystemMonitor SubsystemMonitor; typedef MechTech__SubsystemResource SubsystemResource; //########################################################################## // Construction and Destruction Support // public: ~MechTech(); static Logical CreateStreamedSubsystem( NotationFile *model_file, const char* model_name, const char* subsystem_name, SubsystemResource *subsystem_resource, NotationFile *subsystem_file, const ResourceDirectories *directories, ResourceFile *resource_file ); MechTech( Mech *entity, int subsystem_id, SubsystemResource *model, SharedData &shared_data = DefaultData ); Logical TestInstance() const; //########################################################################## // Model support // public: typedef void (MechTech::*Performance)(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } ChainOf subsystemMonitors; Scalar wooHooMinimumDuration, wooHooDurationRange, wooHooChance; ResourceDescription::ResourceID alarmModel; void TechnicalAssistance(Scalar time_slice); Mech* GetEntity() {return (Mech*)Subsystem::GetEntity();} }; #endif