#11 Robot! Escape! - Timer, LevelController

w298·2022년 11월 7일
0

DEVLOG - Robot! Escape!

목록 보기
11/21

EnemyAI 를 구현하면서 지속적으로 증가하거나 감소하는 Level 들 (seekLevel, detectLevel 등) 이 있는데,
이들을 효과적으로 관리할 수 있는 class 가 있으면 좋을 것 같아 만들어 보았다.

그리고 만드는 김에 Timer class 도 구현해 LevelController 에 사용하였다.

[System.Serializable]
public class LevelController
{
    public float defaultLevel;
    public float currentLevel;

    public Timer incTimer;
    public Timer decTimer;

    public LevelController(float defaultLevel, float incInterval, float decInterval)
    {
        this.defaultLevel = defaultLevel;

        incTimer = new Timer(incInterval, () => { if (currentLevel < 100) currentLevel++; });
        decTimer = new Timer(decInterval, () => { if (currentLevel > 0) currentLevel--; });

        currentLevel = this.defaultLevel;
    }

    public void Update()
    {
        incTimer.Update();
        decTimer.Update();
    }
}
[System.Serializable]
public class Timer
{
    public delegate void ExecuteFunction();
    public ExecuteFunction exeFunc;

    public bool active = true;

    private float interval;
    private float timer;

    public Timer(float interval, ExecuteFunction exeFunc)
    {
        this.interval = interval;
        this.exeFunc = exeFunc;

        Reset();
    }

    public Timer(int frequency, ExecuteFunction exeFunc)
    {
        interval = 1f / frequency;
        timer = interval;
        this.exeFunc = exeFunc;
    }

    public void Reset()
    {
        timer = interval;
    }

    public void Update()
    {
        if (!active) return;
        timer -= Time.deltaTime;
        if (timer < 0)
        {
            timer += interval;
            exeFunc();
        }
    }
}
profile
Game Developer & Web Developer

0개의 댓글