public void AddBehaviourPrecondition(Tag tag, Func <object, bool> precondition, object arg)
 {
     DebugUtil.Assert(!behaviourPreconditions.ContainsKey(tag));
     behaviourPreconditions[tag] = new BehaviourPrecondition
     {
         cb  = precondition,
         arg = arg
     };
 }
    public bool RunBehaviourPrecondition(Tag tag)
    {
        BehaviourPrecondition value = default(BehaviourPrecondition);

        if (!behaviourPreconditions.TryGetValue(tag, out value))
        {
            return(false);
        }
        return(value.cb(value.arg));
    }