03 Events
Last updated
Last updated
This example shows you how to use events on signals.
These files can be found in the /Examples/[example] and /Blackboards/Examples folders.
using System.Collections;
using System.Collections.Generic;
using CrashKonijn.Blackboard.Contracts;
using UnityEngine;
namespace BlackboardsLite
{
public partial class EventsBlackboard : BlackboardBehaviour
{
private int health = 100;
private static bool _isAlive(Signals.Health health) => health.Value > 0;
}
}
using BlackboardsLite;
using CrashKonijn.Blackboard.Contracts;
using UnityEngine;
namespace CrashKonijn.BlackboardPro.Examples._03_events
{
[RequireComponent(typeof(EventsBlackboard))]
public class EventsHealthBehaviour : MonoBehaviour
{
/* Simple hack to show a button in the editor */
[Header("Removes 10 health.")]
[Button(nameof(DoDamage))]
public string doDamageButton;
/* Simple hack to show a button in the editor */
[Header("Adds 10 health")]
[Button(nameof(Heal))]
public string healButton;
private EventsBlackboard blackboard;
public EventsBlackboard Blackboard
{
get
{
if (this.blackboard == null)
{
this.blackboard = this.GetComponent<EventsBlackboard>();
}
return this.blackboard;
}
}
public void OnEnable()
{
this.Blackboard.IsAliveSignal.OnValueChanged.AddListener(this.OnIsAliveChanged);
}
public void OnDisable()
{
this.Blackboard.IsAliveSignal.OnValueChanged.RemoveListener(this.OnIsAliveChanged);
}
public void DoDamage()
{
this.Blackboard.Health -= 10;
}
public void Heal()
{
this.Blackboard.Health += 10;
}
// This is set through the editor. Click on the 'Events' button in the blackboard editor to view it.
public void OnHealthChanged(int health)
{
Debug.Log($"Health changed: {health}");
}
// This event is set through code. It is only bound to the blackboard during awake, so please enter play mode to see it in action.
// Even though the IsAlive signal is re-calculated any time the Health signal changes, it's change event is only triggered when the value actually changes.
public void OnIsAliveChanged(bool isAlive)
{
Debug.Log($"IsAlive changed: {isAlive}");
}
}
}