void DCeiling::Tick () { EResult res; switch (m_Direction) { case 0: // IN STASIS break; case 1: // UP res = MoveCeiling (m_Speed, m_TopHeight, m_Direction); if (res == pastdest) { switch (m_Type) { case ceilCrushAndRaise: m_Direction = -1; m_Speed = m_Speed1; if (!SN_IsMakingLoopingSound (m_Sector)) PlayCeilingSound (); break; // movers with texture change, change the texture then get removed case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; // fall through case genCeilingChg: m_Sector->SetTexture(sector_t::ceiling, m_Texture); // fall through default: SN_StopSequence (m_Sector, CHAN_CEILING); Destroy (); break; } } break; case -1: // DOWN res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction, m_Hexencrush); if (res == pastdest) { switch (m_Type) { case ceilCrushAndRaise: case ceilCrushRaiseAndStay: m_Speed = m_Speed2; m_Direction = 1; if (!SN_IsMakingLoopingSound (m_Sector)) PlayCeilingSound (); break; // in the case of ceiling mover/changer, change the texture // then remove the active ceiling case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; // fall through case genCeilingChg: m_Sector->SetTexture(sector_t::ceiling, m_Texture); // fall through default: SN_StopSequence (m_Sector, CHAN_CEILING); Destroy (); break; } } else // ( res != pastdest ) { if (res == crushed) { switch (m_Type) { case ceilCrushAndRaise: case ceilLowerAndCrush: case ceilLowerAndCrushDist: if (m_Speed1 == FRACUNIT && m_Speed2 == FRACUNIT) m_Speed = FRACUNIT / 8; break; default: break; } } } break; } }
// // T_MoveCeiling // void DCeiling::RunThink () { EResult res; switch (m_Direction) { case 0: // IN STASIS break; case 1: // UP res = MoveCeiling (m_Speed, m_TopHeight, m_Direction); if (res == pastdest) { S_StopSound (m_Sector->soundorg); S_Sound (m_Sector->soundorg, CHAN_BODY, "plats/pt1_stop", 1, ATTN_NORM); switch (m_Type) { case ceilCrushAndRaise: m_Direction = -1; m_Speed = m_Speed1; PlayCeilingSound (); break; // movers with texture change, change the texture then get removed case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; case genCeilingChg: m_Sector->ceilingpic = m_Texture; // fall through default: Destroy (); break; } } break; case -1: // DOWN res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction); if (res == pastdest) { S_StopSound (m_Sector->soundorg); S_Sound (m_Sector->soundorg, CHAN_BODY, "plats/pt1_stop", 1, ATTN_NORM); switch (m_Type) { case ceilCrushAndRaise: case ceilCrushRaiseAndStay: m_Speed = m_Speed2; m_Direction = 1; PlayCeilingSound (); break; // in the case of ceiling mover/changer, change the texture // then remove the active ceiling case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; case genCeilingChg: m_Sector->ceilingpic = m_Texture; // fall through default: Destroy (); break; } } else // ( res != pastdest ) { if (res == crushed) { switch (m_Type) { case ceilCrushAndRaise: case ceilLowerAndCrush: if (m_Speed1 == FRACUNIT && m_Speed2 == FRACUNIT) m_Speed = FRACUNIT / 8; break; default: break; } } } break; } }
// // T_MoveCeiling // void DCeiling::Tick () { EResult res; switch (m_Direction) { case 0: // IN STASIS break; case 1: // UP res = MoveCeiling (m_Speed, m_TopHeight, m_Direction); // [BC] Don't need to do anything more here if we're a client. if (( NETWORK_GetState( ) == NETSTATE_CLIENT ) || ( CLIENTDEMO_IsPlaying( ))) break; if (res == pastdest) { // [BC] If the sector has reached its destination, this is probably a good time to verify all the clients // have the correct floor/ceiling height for this sector. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { if ( m_Sector->floorOrCeiling == 0 ) SERVERCOMMANDS_SetSectorFloorPlane( ULONG( m_Sector - sectors )); else SERVERCOMMANDS_SetSectorCeilingPlane( ULONG( m_Sector - sectors )); } switch (m_Type) { case ceilCrushAndRaise: m_Direction = -1; m_Speed = m_Speed1; if (!SN_IsMakingLoopingSound (m_Sector)) PlayCeilingSound (); // [BC] If we're the server, send out a bunch of updates to clients. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { // Tell clients to change the direction of the ceiling. SERVERCOMMANDS_ChangeCeilingDirection( m_lCeilingID, m_Direction ); // Tell clients to change the speed of the ceiling. SERVERCOMMANDS_ChangeCeilingSpeed( m_lCeilingID, m_Speed ); // Potentially tell clients to stop playing a ceiling sound. if ( SN_IsMakingLoopingSound( m_Sector ) == false ) SERVERCOMMANDS_PlayCeilingSound( m_lCeilingID ); } break; // movers with texture change, change the texture then get removed case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; // fall through case genCeilingChg: m_Sector->SetTexture(sector_t::ceiling, m_Texture); // fall through default: // [BC] If we're the server, tell the client to destroy this ceiling. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { SERVERCOMMANDS_StopSectorSequence( m_Sector ); SERVERCOMMANDS_DestroyCeiling( m_lCeilingID ); } SN_StopSequence (m_Sector); Destroy (); break; } } break; case -1: // DOWN res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction, m_Hexencrush); // [BC] Don't need to do anything more here if we're a client. if (( NETWORK_GetState( ) == NETSTATE_CLIENT ) || ( CLIENTDEMO_IsPlaying( ))) break; if (res == pastdest) { // [BC] If the sector has reached its destination, this is probably a good time to verify all the clients // have the correct floor/ceiling height for this sector. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { if ( m_Sector->floorOrCeiling == 0 ) SERVERCOMMANDS_SetSectorFloorPlane( ULONG( m_Sector - sectors )); else SERVERCOMMANDS_SetSectorCeilingPlane( ULONG( m_Sector - sectors )); } switch (m_Type) { case ceilCrushAndRaise: case ceilCrushRaiseAndStay: m_Speed = m_Speed2; m_Direction = 1; if (!SN_IsMakingLoopingSound (m_Sector)) PlayCeilingSound (); // [BC] If we're the server, send out a bunch of updates to clients. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { // Tell clients to change the direction of the ceiling. SERVERCOMMANDS_ChangeCeilingDirection( m_lCeilingID, m_Direction ); // Tell clients to change the speed of the ceiling. SERVERCOMMANDS_ChangeCeilingSpeed( m_lCeilingID, m_Speed ); // Potentially tell clients to stop playing a ceiling sound. if ( SN_IsMakingLoopingSound( m_Sector ) == false ) SERVERCOMMANDS_PlayCeilingSound( m_lCeilingID ); } break; // in the case of ceiling mover/changer, change the texture // then remove the active ceiling case genCeilingChgT: case genCeilingChg0: m_Sector->special = m_NewSpecial; // fall through case genCeilingChg: m_Sector->SetTexture(sector_t::ceiling, m_Texture); // fall through default: // [BC] If we're the server, tell the client to destroy this ceiling. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { SERVERCOMMANDS_StopSectorSequence( m_Sector ); SERVERCOMMANDS_DestroyCeiling( m_lCeilingID ); } SN_StopSequence (m_Sector); Destroy (); break; } } else // ( res != pastdest ) { if (res == crushed) { switch (m_Type) { case ceilCrushAndRaise: case ceilLowerAndCrush: if (m_Speed1 == FRACUNIT && m_Speed2 == FRACUNIT) { m_Speed = FRACUNIT / 8; // [BC] If we're the server, tell clients to change the ceiling's speed. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_ChangeCeilingSpeed( m_lCeilingID, m_Speed ); } break; default: break; } } } break; } }