//----------------------------------------------------------------------------------------------- public override void Run() { OperatorParam influenceMapParamName = FindParamWithName("Influence"); // Can't exactly move if we don't have a goal if (influenceMapParamName == null) { return; } string[] mapIdentifiers = influenceMapParamName.Value.Split('_'); // Determine map type InfluenceSystem influenceSys = InfluenceSystem.GetInstance(); InfluenceMapPoint mapPoint; if (mapIdentifiers[0].Equals("Base", StringComparison.CurrentCultureIgnoreCase)) { WorkingMap queryMap = new WorkingMap(); queryMap.AddMap(influenceSys.GetInfluenceMapByIDWithTag(mapIdentifiers[1], mapIdentifiers[2])); queryMap.Normalize(); mapPoint = queryMap.GetPointOfHighestInfluence(); } else if (mapIdentifiers[0].Equals("Formula", StringComparison.CurrentCultureIgnoreCase)) { MapFormula formulaToUse = influenceSys.GetMapFormulaByID(mapIdentifiers[1]); WorkingMap queryMap = formulaToUse.ConstructMapFromFormula(); mapPoint = queryMap.GetPointOfHighestInfluence(); } else { throw new ArgumentException("Invalid name for influence map in move to operator!"); } InfluenceObjectWorldPoint worldPoint = influenceSys.ConvertMapPosToWorldPos(mapPoint); Vector2 newLocation = new Vector2(worldPoint.x, worldPoint.y); AgentToOperateOn.transform.position = newLocation; InfluenceGameManager influenceManager = GameObject.FindObjectOfType <InfluenceGameManager>(); influenceManager.UpdateInfluenceSystem(); }
//----------------------------------------------------------------------------------------------- private static void ParseOperatorForPrimitiveTask(XmlNode operatorNode, PrimitiveTask task, Domain domain) { if (task.Op != null) { throw new ArgumentException("Task " + task.Name + " already has an operator!"); } string operatorName = ""; if (!TryLoadRequiredAttributeFromXmlNode(operatorNode, "name", ref operatorName)) { throw new ArgumentNullException("Operator missing name!"); } Operator op = domain.GetOperatorByName(operatorName).Clone(); XmlNodeList paramNodes = operatorNode.ChildNodes; foreach (XmlNode paramNode in paramNodes) { string paramName = ""; if (!TryLoadRequiredAttributeFromXmlNode(paramNode, "name", ref paramName)) { throw new ArgumentNullException("OperatorParam missing name!"); } string paramValue = ""; if (!TryLoadRequiredAttributeFromXmlNode(paramNode, "value", ref paramValue)) { throw new ArgumentNullException("OperatorParam " + paramName + " missing value!"); } OperatorParam param = new OperatorParam(paramName, paramValue); op.AddParam(param); } task.Op = op; }