03 Events

This example shows you how to use events on signals.

These files can be found in the /Examples/[example] and /Blackboards/Examples folders.

EventsBlackboard.cs

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;
    }
}

EventsHealthBehaviour.cs

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}");
        }
    }
}

Last updated