//public BehaviorExecution behaviorExecution; public CallProcedureBehaviorExecution(CallProcedureAction paction, InstanceSpecification host, Dictionary<string, ValueSpecification> p) : base(paction, host, p, false) { this.action = paction; System.Console.WriteLine("CallProcedureAction : " + action.Procedure); //behaviorExecution=action.Operation.Method.createBehaviorExecution(this.Host, p,false); }
public static CallProcedureBehaviorExecution startProcedureSwitchAgent(string procedure, Agent agentToSwitch, Agent newAgent) { string orgEntity = null; List <OrganisationalStructure> structs = VRApplication.Instance.AgentPlateform.Structures; foreach (OrganisationalStructure s in structs) { List <Procedure> procs = s.Procedures; foreach (Procedure p in procs) { if (p.name == procedure) { orgEntity = s.Entities[0].name; } } } PrintSingleton.Instance.log("RUNNING : " + procedure + " / " + orgEntity); List <Entity> entities = MascaretApplication.Instance.getEnvironment().getEntities(); Entity entity = entities[0]; Mascaret.Action action2 = null; action2 = new CallProcedureAction(); ((CallProcedureAction)(action2)).Procedure = procedure; ((CallProcedureAction)(action2)).OrganisationalEntity = orgEntity; #region switching agent if (agentToSwitch != null && newAgent != null) { List <OrganisationalEntity> orgs = MascaretApplication.Instance.AgentPlateform.Organisations; for (int iOrg = 0; iOrg < orgs.Count; iOrg++) { if (orgs[iOrg].name == ((CallProcedureAction)(action2)).OrganisationalEntity) { orgs[iOrg].changeRoleAssignement(agentToSwitch.name, newAgent); } } } #endregion PrintSingleton.Instance.log("-- -- -- -- -- -- SWITCH -- -- -- -- -- -- SWITCH -- -- -- -- -- --"); PrintSingleton.Instance.log("NEW PROCEDURE : " + procedure); PrintSingleton.Instance.log("AGENT SWITCH : " + agentToSwitch.name + " -->" + newAgent.name); PrintSingleton.Instance.log("-- -- -- -- -- -- ƧMIꓕCH -- -- -- -- -- -- ƧMIꓕCH -- -- -- -- -- --"); return((CallProcedureBehaviorExecution)BehaviorScheduler.Instance.executeBehavior(action2, entity, new Dictionary <string, ValueSpecification>(), false)); }
public static CallProcedureBehaviorExecution startProcedure(string procedure) { string orgEntity = null; List <OrganisationalStructure> structs = VRApplication.Instance.AgentPlateform.Structures; foreach (OrganisationalStructure s in structs) { List <Procedure> procs = s.Procedures; foreach (Procedure p in procs) { if (p.name == procedure) { orgEntity = s.Entities[0].name; } } } if (orgEntity == null) { PrintSingleton.Instance.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); PrintSingleton.Instance.log("PROCEDURE NOT FOUND : " + procedure); PrintSingleton.Instance.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return(null); } PrintSingleton.Instance.log("RUNNING : " + procedure + " / " + orgEntity); List <Entity> entities = MascaretApplication.Instance.getEnvironment().getEntities(); Entity entity = entities[0]; Mascaret.Action action2 = null; action2 = new CallProcedureAction(); ((CallProcedureAction)(action2)).Procedure = procedure; ((CallProcedureAction)(action2)).OrganisationalEntity = orgEntity; PrintSingleton.Instance.log("-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --"); PrintSingleton.Instance.log("NEW PROCEDURE STARTED : " + procedure); PrintSingleton.Instance.log("-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --"); CallProcedureBehaviorExecution cpbe = (CallProcedureBehaviorExecution)BehaviorScheduler.Instance.executeBehavior(action2, entity, new Dictionary <string, ValueSpecification>(), false); return(cpbe); }
protected void parseInteractions(XElement interactionNode) { Interaction interaction = new Interaction(); foreach (XElement action in interactionNode.Elements()) { if (action.Name.LocalName == "SendSignal") { string signal = action.Attribute("name").Value; string target = ""; if (action.Attribute("target") != null) target = action.Attribute("target").Value; if (target == "") target = "designated"; string periphName = action.Attribute("peripheric").Value; string buttonName = action.Attribute("button").Value; bool pressed = (bool)action.Attribute("pressed"); SendSignalAction sendSignal = new SendSignalAction(); sendSignal.SignalClass = new Signal(signal); Peripheric periph = this.window.getPeripheric(periphName); Button button = periph.getButton(buttonName); if (button != null) { interaction.addButtonAction(button, sendSignal, target, pressed); } } else if(action.Name.LocalName == "CallOperation") { string classifier=action.Attribute("classifier").Value; Class targetClass=MascaretApplication.Instance.Model.AllClasses[classifier][0]; string operation=action.Attribute("name").Value; string target=action.Attribute("target").Value; string periphName=action.Attribute("peripheric").Value; string buttonName=action.Attribute("button").Value; bool pressed = (bool)action.Attribute("pressed"); CallOperationAction callOp = new CallOperationAction(); callOp.Operation = targetClass.Operations[operation]; Peripheric periph = this.window.getPeripheric(periphName); Button button = periph.getButton(buttonName); if (button != null) { interaction.addButtonAction(button, callOp, target, pressed); } } else if (action.Name.LocalName == "CallProcedure") { string procedure = action.Attribute("name").Value; string organisation = action.Attribute("organisation").Value; string target = ""; if (action.Attribute("target") != null) target = action.Attribute("target").Value; if (target == "") target = "designated"; string periphName = action.Attribute("peripheric").Value; string buttonName = action.Attribute("button").Value; bool pressed = (bool)action.Attribute("pressed"); CallProcedureAction callProc = new CallProcedureAction(); callProc.Procedure = procedure; callProc.OrganisationalEntity = organisation; Peripheric periph = this.window.getPeripheric(periphName); Button button = periph.getButton(buttonName); if (button != null) { interaction.addButtonAction(button, callProc, target, pressed); } } } }
void OnButtonPressed(Button button, bool pressed) { foreach (ButtonActionInfo interaction in interactions) { if (interaction.pressed == pressed && interaction.button.name == button.name) { Action action = interaction.action; string target = interaction.target; if (target == "broadcast") { //no target = broadcast. Just choose an arbitrary entity to execute List<Entity> entities = MascaretApplication.Instance.getEnvironment().getEntities(); foreach (Entity entity in entities) { Action action2 = null; if (action.GetType().ToString() == "Mascaret.SendSignalAction") { Signal signalC = ((SendSignalAction)(action)).SignalClass; InstanceSpecification signal = new InstanceSpecification(signalC.name, signalC); action2 = new SendSignalAction(); ((SendSignalAction)(action2)).SignalClass = ((SendSignalAction)(action)).SignalClass; ((SendSignalAction)(action2)).Target = new SendSignalTarget(); ((SendSignalAction)(action2)).Target.target = entity; ((SendSignalAction)(action2)).Signal = signal; } else if (action.GetType().ToString() == "Mascaret.CallOperationAction") { action2 = new CallOperationAction(); ((CallOperationAction)(action2)).Operation = ((CallOperationAction)(action)).Operation; ((CallOperationAction)(action2)).Target = entity; } //if (agt) // BehaviorScheduler::getInstance()->executeBehavior(action2,agt,Parameters()); //else BehaviorScheduler.Instance.executeBehavior(action2, entity, new Dictionary<string, ValueSpecification>(), false); //_cbActionDone(action2); } } else if (target == "designated") { InstanceSpecification entity = VRApplication.Instance.window.getSelectedEntity(); if (entity != null) { if (action.GetType().ToString() == "Mascaret.SendSignalAction") { Signal signalC = ((SendSignalAction)(action)).SignalClass; InstanceSpecification signal = new InstanceSpecification(signalC.name, signalC); ((SendSignalAction)(action)).Target = new SendSignalTarget(); ((SendSignalAction)(action)).Signal = signal; ((SendSignalAction)(action)).Target.target = entity; } else if (action.GetType().ToString() == "Mascaret.CallOperationAction") { //cerr << "CALL OPERATION ..." << endl; if (entity.Classifier.isA(((CallOperationAction)(action)).Operation.Classifier) == false) { continue; } ((CallOperationAction)(action)).Target = entity; } //if (agt) // BehaviorScheduler::getInstance()->executeBehavior(action,agt,Parameters()); //else BehaviorScheduler.Instance.executeBehavior(action, entity, new Dictionary<string, ValueSpecification>(), false); //_cbActionDone(action); } } else { if (action.GetType().ToString() == "Mascaret.CallProcedureAction") { List<Entity> entities = MascaretApplication.Instance.getEnvironment().getEntities(); Entity entity = entities[0]; Action action2 = null; action2 = new CallProcedureAction(); ((CallProcedureAction)(action2)).Procedure = ((CallProcedureAction)(action)).Procedure; ((CallProcedureAction)(action2)).OrganisationalEntity = ((CallProcedureAction)(action)).OrganisationalEntity; BehaviorScheduler.Instance.executeBehavior(action2, entity, new Dictionary<string, ValueSpecification>(), false); } } } } }