コード例 #1
0
 //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);
 }
コード例 #2
0
    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));
    }
コード例 #3
0
    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);
    }
コード例 #4
0
ファイル: VRApplication.cs プロジェクト: mbbarange/Mascaret
        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);
                    }
                }
            }
        }
コード例 #5
0
ファイル: Interaction.cs プロジェクト: mbbarange/Mascaret
        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);
                        }
                    }
                }
            }
        }