// Simple 3-state state machine to track what the laser is doing // private void Update() { if (!m_bBehaviourCanUpdate) { return; } if (TimerManager.fGameTime < m_fNextEventTime) { return; } switch (m_iState) { case ELaserState._IDLE_OFF: m_gcAudioManager.PlayAudioAtLocation(transform.position, EGameSFX._SFX_FLOATING_LASER_WARMUP); m_fNextEventTime = TimerManager.fGameTime + 0.75f; m_gcRenderer.material = m_WarmUpMat; m_iState = ELaserState._WARM_UP; break; case ELaserState._WARM_UP: LaserOn(); m_fNextEventTime = TimerManager.fGameTime + m_fLaserActiveTime; m_iState = ELaserState._IDLE_ON; break; case ELaserState._IDLE_ON: LaserOff(); m_fNextEventTime = TimerManager.fGameTime + (m_fLaserInactiveTime - Types.s_fDUR_FloatingLaserWarmUp); m_iState = ELaserState._IDLE_OFF; break; } }
public override void OnRoomEnter() { base.OnRoomEnter(); // Verify... { m_gcAudioManager = GameInstance.Object.GetAudioManager(); GAssert.Assert(null != m_gcAudioManager, "Unable to get audio manager"); m_gcRenderer = GetComponent <SpriteRenderer>(); GAssert.Assert(null != m_gcRenderer, "Unable to get sprite renderer!"); GAssert.Assert(null != m_goLaser, "Floating Laser properties not setup in editor!"); GAssert.Assert(null != m_WarmUpMat, "Floating Laser properties not setup in editor!"); GAssert.Assert(null != m_InactiveMat, "Floating Laser properties not setup in editor!"); GAssert.Assert(null != m_ActiveMat, "Floating Laser properties not setup in editor!"); } // Init LaserOff(false); m_bBehaviourCanUpdate = true; m_iState = ELaserState._IDLE_OFF; m_gcRenderer.material = m_InactiveMat; m_fNextEventTime = TimerManager.fGameTime + (m_fLaserInactiveTime - Types.s_fDUR_FloatingLaserWarmUp); // Warn Players that this level contains lasers... m_gcAudioManager.PlayAudio(EGameSFX._SFX_FLOATING_LASER_LEVEL_WARNING); }
// Go back to default init state, with a fresh timer // public override void OnPlayerRespawn() { base.OnPlayerRespawn(); LaserOff(); m_bBehaviourCanUpdate = true; m_fNextEventTime = TimerManager.fGameTime + (m_fLaserInactiveTime - Types.s_fDUR_FloatingLaserWarmUp); m_gcRenderer.material = m_InactiveMat; m_iState = ELaserState._IDLE_OFF; }