02 Computed
Last updated
Last updated
This example shows you how to create computed signals.
These files can be found in the /Examples/[example] and /Blackboards/Examples folders.
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;
}
}
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;
}
}
}