예제 #1
0
    // 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;
        }
    }
예제 #2
0
    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);
    }
예제 #3
0
    // 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;
    }