// Staff protected void think() { // Debug.Log("Brain think " + pattern); List <GameObject> targets = unit.visibleUnits; Action action; ActionContext cnxt = new ActionContext() { caster = gameObject, memory = memory }; for (int i = 0; i < aiArray.Length; i++) { AINode ai_node = aiArray[i]; if (ai_node.probability == 100 || Random.value * 100 <= ai_node.probability) { action = ai_node.action(cnxt); action.init(gameObject); GameObject character = ai_node.character != null?getTarget(ai_node.character, gameObject, ai_node.target != null?null : action, targets) : (canDo(gameObject, action) ? gameObject : null); // Debug.Log("-- " + character); if (character != null) { GameObject target = ai_node.target != null?getTarget(ai_node.target, gameObject, action, targets) : character; if (target != null && performAction(action, target)) { if (ai_node.extra != null) { cnxt.target = target; cnxt.character = character; ai_node.extra(cnxt); } return; } } } } action = new Stay(); action.init(gameObject); performAction(action); }