02 Computed

This example shows you how to create computed signals.

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

ComputedBlackboard.cs

using CrashKonijn.Blackboard.Contracts;

namespace CrashKonijn.Blackboard.Blackboards.Examples
{
    public partial class ComputedBlackboard : BlackboardBehaviour
    {
        private int health = 100;
        private int lowHealth = 40;
        
        // Computed signals automatically update when their dependencies change
        private static bool _isAlive(Signals.Health health) => health.Value > 0;
        
        // Computed signals can depend on multiple signals
        private static bool _isLowHealth(Signals.Health health, Signals.LowHealth lowHealth) => health.Value <= lowHealth.Value;
    }
}

ComputedHealthBehaviour.cs

using CrashKonijn.Blackboard.Blackboards.Examples;
using CrashKonijn.Blackboard.Contracts;
using UnityEngine;

namespace CrashKonijn.BlackboardPro.Examples._02_computed
{
    [RequireComponent(typeof(ComputedBlackboard))]
    public class ComputedHealthBehaviour : 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 ComputedBlackboard blackboard;
        public ComputedBlackboard Blackboard
        {
            get
            {
                if (this.blackboard == null)
                {
                    this.blackboard = this.GetComponent<ComputedBlackboard>();
                }

                return this.blackboard;
            }
        }

        public void DoDamage()
        {
            this.Blackboard.Health -= 10;
        }
        
        public void Heal()
        {
            this.Blackboard.Health += 10;
        }
    }
}

Last updated