Timer myTimer;
void StartTimer()
{
myTimer = timer.Every(0.1f, () =>
{
//code here
});
}
void StopTimer()
{
myTimer.Destroy();
//or
timer.Destroy(ref myTimer);
}
Merged postActually, I think it's better to use custom component instead of timer or any other method. This is kinda rough, but will work.
void Loaded() { foreach(var player in BasePlayer.activePlayerList) AttachComponent(player); }
void OnPlayerInit(BasePlayer player) => AttachComponent(player);
void AttachComponent(BasePlayer player) => player.gameObject.AddComponent<MetabolismChanger>();
void Unload() { foreach(var player in BasePlayer.activePlayerList) player.GetComponent<MetabolismChanger>().DetachComponent(); }
class MetabolismChanger : MonoBehaviour
{
public BasePlayer player;
public bool isNearFireplace;
void Awake()
{
player = GetComponent<BasePlayer>();
isNearFireplace = false;
}
void Update() { if(isNearFireplace) player.metabolism.comfort.value = player.metabolism.comfort.max; }
public void DetachComponent() => Destroy(this);
}
void OnEntityEnter(TriggerBase trigger, BaseEntity entity)
{
if(trigger.name.Contains("heatSource"))
{
BasePlayer player = entity.ToPlayer();
if(player != null)
player.GetComponent<MetabolismChanger>().isNearFireplace = true;
}
}
void OnEntityLeave(TriggerBase trigger, BaseEntity entity)
{
if(trigger.name.Contains("heatSource"))
{
BasePlayer player = entity.ToPlayer();
if(player != null)
player.GetComponent<MetabolismChanger>().isNearFireplace = false;
}
}