void DGlow2::Tick () { if (m_Tics++ >= m_MaxTics) { if (m_OneShot) { m_Sector->SetLightLevel(m_End); // [BC] Flag the sector as having its light level altered. That way, when clients // connect, we can tell them about the updated light level. m_Sector->bLightChange = true; // [BC] If we're the server, tell clients about the light level change. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( ULONG( m_Sector - sectors )); Destroy (); return; } else { int temp = m_Start; m_Start = m_End; m_End = temp; m_Tics -= m_MaxTics; } } m_Sector->SetLightLevel(((m_End - m_Start) * m_Tics) / m_MaxTics + m_Start); }
void EV_TurnTagLightsOff (int tag) { int i; int secnum; // [RH] Don't do a linear search for (secnum = -1; (secnum = P_FindSectorFromTag (tag, secnum)) >= 0; ) { sector_t *sector = sectors + secnum; int min = sector->lightlevel; for (i = 0; i < sector->linecount; i++) { sector_t *tsec = getNextSector (sector->lines[i],sector); if (!tsec) continue; if (tsec->lightlevel < min) min = tsec->lightlevel; } sector->SetLightLevel(min); // [BC] Flag the sector as having its light level altered. That way, when clients // connect, we can tell them about the updated light level. sector->bLightChange = true; // [BC] If we're the server, tell clients about the light level change. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( secnum ); } }
void EV_LightChange (int tag, int value) { int secnum = -1; while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) { sectors[secnum].SetLightLevel(sectors[secnum].lightlevel + value); // [BC] Flag the sector as having its light level altered. That way, when clients // connect, we can tell them about the updated light level. sectors[secnum].bLightChange = true; // [BC] If we're the server, tell clients about the light level change. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( secnum ); } }
void EV_LightTurnOn (int tag, int bright) { int secnum = -1; // [RH] Don't do a linear search while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) { sector_t *sector = sectors + secnum; int tbright = bright; //jff 5/17/98 search for maximum PER sector // bright = -1 means to search ([RH] Not 0) // for highest light level // surrounding sector if (bright < 0) { int j; for (j = 0; j < sector->linecount; j++) { sector_t *temp = getNextSector (sector->lines[j], sector); if (!temp) continue; if (temp->lightlevel > tbright) tbright = temp->lightlevel; } } sector->SetLightLevel(tbright); //jff 5/17/98 unless compatibility optioned //then maximum near ANY tagged sector if (i_compatflags & COMPATF_LIGHT) { bright = tbright; } // [BC] Flag the sector as having its light level altered. That way, when clients // connect, we can tell them about the updated light level. sector->bLightChange = true; // [BC] If we're the server, tell clients about the light level change. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( secnum ); } }
// // TURN LINE'S TAG LIGHTS ON // [RH] Takes a tag instead of a line // void EV_LightTurnOn (int tag, int bright) { int secnum = -1; // [RH] Don't do a linear search while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) { sector_t *sector = sectors + secnum; // bright = -1 means to search ([RH] Not 0) // for highest light level // surrounding sector if (bright < 0) { int j; bright = 0; for (j = 0; j < sector->linecount; j++) { sector_t *temp = getNextSector (sector->lines[j], sector); if (!temp) continue; if (temp->lightlevel > bright) bright = temp->lightlevel; } } sector->lightlevel = clamp (bright, 0, 255); // [BC] Flag the sector as having its light level altered. That way, when clients // connect, we can tell them about the updated light level. sector->bLightChange = true; // [BC] If we're the server, tell clients about the light level change. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( secnum ); } }
void EV_StopLightEffect (int tag) { TThinkerIterator<DLighting> iterator; DLighting *effect; while ((effect = iterator.Next()) != NULL) { if (effect->GetSector()->tag == tag) { effect->Destroy(); // [BC] Since this sector's light level most likely changed, mark it as such so // that we can tell clients when they come in. effect->GetSector( )->bLightChange = true; // [BC] If we're the server, tell clients to stop this light effect. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) { SERVERCOMMANDS_StopSectorLightEffect( ULONG( effect->GetSector( ) - sectors )); SERVERCOMMANDS_SetSectorLightLevel( ULONG( effect->GetSector( ) - sectors )); } } } }
void EV_StartLightFading (int tag, int value, int tics) { int secnum; secnum = -1; while ((secnum = P_FindSectorFromTag (tag,secnum)) >= 0) { sector_t *sec = §ors[secnum]; if (sec->lightingdata) continue; if (tics <= 0) { // [CK] Only update if the values are not the same, since this is // an instant function with zero tics. if ( sec->GetLightLevel() != value ) { sec->SetLightLevel(value); sec->bLightChange = true; // [CK] Since we know it's instant, this is a simple light level // change and not a fade. if ( NETWORK_GetState( ) == NETSTATE_SERVER ) SERVERCOMMANDS_SetSectorLightLevel( secnum ); } } else { // No need to fade if lightlevel is already at desired value. if (sec->lightlevel == value) continue; new DGlow2 (sec, sec->lightlevel, value, tics, true); } } }