@@ -201,6 +201,7 @@ void ACraft::Clear() {
201
201
m_DeliveryState = FALL;
202
202
m_AltitudeMoveState = HOVER;
203
203
m_AltitudeControl = 0 ;
204
+ m_CanEnterOrbit = true ;
204
205
m_MaxPassengers = -1 ;
205
206
206
207
m_DeliveryDelayMultiplier = 1.0 ;
@@ -251,6 +252,7 @@ int ACraft::Create(const ACraft& reference) {
251
252
m_DeliveryState = reference.m_DeliveryState ;
252
253
m_AltitudeMoveState = reference.m_AltitudeMoveState ;
253
254
m_AltitudeControl = reference.m_AltitudeControl ;
255
+ m_CanEnterOrbit = reference.m_CanEnterOrbit ;
254
256
m_MaxPassengers = reference.m_MaxPassengers ;
255
257
256
258
m_DeliveryDelayMultiplier = reference.m_DeliveryDelayMultiplier ;
@@ -285,6 +287,7 @@ int ACraft::ReadProperty(const std::string_view& propName, Reader& reader) {
285
287
MatchProperty (" DeliveryDelayMultiplier" , { reader >> m_DeliveryDelayMultiplier; });
286
288
MatchProperty (" ExitInterval" , { reader >> m_ExitInterval; });
287
289
MatchProperty (" CanLand" , { reader >> m_LandingCraft; });
290
+ MatchProperty (" CanEnterOrbit" , { reader >> m_CanEnterOrbit; });
288
291
MatchProperty (" MaxPassengers" , { reader >> m_MaxPassengers; });
289
292
MatchProperty (" ScuttleIfFlippedTime" , { reader >> m_ScuttleIfFlippedTime; });
290
293
MatchProperty (" ScuttleOnDeath" , { reader >> m_ScuttleOnDeath; });
@@ -314,7 +317,10 @@ int ACraft::Save(Writer& writer) const {
314
317
315
318
writer.NewProperty (" CrashSound" );
316
319
writer << m_CrashSound;
317
-
320
+
321
+ writer.NewProperty (" CanEnterOrbit" );
322
+ writer << m_CanEnterOrbit;
323
+
318
324
writer.NewProperty (" MaxPassengers" );
319
325
writer << m_MaxPassengers;
320
326
writer.NewProperty (" ScuttleIfFlippedTime" );
@@ -698,23 +704,26 @@ void ACraft::Update() {
698
704
// ///////////////////////////////////////
699
705
// Check for having gone into orbit
700
706
701
- if (m_Pos.m_Y < -m_CharHeight || m_Pos.m_Y > g_SceneMan.GetSceneHeight () + m_CharHeight) {
702
- g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
703
- // Play fading away thruster sound
704
- // if (m_pMThruster && m_pMThruster->IsEmitting())
705
- // m_pMThruster->(pTargetBitmap, targetPos, mode, onlyPhysical);
706
- m_ToDelete = true ;
707
- }
707
+ if (m_CanEnterOrbit) {
708
+ if (m_Pos.m_Y < -m_CharHeight || m_Pos.m_Y > g_SceneMan.GetSceneHeight () + m_CharHeight) {
709
+ g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
710
+ // Play fading away thruster sound
711
+ // if (m_pMThruster && m_pMThruster->IsEmitting())
712
+ // m_pMThruster->(pTargetBitmap, targetPos, mode, onlyPhysical);
713
+ m_ToDelete = true ;
714
+ }
708
715
709
- if (g_ActivityMan.GetActivity ()->GetCraftOrbitAtTheEdge ()) {
710
- if (g_SceneMan.GetScene () && !g_SceneMan.GetScene ()->WrapsX ()) {
711
- if (m_Pos.m_X < -GetSpriteWidth () || m_Pos.m_X > g_SceneMan.GetSceneWidth () + GetSpriteWidth ()) {
712
- g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
713
- m_ToDelete = true ;
716
+ // Horizontal orbiting, if scene doesn't wrap
717
+ if (g_ActivityMan.GetActivity ()->GetCraftOrbitAtTheEdge ()) {
718
+ if (g_SceneMan.GetScene () && !g_SceneMan.GetScene ()->WrapsX ()) {
719
+ if (m_Pos.m_X < -GetSpriteWidth () || m_Pos.m_X > g_SceneMan.GetSceneWidth () + GetSpriteWidth ()) {
720
+ g_ActivityMan.GetActivity ()->HandleCraftEnteringOrbit (this );
721
+ m_ToDelete = true ;
722
+ }
714
723
}
715
- }
724
+ }
716
725
}
717
-
726
+
718
727
if (m_Status == DEAD) {
719
728
if (m_ScuttleOnDeath || m_AIMode == AIMODE_SCUTTLE) {
720
729
GibThis ();
0 commit comments