//		public int                       serialId = -1;

        public AIScenarioCondition Clone()
        {
            var clone = new AIScenarioCondition();

            clone.list = new AIScenarioConditionItem[list.Length];
//			clone.serialId = serialId;
            for (int i = 0, n = list.Length; i < n; i++)
            {
                clone.list[i] = list[i];
            }

            return(clone);
        }
Example #2
0
        public void Setup(AIScenario scenario, GameObject target)
        {
//			foreach ( var condition in conditions ) {
//				if ( condition.Value != null ) {
//					if ( condition.Value is MonoBehaviour ) {
//						Object.DestroyImmediate ( condition.Value as MonoBehaviour );
//					}
//				}
//			}

            resetPlanner();
            conditions.Clear();

            foreach (var condition in scenario.conditions.list)
            {
                if (condition.type != null)
                {
                    conditions.Add(condition.name, (AICondition)condition.Load());
                    AICondition cond = conditions[condition.name];
                    if (cond == null)
                    {
                        Debug.LogError($"AIScenarioAgent::Setup AICondition:{condition.name} == null");
                        continue;
                    }
                    cond.agent      = this;
                    cond.gameObject = target;
                    cond.transform  = target.transform;
                    cond.Awake();
                }
            }

            goals = scenario.goals;
            cond  = scenario.conditions;

            foreach (var action in scenario.actions)
            {
                if (!action.isActived)
                {
                    continue;
                }

                var actionIns = new Action(action.name, action.cost);

                foreach (var pre in action.pre)
                {
                    actionIns.setPrecondition(cond.GetName(pre.id), pre.value);
//					Debug.Log ( $"setPrecondition: {cond.GetName ( pre.id )} {pre.value}" );
                }
                foreach (var post in action.post)
                {
                    actionIns.setPostcondition(cond.GetName(post.id), post.value);
//					Debug.Log ( $"setPostcondition: {cond.GetName ( post.id )} {post.value}" );
                }

                _planner.addAction(actionIns);
            }

            if (goals != null && goals.Length != 0)
            {
                SetupGoal(goals[0]);
            }
        }