// GDnD wiki example // Demonstrates: a GOAP action = name + cost + preconditions + effects (+ where and how long, for execution) // Related pages: [[goal-oriented-action-planning]] using System.Collections.Generic; using UnityEngine; // The planner only reads Cost, Preconditions and Effects. Target and Duration are // for the agent that carries the action out: walk to Target, work for Duration seconds. public class GoapAction { public string Name; public float Cost; public Transform Target; public float Duration; public Dictionary Preconditions = new(); public Dictionary Effects = new(); public GoapAction(string name, float cost, Transform target, float duration) { Name = name; Cost = cost; Target = target; Duration = duration; } // Fluent helpers so actions read like a rule: Needs("HasAxe", true).Gives("HasWood", true) public GoapAction Needs(string fact, bool value) { Preconditions[fact] = value; return this; } public GoapAction Gives(string fact, bool value) { Effects[fact] = value; return this; } public WorldState ApplyTo(WorldState state) { var next = new WorldState(state); foreach (var effect in Effects) next.Set(effect.Key, effect.Value); return next; } public override string ToString() => Name; }