44#include " model/model.h"
55#include " ship/ship.h"
66
7- EffectHostTurret::EffectHostTurret (object* objp, int submodel, int fire_pnt, matrix orientationOverride, bool orientationOverrideRelative) :
8- EffectHost(orientationOverride, orientationOverrideRelative), m_objnum(OBJ_INDEX (objp)), m_objsig(objp->signature), m_submodel(submodel), m_fire_pnt(fire_pnt) {}
7+ EffectHostTurret::EffectHostTurret (const object* objp, int submodel, int fire_pnt, bool is_fighterbeam , matrix orientationOverride, bool orientationOverrideRelative) :
8+ EffectHost(orientationOverride, orientationOverrideRelative), m_objnum(OBJ_INDEX (objp)), m_objsig(objp ? objp ->signature : - 1 ), m_submodel(submodel), m_fire_pnt(fire_pnt), m_is_fighterbeam(is_fighterbeam ) {}
99
1010std::pair<vec3d, matrix> EffectHostTurret::getPositionAndOrientation (bool relativeToParent, float interp, const std::optional<vec3d>& tabled_offset) const {
1111 ship& shipp = Ships[Objects[m_objnum].instance ];
1212 const polymodel* pm = model_get (Ship_info[shipp.ship_info_index ].model_num );
1313 const polymodel_instance* pmi = model_get_instance (shipp.model_instance_num );
1414
1515 vec3d gvec, pos;
16- model_subsystem *tp = ship_get_indexed_subsys (&shipp, pm->submodel [m_submodel].subsys_num )->system_info ;
16+ model_subsystem* tp;
17+ if (m_is_fighterbeam) {
18+ tp = &shipp.beam_sys_info ;
19+ } else {
20+ auto subsys = ship_get_subsys_for_submodel (&shipp, m_submodel);
21+ Assertion (subsys != nullptr , " EffectHostTurret constructed with missing subsystem!" );
22+ tp = subsys->system_info ;
23+ }
1724 vec3d* gun_pos = &tp->turret_firing_point [m_fire_pnt % tp->turret_num_firing_points ];
1825 const matrix& gun_frame_of_reference = pm->submodel [m_submodel].frame_of_reference ;
1926
@@ -72,6 +79,5 @@ float EffectHostTurret::getHostRadius() const {
7279}
7380
7481bool EffectHostTurret::isValid () const {
75- return m_objnum >= 0 && m_submodel >= 0 && Objects[m_objnum].signature == m_objsig && Objects[m_objnum].type == OBJ_SHIP &&
76- model_get (Ship_info[Ships[Objects[m_objnum].instance ].ship_info_index ].model_num )->submodel [m_submodel].subsys_num >= 0 ;
77- }
82+ return m_objnum >= 0 && m_submodel >= 0 && Objects[m_objnum].signature == m_objsig && Objects[m_objnum].type == OBJ_SHIP ;
83+ }
0 commit comments