Esempio n. 1
0
        private void NewObject(SimulationEvent e)
        {
            string objectType = ((StringValue)e["ObjectType"]).value;

            Console.WriteLine(String.Format("Blackboard gets new object; ID: {0}; Type: {1}", ((StringValue)e["ID"]).value, objectType));
            SimulationObject ob = SimulationObjectFactory.BuildObject(ref simModel, objectType);

            ob.attributes["ID"] = e["ID"];



            // REFACTOR: I shouldn't actually do this.  I should only initialize the values that I own.
            //AD: I'm populating the values passed in the NewObject event into the SimulationObject
            foreach (string attname in ((AttributeCollectionValue)e["Attributes"]).attributes.Keys)
            {
                ob.attributes[attname] = ((AttributeCollectionValue)e["Attributes"])[attname];
            }
            blackboard.AddObject(ob);

            // Initialize StateDB objects

            if (((StringValue)e["ObjectType"]).value == "Team")
            {
                StateDB.Team t = new StateDB.Team(((StringValue)e["ID"]).value,
                                                  ((StringListValue)((AttributeCollectionValue)e["Attributes"]).attributes["TeamHostility"]).strings);

                StateDB.teams[t.id] = t;
            }
            else if (((StringValue)e["ObjectType"]).value == "DecisionMaker")
            {
                string teamID           = ((StringValue)((AttributeCollectionValue)e["Attributes"]).attributes["TeamMember"]).value;
                StateDB.DecisionMaker d = new StateDB.DecisionMaker(((StringValue)e["ID"]).value,
                                                                    StateDB.teams.ContainsKey(teamID) ? StateDB.teams[teamID] : null);

                StateDB.decisionMakers[d.id] = d;
            }
            else if (SimUtility.isPhysicalObject(objectType))
            {
                String linkedRegion = "";
                if (e.parameters.ContainsKey("LinkedRegion"))
                {
                    linkedRegion = ((StringValue)e["LinkedRegion"]).value;
                }

                StateDB.AddPhysicalObject(((StringValue)e["ID"]).value, objectType, linkedRegion);
            }
        }