//===========================================================================// // File: projweap.hpp // // Project: BattleTech Brick: Mech weapons // // Contents: ProjectileWeapon -- the ballistic (ammo-fed) weapon base // //---------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // // This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // //===========================================================================// #if !defined(PROJWEAP_HPP) # define PROJWEAP_HPP # if !defined(MECHWEAP_HPP) # include # endif # if !defined(POINT3D_HPP) # include # endif //##################### Forward Class Declarations ####################### class Mech; //########################################################################### //################ ProjectileWeapon Model Resource ##################### //########################################################################### // // WIRE-VERIFIED layout (raw-stream dump, TEST.EGG SRM6s): tracerInterval // reads 1, ammoBinIndex the true bin roster slot (27/29), minTimeOfFlight // 0.5, minVoltagePercentToFire 0.3, minJamChance 0.05, and // MissileLauncher's missileCount lands on 6 (an SRM6!). (The interim // alignment pad is gone -- the ancestry shortfall was the HeatSink // linkedSinkIndex + the MechWeapon pip tail, both now real fields.) // struct ProjectileWeapon__SubsystemResource: public MechWeapon::SubsystemResource { int tracerInterval; int ammoBinIndex; Scalar minTimeOfFlight; Scalar minVoltagePercentToFire; Scalar minJamChance; }; //########################################################################### //######################### ProjectileWeapon ########################### //########################################################################### class ProjectileWeapon: public MechWeapon { public: static Derivation ClassDerivations; static SharedData DefaultData; static Logical TestClass(Mech &); Logical TestInstance() const; virtual void FireWeapon(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Per-frame simulation (the ballistic fire state machine). // public: typedef void (ProjectileWeapon::*Performance)(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } void ProjectileWeaponSimulation(Scalar time_slice); Logical CheckForJam(); // // The "sim live" novice lockout (the owning BTPlayer's simLive // experience flag): novice ballistics never jam. // Logical LiveFireEnabled(); public: typedef ProjectileWeapon__SubsystemResource SubsystemResource; ProjectileWeapon( Mech *owner, int subsystem_ID, SubsystemResource *subsystem_resource, SharedData &shared_data = DefaultData ); ~ProjectileWeapon(); protected: SubsystemConnection ammoBinLink; int tracerInterval; int tracerCounter; int ejectState; Scalar totalTimeToEject; Scalar timeToEject; Scalar percentOfEject; Scalar minJamChance; Scalar minTimeOfFlight; Scalar minVoltagePercentToFire; Vector3D launchVelocity; Vector3D tracerOrigin; Point3D leadPosition; int tracerModelHandle; }; #endif