//===========================================================================// // File: gauss.cc // // Project: BT Brick: Entity Manager // // Contents: Basic weapons system pieces // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 04/13/95 JM Initial coding. // // 07/19/95 GDU Complied with new munga and added electrical behavior //---------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. All Rights reserved // // // PROPRIETARY AND CONFIDENTIAL // //===========================================================================// #include #pragma hdrstop #if !defined(GAUSS_HPP) # include #endif //############################################################################# // Shared Data Support // GaussRifle::SharedData GaussRifle::DefaultData( &GaussRifle::ClassDerivations, Emitter::GetMessageHandlers(), // task #6: the port's accessor idiom -- inherits // MechWeapon's ConfigureMappables/ChooseButton MechWeapon::GetAttributeIndex(), // gauge wave: inherit temps/InputVoltage/OutputVoltage/PercentDone (was empty) GaussRifle::StateCount ); Derivation GaussRifle::ClassDerivations( &Emitter::ClassDerivations, "GaussRifle" ); //############################################################################# // Messaging Support // #if 0 //############################################################################# // Attribute Support // const GaussRifle::IndexEntry GaussRifle::AttributePointers[]= { ATTRIBUTE_ENTRY(GaussRifle, DischargeVoltage, dischargeVoltage) }; GaussRifle::AttributeIndexSet GaussRifle::AttributeIndex( ELEMENTS(GaussRifle::AttributePointers), GaussRifle::AttributePointers, Emitter::AttributeIndex ); #endif //############################################################################# // Model Support // void GaussRifle::FireWeapon() { // // Fire the weapon // currentLevel = 0.0f; // binary @004bdcb4/@004bdca4 write [this+0x414] == inherited Emitter currentLevel (discharge) Check_Fpu(); } //############################################################################# // Constructer/Destructor Support // GaussRifle::GaussRifle( Mech *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data ): Emitter(owner, subsystem_ID, subsystem_resource, shared_data) { Check(owner); Check_Pointer(subsystem_resource); currentLevel = 0.0f; // binary @004bdcb4/@004bdca4 write [this+0x414] == inherited Emitter currentLevel (discharge) Check_Fpu(); } GaussRifle::~GaussRifle() { Check(this); Check_Fpu(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CreateStreamedSubsystem // Logical GaussRifle::CreateStreamedSubsystem( ResourceFile *resource_file, NotationFile *model_file, const char *model_name, const char *subsystem_name, SubsystemResource *subsystem_resource, NotationFile *subsystem_file, const ResourceDirectories *directories, int passes ) { if ( !Emitter::CreateStreamedSubsystem( resource_file, model_file, model_name, subsystem_name, subsystem_resource, subsystem_file, directories, passes ) ) { Check_Fpu(); return False; } subsystem_resource->subsystemModelSize = sizeof(*subsystem_resource); subsystem_resource->classID = RegisteredClass::GaussRifleClassID; Check_Fpu(); return True; } Logical GaussRifle::TestInstance() const { return IsDerivedFrom(ClassDerivations); } //===========================================================================// // WAVE 7 factory bridge -- GaussRifle (factory case 0xBCE, "MissileWeapon" // mislabel). VDATA.h enum: 0xBCE == GaussRifleClassID. GaussRifle : Emitter // (sizeof 0x484 = Emitter 0x478 + Vector3D muzzleVelocity). ctor @004bdcb4, // no-op FireWeapon @004bdca4 (just zeros currentLevel -- a non-functional weapon // in this 1995 build), so it needs a DEDICATED bridge (CreateEmitterSubsystem // would build a plain Emitter that WOULD deal damage). Was building a // MissileLauncher RECON_SUBSYS stub. alloc 0x484. //===========================================================================// Subsystem *CreateGaussRifleSubsystem(Mech *owner, int id, void *seg) { Check(sizeof(GaussRifle) <= 0x484); return (Subsystem *) new (Memory::Allocate(0x484)) GaussRifle(owner, id, (GaussRifle::SubsystemResource *)seg, GaussRifle::DefaultData); }