コード例 #1
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void RevealObject(SimulationEvent e)
        {
            String objectID             = ((StringValue)e["ObjectID"]).value;
            SimulationObjectProxy proxy = objectProxies[objectID];

            //initialize values for times to -1
            proxy["DetectTime"].SetDataValue(DataValueFactory.BuildInteger(-1));
            proxy["IdentifyTime"].SetDataValue(DataValueFactory.BuildInteger(-1));
            proxy["TrackingTime"].SetDataValue(DataValueFactory.BuildInteger(-1));
            proxy["DestroyedTime"].SetDataValue(DataValueFactory.BuildInteger(-1));
            proxy["HostileActionTime"].SetDataValue(DataValueFactory.BuildInteger(-1));
            proxy["GroundTruthIFF"].SetDataValue(DataValueFactory.BuildString("Unknown"));
            proxy["UserClassifiedIFF"].SetDataValue(DataValueFactory.BuildString("Unknown"));
            proxy["RevealTime"].SetDataValue(DataValueFactory.BuildInteger(time));
            proxy["TrackedBy"].SetDataValue(DataValueFactory.BuildString(""));

            if (((AttributeCollectionValue)e["Attributes"]).attributes.ContainsKey("DefaultClassification"))
            {
                //has IFF on
                String iff = ((StringValue)((AttributeCollectionValue)e["Attributes"]).attributes["DefaultClassification"]).value;
                proxy["GroundTruthIFF"].SetDataValue(DataValueFactory.BuildString(iff));
                proxy["UserClassifiedIFF"].SetDataValue(DataValueFactory.BuildString(iff));
            }
            else
            {
                String owner = ((StringValue)proxy["OwnerID"].GetDataValue()).value;
                if (owner.ToLower().Contains("pirate"))
                {
                    proxy["GroundTruthIFF"].SetDataValue(DataValueFactory.BuildString("Suspect"));
                }
            }
            proxy["IsInSeaLane"].SetDataValue(DataValueFactory.BuildBoolean(false));
            proxy["IsGoingTowardsPort"].SetDataValue(DataValueFactory.BuildBoolean(false));
        }
コード例 #2
0
        /// <summary>
        /// This method will send out a ViewProInitializeObject event to a specific client.
        /// This event will have that player add this object to their playfield.  Once the
        /// object is in the playfield, it is able to be interacted with.
        /// </summary>
        /// <param name="targetPlayerID">Unique ID of the player recieving this event.</param>
        /// <param name="objectID">Unique ID of the object being revealed.</param>
        /// <param name="location">Location at which to display this object.</param>
        /// <param name="iconName">Icon file name used to display to user.</param>
        /// <param name="ownerID">Unique ID of the owner of the object.</param>
        private void SendViewProInitializeObject(string targetPlayerID, string objectID, LocationValue location, string iconName, string ownerID, bool isWeapon)
        {
            if (!activeDMs.Contains(targetPlayerID))
            {
                return;
            }
            if (!location.exists)
            {
                return;
            }

            SimulationEvent initEvent = SimulationEventFactory.BuildEvent(ref simModel, "ViewProInitializeObject");

            initEvent["Time"]         = DataValueFactory.BuildInteger(currentTick);
            initEvent["TargetPlayer"] = DataValueFactory.BuildString(targetPlayerID);
            initEvent["ObjectID"]     = DataValueFactory.BuildString(objectID);
            initEvent["Location"]     = location;
            initEvent["OwnerID"]      = DataValueFactory.BuildString(ownerID);
            initEvent["IsWeapon"]     = DataValueFactory.BuildBoolean(isWeapon);
            initEvent["LabelColor"]   = DataValueFactory.BuildInteger(dmColorMapping[ownerID]);

            String classification = GetClassificationForDM(objectID, targetPlayerID);
            String overrideIcon   = GetClassificationBasedIcon(objectID, classification);

            initEvent["CurrentClassification"] = DataValueFactory.BuildString(classification);
            if (overrideIcon != String.Empty)
            {
                initEvent["IconName"] = DataValueFactory.BuildString(overrideIcon);
            }
            else
            {
                initEvent["IconName"] = DataValueFactory.BuildString(iconName);
            }
            distClient.PutEvent(initEvent);
        }
コード例 #3
0
ファイル: HandshakeManager.cs プロジェクト: xiangnanyue/DDD
        private void SendOutScenarioInfo(string playerID, string terminalID)
        {
            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModelInfo, "HandshakeInitializeGUI");

            e["PlayerID"] = DataValueFactory.BuildString(playerID);
            //e["TerminalID"] = DataValueFactory.BuildString(dmToTerminalMap[playerID]);
            e["TerminalID"]               = DataValueFactory.BuildString(terminalID);
            e["ScenarioInfo"]             = DataValueFactory.BuildString("BASIC SCENARIO INFO **PLACEHOLDER**");
            e["ScenarioName"]             = DataValueFactory.BuildString(scenarioName);
            e["ScenarioDescription"]      = DataValueFactory.BuildString(scenarioDescription);
            e["MapName"]                  = DataValueFactory.BuildString(mapName);
            e["UTMNorthing"]              = DataValueFactory.BuildDouble(northing);
            e["UTMEasting"]               = DataValueFactory.BuildDouble(easting);
            e["HorizontalPixelsPerMeter"] = DataValueFactory.BuildDouble(horizMetersPerPixel);
            e["VerticalPixelsPerMeter"]   = DataValueFactory.BuildDouble(vertMetersPerPixel);
            e["PlayerBrief"]              = DataValueFactory.BuildString(allDMs[playerID].briefing);
            e["IconLibrary"]              = DataValueFactory.BuildString(iconLibrary);
            e["VoiceChatEnabled"]         = DataValueFactory.BuildBoolean(voiceChatEnabled);
            e["VoiceChatServerName"]      = DataValueFactory.BuildString(voiceChatServerName);
            e["VoiceChatServerPort"]      = DataValueFactory.BuildInteger(voiceChatServerPort);
            e["VoiceChatUserPassword"]    = DataValueFactory.BuildString(voiceChatPassword);
            e["IsObserver"]               = DataValueFactory.BuildBoolean(allDMs[playerID].isObserver);
            e["IsForkReplay"]             = DataValueFactory.BuildBoolean(isForkReplay);
            e["DefaultDisplayLabels"]     = DataValueFactory.BuildString(displayLabels);
            e["DefaultDisplayTags"]       = DataValueFactory.BuildString(displayTags);

            server.PutEvent(e);
        }
コード例 #4
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void ClickHandler(SimulationEvent e)
        {
            String objectID = ((StringValue)e["ObjectID"]).value;
            String dmID     = ((StringValue)e["UserID"]).value;

            if (objectID == string.Empty)
            {
                return;//weird edge case
            }
            if (objectProxies.Count == 0)
            {
                return; //another weird edge case
            }
            SimulationObjectProxy proxy = objectProxies[objectID];

            //AD: TODO Need to only set this if the target object's Item belongs to the clicking DM
            //TODO": add attributes for onCourse, onLocation, booleans for if the objects are in the correct regions and moving towards the correct regions

            if (DMAssignedAsset(dmID, objectID) || IndividualDMIsLoggedIn)
            {
                if (((IntegerValue)proxy["DetectTime"].GetDataValue()).value != -1)
                {
                    return;
                }
                else
                {
                    proxy["DetectTime"].SetDataValue(DataValueFactory.BuildInteger(time));
                    proxy["DetectedBy"].SetDataValue(DataValueFactory.BuildString(((StringValue)e["UserID"]).value));
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// This event is broadcast out to each client.  That client will attempt to put the object in motion, but will only
        /// succeed if the object already exists in its playfield.
        /// </summary>
        /// <param name="objectID"></param>
        /// <param name="ownerID"></param>
        /// <param name="location"></param>
        /// <param name="desLocation"></param>
        /// <param name="maxSpeed"></param>
        /// <param name="throttle"></param>
        /// <param name="time"></param>
        /// <param name="iconName"></param>
        /// <param name="isWeapon"></param>
        private void SendViewProMotionUpdate(string objectID, string ownerID, LocationValue location, LocationValue desLocation, double maxSpeed, double throttle, string iconName, bool isWeapon, double activeRegionSpeedMultiplier)
        {
            SimulationEvent vpmu = null;

            vpmu = SimulationEventFactory.BuildEvent(ref simModel, "ViewProMotionUpdate");

            vpmu["ObjectID"]            = DataValueFactory.BuildString(objectID);
            vpmu["OwnerID"]             = DataValueFactory.BuildString(ownerID);
            vpmu["Location"]            = location;
            vpmu["DestinationLocation"] = desLocation;
            //if (objectID == "Fighter01_Troop_2")
            //{
            //    Console.Out.Write(String.Format("\n{0} is moving at {1}*{2}\n", objectID, maxSpeed, activeRegionSpeedMultiplier));
            //}
            vpmu["MaximumSpeed"] = DataValueFactory.BuildDouble(maxSpeed * activeRegionSpeedMultiplier);
            vpmu["Throttle"]     = DataValueFactory.BuildDouble(throttle);
            vpmu["Time"]         = DataValueFactory.BuildInteger(currentTick);
            vpmu["IconName"]     = DataValueFactory.BuildString(iconName);
            //add label color to the mix
            vpmu["LabelColor"] = DataValueFactory.BuildInteger(dmColorMapping[ownerID]);
            vpmu["IsWeapon"]   = DataValueFactory.BuildBoolean(isWeapon);
            distClient.PutEvent(vpmu);
            if (!movingObjects.Contains(objectID) &&
                !DataValueFactory.CompareDataValues(location, desLocation))
            {
                movingObjects.Add(objectID);
            }
        }
コード例 #6
0
ファイル: ScudLauncher.cs プロジェクト: vishalbelsare/DDD
        public static void Tick(int tick)
        {
            if (tick > nextEventAt + 2000)
            {
                nextEventAt = tick + 1000 * (randInt(13, 37));
                simModel    = modelReader.readModel("C:\\Program Files\\Aptima\\DDD 4.0\\Client\\SimulationModel.xml");
            }
            else if (Math.Truncate(tick / 1000.0) == Math.Truncate(nextEventAt / 1000.0))
            {// do something now
                // first update nextEventTime
                nextEventAt += 1000 * randInt(3, 20);
                if (allUnits.Keys.Count > 0)
                {
                    string[] keyArray = new string[allUnits.Keys.Count];
                    allUnits.Keys.CopyTo(keyArray, 0);
                    string          unitToUse = keyArray[randInt(keyArray.Length)];
                    SimulationEvent simEvent;
                    switch (randInt(2))
                    {
                    case 0:    //move a unit
                        Location whereToGo = allUnits[unitToUse].newLocation();
                        Console.WriteLine("Moving " + unitToUse + " from (" + allUnits[unitToUse].position.X + "," + allUnits[unitToUse].position.Y + ") to (" + whereToGo.X.ToString() + "," + whereToGo.Y.ToString() + ")");


                        // Generate a moveObject request
                        simEvent                        = SimulationEventFactory.BuildEvent(ref simModel, "MoveObjectRequest");
                        simEvent["UserID"]              = DataValueFactory.BuildString("red dm");
                        simEvent["ObjectID"]            = DataValueFactory.BuildString(unitToUse);
                        simEvent["DestinationLocation"] = DataValueFactory.BuildLocation((double)whereToGo.X, (double)whereToGo.Y, 0.0, true);
                        simEvent["Throttle"]            = DataValueFactory.BuildDouble(randInt(75, 101) / 100.0);
                        simEvent["Time"]                = DataValueFactory.BuildInteger(tick + 3000);// '+3000" is not magic -- just a clumsy attempt to avoid a race condition
                        EventGetter.Network.PutEvent(simEvent);
                        break;

                    case 1:     //attack a unit

                        string myTarget = Target.GetRandom();
                        if ("" != myTarget)
                        {
                            Console.WriteLine("Using " + unitToUse + " to attack " + myTarget);


                            //generate an attack request
                            simEvent           = SimulationEventFactory.BuildEvent(ref simModel, "AttackObjectRequest");
                            simEvent["UserID"] = DataValueFactory.BuildString("red dm");

                            simEvent["ObjectID"]       = DataValueFactory.BuildString(unitToUse);
                            simEvent["TargetObjectID"] = DataValueFactory.BuildString(myTarget);
                            simEvent["CapabilityName"] = DataValueFactory.BuildString("Missile");
                            simEvent["Time"]           = DataValueFactory.BuildInteger(tick + 3000);// '+3000" is not magic -- just a clumsy attempt to avoid a race condition
                            EventGetter.Network.PutEvent(simEvent);
                        }

                        break;
                    }
                }
            }
        }
コード例 #7
0
        private void SendSystemErrorMessage(string text, string playerID)
        {
            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModelInfo, "SystemMessage");

            e["Message"]   = DataValueFactory.BuildString(text);
            e["TextColor"] = DataValueFactory.BuildInteger(-65536);//(System.Drawing.Color.Red.ToArgb());
            e["PlayerID"]  = DataValueFactory.BuildString(playerID);
            server.PutEvent(e);
        }
コード例 #8
0
        private void SendSelfDefenseAttackStarted(string attacker, string target)
        {
            SimulationEvent send = SimulationEventFactory.BuildEvent(ref simModel, "SelfDefenseAttackStarted");

            send["AttackerObjectID"] = DataValueFactory.BuildString(attacker);
            send["TargetObjectID"]   = DataValueFactory.BuildString(target);
            send["Time"]             = DataValueFactory.BuildInteger(time);

            distClient.PutEvent(send);
        }
コード例 #9
0
ファイル: HandshakeManager.cs プロジェクト: xiangnanyue/DDD
        /// <summary>
        ///
        /// </summary>
        /// <param name="playerID"></param>
        /// <param name="message"></param>
        private void SendSystemMessageToPlayer(string playerID, string message)
        {
            //might be nice to send out a confirmation of player X's joining to the server
            //and selection of a DM.  The msg would be a text chat?
            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModelInfo, "SystemMessage");

            e["Message"]   = DataValueFactory.BuildString(message);
            e["PlayerID"]  = DataValueFactory.BuildString(playerID);
            e["TextColor"] = DataValueFactory.BuildInteger(System.Drawing.Color.Red.ToArgb());
            server.PutEvent(e);
        }
コード例 #10
0
        private void SendTrackRemovedEvent(String dmID, String objectID)
        {
            SimulationEvent ev = new SimulationEvent();

            ev.eventType = "SEAMATE_TrackRemoved";
            ev.parameters.Add("UserID", DataValueFactory.BuildString(dmID));
            ev.parameters.Add("ObjectID", DataValueFactory.BuildString(objectID));
            ev.parameters.Add("Time", DataValueFactory.BuildInteger(time));

            DDDConnection.SendSimEvent(ev);
        }
コード例 #11
0
        private void SendLoginEvent(String userID, String dmID, String teamID)
        {
            SimulationEvent ev = new SimulationEvent();

            ev.eventType = "SEAMATE_ExperimenterLogin";
            ev.parameters.Add("IndividualID", DataValueFactory.BuildString(userID));
            ev.parameters.Add("TeamID", DataValueFactory.BuildString(teamID));
            ev.parameters.Add("DM_ID", DataValueFactory.BuildString(dmID));
            ev.parameters.Add("Time", DataValueFactory.BuildInteger(time));

            DDDConnection.SendSimEvent(ev);
        }
コード例 #12
0
        public void Resume()
        {
            paused = false;
            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModel, "ResumeScenario");

            e["Time"] = DataValueFactory.BuildInteger(time);

            if (distClient != null)
            {
                distClient.PutEvent(e);
            }
        }
コード例 #13
0
 public void SendStopReplayEvents()
 {
     if (simModelInfo != null)
     {
         SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModelInfo, "StopReplay");
         e["Time"] = DataValueFactory.BuildInteger(simulationTime);//ConvertInteger(latestTick);
         distClient.PutEvent(e);
         e         = SimulationEventFactory.BuildEvent(ref simModelInfo, "ExternalApp_SimStop");
         e["Time"] = DataValueFactory.BuildInteger(simulationTime);//ConvertInteger(latestTick);
         distClient.PutEvent(e);
     }
 }
コード例 #14
0
        private void SendViewProActiveRegionUpdate(string objectID, bool isVisible, int displayColor, Polygon3D poly)
        {
            SimulationEvent vpmu = null;

            vpmu = SimulationEventFactory.BuildEvent(ref simModel, "ViewProActiveRegionUpdate");

            vpmu["ObjectID"]     = DataValueFactory.BuildString(objectID);
            vpmu["IsVisible"]    = DataValueFactory.BuildBoolean(isVisible);
            vpmu["DisplayColor"] = DataValueFactory.BuildInteger(displayColor);
            vpmu["Shape"]        = poly.Footprint.GetPolygonValue();

            distClient.PutEvent(vpmu);
        }
コード例 #15
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void TrackAdded(SimulationEvent e)
        {
            if (objectProxies.Count == 0)
            {
                return; //another weird edge case
            }
            String objectID             = ((StringValue)e["ObjectID"]).value;
            SimulationObjectProxy proxy = objectProxies[objectID];

            string id = ((StringValue)e["UserID"]).value;

            proxy["TrackedBy"].SetDataValue(DataValueFactory.BuildString(id));
            proxy["TrackingTime"].SetDataValue(DataValueFactory.BuildInteger(time));
        }
コード例 #16
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void AttackObject(SimulationEvent e)
        {
            String objectID                   = ((StringValue)e["ObjectID"]).value;
            SimulationObjectProxy proxy       = objectProxies[objectID];
            String targetID                   = ((StringValue)e["TargetObjectID"]).value;
            SimulationObjectProxy targetProxy = objectProxies[targetID];

            // It's a sea vessel if it's not a BAMS or Firescout
            String className = ((StringValue)proxy["ClassName"].GetDataValue()).value;

            if (className != "BAMS" && className != "Firescout")
            {
                proxy["HostileActionTime"].SetDataValue(DataValueFactory.BuildInteger(time));
                proxy["GroundTruthIFF"].SetDataValue(DataValueFactory.BuildString("Hostile"));
            }
        }
コード例 #17
0
        /// <summary>
        /// Sends out a ClientRemoveObject event for a specified object to a specified user.
        /// </summary>
        /// <param name="objectID"></param>
        /// <param name="playerID"></param>
        private void SendRemoveObjectEvent(string objectID, string playerID)
        {
            if (!activeDMs.Contains(playerID))
            {
                return;
            }

            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModel, "ClientRemoveObject");

            e["TargetPlayer"] = DataValueFactory.BuildString(playerID);
            e["ObjectID"]     = DataValueFactory.BuildString(objectID);
            e["Time"]         = DataValueFactory.BuildInteger(currentTick);
            dmViews[playerID].RemoveObject(objectID);

            distClient.PutEvent(e);
        }
コード例 #18
0
ファイル: HandshakeManager.cs プロジェクト: xiangnanyue/DDD
        /// <summary>
        ///
        /// </summary>
        /// <param name="playerID"></param>
        /// <param name="message"></param>
        private void SendSystemMessageToAll(string message)
        {
            //might be nice to send out a confirmation of player X's joining to the server
            //and selection of a DM.  The msg would be a text chat?
            SimulationEvent e;


            foreach (string playerID in allDMs.Keys)
            {
                if (allDMs[playerID].availability != DecisionMaker.Availability.AVAILABLE)
                {
                    e              = SimulationEventFactory.BuildEvent(ref simModelInfo, "SystemMessage");
                    e["Message"]   = DataValueFactory.BuildString(message);
                    e["TextColor"] = DataValueFactory.BuildInteger(System.Drawing.Color.Black.ToArgb());
                    e["PlayerID"]  = DataValueFactory.BuildString(playerID);
                    server.PutEvent(e);
                }
            }
        }
コード例 #19
0
        /// <summary>
        /// This event receives an attack object, sends out the attack, and returns false if the current time
        /// is the same as the attack end time.  This info is used to remove the attack from the attack list if the
        /// time is up.
        /// </summary>
        /// <param name="attack"></param>
        /// <returns></returns>
        private bool SendAttackEvent(Attack attack)
        {
            bool returnBool = true;
            int  endTime    = attack.endTime;

            if (endTime <= currentTick)
            { //attack is over
                returnBool = false;
            }

            SimulationEvent e = SimulationEventFactory.BuildEvent(ref simModel, "ViewProAttackUpdate");

            e["AttackerID"]    = DataValueFactory.BuildString(attack.attacker);
            e["TargetID"]      = DataValueFactory.BuildString(attack.target);
            e["AttackEndTime"] = DataValueFactory.BuildInteger(attack.endTime);
            e["Time"]          = DataValueFactory.BuildInteger(currentTick);
            distClient.PutEvent(e);

            return(returnBool);
        }
コード例 #20
0
        private void ObjectSelected(SimulationEvent ev)
        {
            if (((StringValue)ev["UserID"]).value != MyDM)
            {
                return;
            }
            String objectID = ((StringValue)ev["ObjectID"]).value;

            _mostRecentlyClickedObject = objectID;
            DDDObj d = GetFromAllObjects(objectID);

            if (d == null)
            {
                return;
            }
            String tag = "unknown";

            if (d.Name != String.Empty)
            {
                tag = d.Name;
            }
            SimulationEvent evnt = new SimulationEvent();

            evnt.eventType = "UpdateTag";
            evnt.parameters.Add("Time", DataValueFactory.BuildInteger(time));
            evnt.parameters.Add("UnitID", DataValueFactory.BuildString(objectID));
            evnt.parameters.Add("Tag", DataValueFactory.BuildString(tag));
            List <String> dms = new List <string>();

            if (MyDM.Contains("Individ"))
            {
                dms.Add(MyDM);
            }
            else
            {
                dms.Add("BAMS DM");
                dms.Add("Firescout DM");
            }
            evnt.parameters.Add("TeamMembers", DataValueFactory.BuildStringList(dms));
            DDDConnection.SendSimEvent(evnt);//.SendObjectAttributeUpdateEvent(objectID, "InitialTag", DataValueFactory.BuildString(tag));
        }
コード例 #21
0
        public void PutEvent(SimulationEvent e)
        {
            lock (distributorLock)
            {
                if (e.eventType == "TimeTick")
                {
                    currentTimeTick = ((IntegerValue)e["Time"]).value;
                }

                e["Time"] = DataValueFactory.BuildInteger(currentTimeTick);

                if (incoming == true)
                {
                    AddToOutgoingQueues(e);
                }
                else
                {
                    AddToIncomingQueue(e);
                }
            }
        }
コード例 #22
0
ファイル: NetworkServer.cs プロジェクト: xiangnanyue/DDD
        public void ForceClose()
        {
            netStream.Close(0);
            System.Console.WriteLine("NetworkServerConnectionHandler.ConnectionHandler:ForceClose");
            netStream.Dispose();


            SimulationEvent ev = new SimulationEvent();

            ev.eventType     = "DisconnectTerminal";
            ev["Time"]       = DataValueFactory.BuildInteger(0);
            ev["TerminalID"] = DataValueFactory.BuildString(m_terminalID);
            if (eventDistClient != null)
            {
                eventDistClient.PutEvent(ev);
                networkServer.RemoveClient(eventDistClient.id);
            }


            recThread.Abort();
            sendThread.Abort();
        }
コード例 #23
0
ファイル: DDDAdapter.cs プロジェクト: vishalbelsare/DDD
        public DataValue GetCorrectDataValue(string key, string value)
        {
            DataValue dv      = null;
            String    attType = GetAttributeType(key);

            switch (attType)
            {
            case "StringType":
                dv = DataValueFactory.BuildString(value);
                break;

            case "IntegerType":
                dv = DataValueFactory.BuildInteger(Int32.Parse(value));
                break;

            //case "LocationType":
            //    dv = DataValueFactory.BuildLocation(value);
            //    break;
            //case "VelocityType":
            //    dv = DataValueFactory.BuildVelocity(Int32.Parse(value));
            //    break;
            case "DoubleType":
                dv = DataValueFactory.BuildDouble(double.Parse(value));
                break;

            case "BooleanType":
                dv = DataValueFactory.BuildBoolean(bool.Parse(value));
                break;
            //case "StringListType":
            //    dv = DataValueFactory.BuildStringList(value);
            //    break;

            default:     //state table, capability, vulnerability, detectedattribute, sensor array, emitter, custom attributes, attack collection, ClassificationDisplayRulesType
                break;
            }
            return(dv);
        }
コード例 #24
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void ClassificationChanged(SimulationEvent e)
        {
            String objectID = ((StringValue)e["ObjectID"]).value;

            if (objectProxies.Count == 0)
            {
                return; //another weird edge case
            }
            SimulationObjectProxy proxy = objectProxies[objectID];

            proxy["IdentifyTime"].SetDataValue(DataValueFactory.BuildInteger(time));
            proxy["IdentifiedBy"].SetDataValue(DataValueFactory.BuildString(((StringValue)e["UserID"]).value));
            proxy["ClassifiedBy"].SetDataValue(DataValueFactory.BuildString(((StringValue)e["UserID"]).value));

            String classification = ((StringValue)e["ClassificationName"]).value;

            proxy["UserClassifiedIFF"].SetDataValue(DataValueFactory.BuildString(classification));

            if (!classifications.ContainsKey(objectID))
            {
                classifications.Add(objectID, "");
            }
            classifications[objectID] = classification;
        }
コード例 #25
0
ファイル: SeamateSim.cs プロジェクト: xiangnanyue/DDD
        private void AttackSucceeded(SimulationEvent e)
        {
            if (objectProxies.Count == 0)
            {
                return; //another weird edge case
            }
            try
            {
                String objectID             = ((StringValue)e["ObjectID"]).value;
                SimulationObjectProxy proxy = objectProxies[objectID];

                String targetID = ((StringValue)e["TargetID"]).value;
                SimulationObjectProxy targetProxy = objectProxies[targetID];

                String transitionState = ((StringValue)e["NewState"]).value;

                // It's a sea vessel if it's not a BAMS or Firescout
                String targetClassName = ((StringValue)targetProxy["ClassName"].GetDataValue()).value;
                if (targetClassName != "BAMS" && targetClassName != "Firescout" && transitionState == "Dead")
                {
                    targetProxy["DestroyedTime"].SetDataValue(DataValueFactory.BuildInteger(time));
                    targetProxy["DestroyedBy"].SetDataValue(DataValueFactory.BuildString(objectID));

                    //AD: TODO Send view pro attribute event for these objects.
                    SimulationEvent          ev  = SimulationEventFactory.BuildEvent(ref simModel, "ViewProAttributeUpdate");
                    AttributeCollectionValue acv = new AttributeCollectionValue();
                    //                  acv.attributes.Add("DestroyedTime", DataValueFactory.BuildDetectedValue(DataValueFactory.BuildInteger(time), 100));
//                    acv.attributes.Add("DestroyedBy", DataValueFactory.BuildDetectedValue(DataValueFactory.BuildString(objectID), 100));
                    acv.attributes.Add("DestroyedTime", DataValueFactory.BuildInteger(time));
                    acv.attributes.Add("DestroyedBy", DataValueFactory.BuildString(objectID));


                    ((StringValue)ev["TargetPlayer"]).value = "BAMS DM";
                    ((StringValue)ev["ObjectID"]).value     = ((StringValue)targetProxy["ID"].GetDataValue()).value;
                    ((StringValue)ev["OwnerID"]).value      = ((StringValue)targetProxy["OwnerID"].GetDataValue()).value;
                    ((IntegerValue)ev["Time"]).value        = time * 1000;
                    ev["Attributes"] = acv;

                    distClient.PutEvent(ev);

                    ((StringValue)ev["TargetPlayer"]).value = "Firescout DM";
                    distClient.PutEvent(ev);
                    ((StringValue)ev["TargetPlayer"]).value = "Individual DM";
                    distClient.PutEvent(ev);
                }

                String targetOwnerID   = ((StringValue)targetProxy["OwnerID"].GetDataValue()).value;
                String attackerOwnerID = ((StringValue)proxy["OwnerID"].GetDataValue()).value;


                if (transitionState == "Dead")
                {
                    //Clear the intent of any other vessel mentioned in target's intent (pursued or pursuee).
                    String targetIntent = ((StringValue)targetProxy["Intent"].GetDataValue()).value;
                    if (targetIntent != "")
                    {
                        String[] intentArray = targetIntent.Split(":".ToCharArray());
                        if (intentArray.Length > 1)
                        {
                            SimulationObjectProxy vesselProxyToClear = objectProxies[intentArray[1]];
                            vesselProxyToClear["Intent"].SetDataValue(DataValueFactory.BuildString(""));
                        }
                    }

                    //IF friendly, increment counter
                    if (!targetOwnerID.ToLower().Contains("pirate"))
                    {
                        IncrementFriendliesLost(1);
                        String attackClassName = ((StringValue)proxy["ClassName"].GetDataValue()).value;
                        if (attackClassName == "BAMS" || attackClassName == "Firescout")
                        {
                            //IF friendly, and attacker was BAMS/FS
                            IncrementFriendliesDestroyedByPlayers(1);
                        }
                    }
                    else
                    {
                        //if hostile increment counter
                        IncrementHostileTargetsDestroyed(1);
                    }
                }
                //if (targetClassName == "BAMS" || targetClassName == "Firescout")
                //{
                //    //if bams/firescout, increment counter
                //    IncrementHitsTakenByAssets(1);
                //}

                if (!attackerOwnerID.Contains("BAMS") && !attackerOwnerID.Contains("Firescout") && !attackerOwnerID.Contains("Individual"))
                {
                    return; //the following section is only for YOUR attacks, so return if its not BAMS or FS
                }
                String attackClass          = ((StringValue)proxy["ClassName"].GetDataValue()).value;
                String targetClassification = "";
                try
                {
                    targetClassification = classifications[targetID];
                }
                catch (Exception exc)
                { }
                if (targetClassification != "Hostile" && (targetClassName != "BAMS" || targetClassName != "Firescout"))
                {
                    //if asset was not classified as hostile, violated ROE
                    IncrementRulesOfEngagementViolations(1);
                }
            }
            catch (Exception ex)
            {
            }
        }
コード例 #26
0
        /// <summary>
        /// *Intercepted Event From Client*  When this event is received, you'll need to extract
        /// the weapon's class from the ObjectID field, and use this class along with the
        /// ParentObjectID to determine which weapon is actually being launched.
        /// </summary>
        /// <param name="e">Incoming event</param>
        private void ClientAttackRequest(SimulationEvent e)
        {
            string playerID    = string.Empty;
            string attObjectID = string.Empty;
            string tarObjectID = string.Empty;
            string weaponName  = string.Empty;
            int    time        = ((IntegerValue)e["Time"]).value;
            SimulationObjectProxy attackingObjectProxy;
            SimulationEvent       sendingEvent;

            playerID    = ((StringValue)e["PlayerID"]).value;
            attObjectID = ((StringValue)e["AttackingObjectID"]).value;
            tarObjectID = ((StringValue)e["TargetObjectID"]).value;
            weaponName  = ((StringValue)e["WeaponOrCapabilityName"]).value;

            //// Added now that weapons are sent out with a quantity

            if (weaponName.Contains("x)") && weaponName.Contains("("))
            {//Most likely a weapon with a quantity
                char[]   ch     = { '(' };
                string[] splits = weaponName.Split(ch, StringSplitOptions.RemoveEmptyEntries);
                weaponName = splits[0].Trim();
            }

            ////

            if (objectProxies.ContainsKey(attObjectID))
            {
                attackingObjectProxy = objectProxies[attObjectID];

                List <string>         dockedWeapons = ((StringListValue)attackingObjectProxy["DockedWeapons"].GetDataValue()).strings;
                SimulationObjectProxy weaponProxy;
                foreach (string w in dockedWeapons)
                {
                    weaponProxy = objectProxies[w];
                    if (((StringValue)weaponProxy["ClassName"].GetDataValue()).value == weaponName)
                    {
                        weaponName = w;
                    }
                }

                if (dockedWeapons.Contains(weaponName))
                { //send weapon attack
                    sendingEvent = SimulationEventFactory.BuildEvent(ref simModel, "WeaponLaunchRequest");

                    sendingEvent["UserID"]         = DataValueFactory.BuildString(playerID);
                    sendingEvent["ParentObjectID"] = DataValueFactory.BuildString(attObjectID);
                    sendingEvent["TargetObjectID"] = DataValueFactory.BuildString(tarObjectID);
                    sendingEvent["ObjectID"]       = DataValueFactory.BuildString(weaponName);
                    sendingEvent["Time"]           = DataValueFactory.BuildInteger(time);
                    distClient.PutEvent(sendingEvent);
                    //remove from docked weapons, per MS State bug report.  If weapon launch fails, re-add subplatform to docked weapons
                    DataValue dv     = attackingObjectProxy["DockedWeapons"].GetDataValue();
                    bool      result = dockedWeapons.Remove(weaponName);
                    if (result)
                    {
                        ((StringListValue)dv).strings = dockedWeapons;
                        attackingObjectProxy["DockedWeapons"].SetDataValue(dv);
                    }
                    else
                    {
                        //should not happen, throw error.
                    }
                }
                else
                {//send capability attack
                    sendingEvent = SimulationEventFactory.BuildEvent(ref simModel, "AttackObjectRequest");

                    sendingEvent["UserID"]         = DataValueFactory.BuildString(playerID);
                    sendingEvent["ObjectID"]       = DataValueFactory.BuildString(attObjectID);
                    sendingEvent["TargetObjectID"] = DataValueFactory.BuildString(tarObjectID);
                    sendingEvent["CapabilityName"] = DataValueFactory.BuildString(weaponName);
                    sendingEvent["Time"]           = DataValueFactory.BuildInteger(time);
                    distClient.PutEvent(sendingEvent);
                }
            }
        }
コード例 #27
0
        /// <summary>
        /// This method extracts an objects attributes from DetectedValues in an ACV, and then sends
        /// out the appropriate info to a specified player.
        /// </summary>
        /// <param name="destinationPlayerID"></param>
        /// <param name="objectsAttributes"></param>
        /// <param name="time"></param>
        private void SendViewProAttributeUpdate(string destinationPlayerID, AttributeCollectionValue objectsAttributes)
        {
            if (!activeDMs.Contains(destinationPlayerID))
            {
                return;
            }

            SimulationEvent vpu = null;

            objectsAttributes = ExtractDetectedValuesFromACV(objectsAttributes);
            AddCapabilitiesAndWeaponsList(ref objectsAttributes);
            if (objectsAttributes.attributes.ContainsKey("Vulnerability"))
            {
                List <string> vulnerabilityList = new List <string>();
                foreach (VulnerabilityValue.Transition t in ((VulnerabilityValue)objectsAttributes["Vulnerability"]).transitions)
                {
                    foreach (VulnerabilityValue.TransitionCondition tc in t.conditions)
                    {
                        if (!vulnerabilityList.Contains(tc.capability))
                        {
                            vulnerabilityList.Add(tc.capability);
                        }
                    }
                }
//                objectsAttributes.attributes.Remove("Vulnerability");
                StringListValue sl = new StringListValue();
                sl.strings = vulnerabilityList;
                objectsAttributes.attributes.Add("VulnerabilityList", sl as DataValue);
            }
            if (objectsAttributes.attributes.ContainsKey("Sensors"))
            {
                List <string> sensorList = new List <string>();
                foreach (SensorValue sv in ((SensorArrayValue)objectsAttributes["Sensors"]).sensors)
                {
                    if (!sensorList.Contains(sv.sensorName))
                    {
                        sensorList.Add(sv.sensorName);
                    }
                }

//                objectsAttributes.attributes.Remove("Sensors");
                StringListValue sl = new StringListValue();
                sl.strings = sensorList;
                objectsAttributes.attributes.Add("SensorList", sl as DataValue);
            }
            objectsAttributes["DockedObjects"] = new StringListValue();
            List <string> strList = new List <string>();

            //if (((StringValue)objectProxies[((StringValue)objectsAttributes["ID"]).value]["ParentObjectID"].GetDataValue()).value != string.Empty)
            //{
            //    strList.Add("Dock To Parent");
            //}
            strList.AddRange(((StringListValue)objectProxies[((StringValue)objectsAttributes["ID"]).value]["DockedObjects"].GetDataValue()).strings);
            ((StringListValue)objectsAttributes["DockedObjects"]).strings = strList;
            vpu = SimulationEventFactory.BuildEvent(ref simModel, "ViewProAttributeUpdate");
            if (!objectsAttributes.attributes.ContainsKey("MaximumSpeed"))
            {
                DoubleValue dv = new DoubleValue();
                dv.value = ((DoubleValue)objectProxies[((StringValue)objectsAttributes["ID"]).value]["MaximumSpeed"].GetDataValue()).value *
                           ((DoubleValue)objectProxies[((StringValue)objectsAttributes["ID"]).value]["ActiveRegionSpeedMultiplier"].GetDataValue()).value;
                objectsAttributes.attributes.Add("MaximumSpeed", dv as DataValue);
            }

            String classification = GetClassificationForDM(((StringValue)objectsAttributes["ID"]).value, destinationPlayerID);

            objectsAttributes["CurrentClassification"] = DataValueFactory.BuildString(classification);
            String overrideIcon = GetClassificationBasedIcon(((StringValue)objectsAttributes["ID"]).value, classification);

            if (overrideIcon != String.Empty)
            {
                objectsAttributes["IconName"] = DataValueFactory.BuildString(overrideIcon);
            }
            else
            {
                SimulationObjectProxy ob = objectProxies[((StringValue)objectsAttributes["ID"]).value];
                objectsAttributes["IconName"] = DataValueFactory.BuildString(((StringValue)ob["IconName"].GetDataValue()).value);
            }

            vpu["TargetPlayer"] = DataValueFactory.BuildString(destinationPlayerID);
            vpu["ObjectID"]     = objectsAttributes["ID"];
            vpu["OwnerID"]      = objectsAttributes["OwnerID"];

            //RANGE RING LOGIC
            string ownerId = ((StringValue)objectsAttributes["OwnerID"]).value;

            if (((destinationPlayerID == ownerId || selectedRangeRingLevel == RangeRingLevels.FULL) ||
                 (selectedRangeRingLevel == RangeRingLevels.SENSORNETWORK && AreDecisionMakersInSharedNetwork(destinationPlayerID, ownerId))) &&
                selectedRangeRingLevel != RangeRingLevels.DISABLED)     //this needs to be based on ownership, etc.
            {
                SimulationObjectProxy objProxy = null;
                if (objectProxies.ContainsKey(((StringValue)objectsAttributes["ID"]).value))
                {
                    objProxy = objectProxies[((StringValue)objectsAttributes["ID"]).value];
                    AddRangeRings(ref objectsAttributes, ref objProxy);
                }
                else
                {
                    //if not, something's wrong
                    Console.WriteLine("HELP");
                }
            }
            else
            {
                objectsAttributes.attributes.Remove("Vulnerability");
                objectsAttributes.attributes.Remove("Sensors");
                objectsAttributes.attributes.Remove("Capability");
            }
            //

            //if (objectsAttributes.attributes.ContainsKey("MaximumSpeed"))
            //{
            //    Console.Out.Write(String.Format("{0} moving at {1}", ((StringValue)objectsAttributes["ID"]).value, ((DoubleValue)objectsAttributes["MaximumSpeed"]).value));
            //    //foreach (string s in objectsAttributes.attributes.Keys)
            //    //{
            //    //    Console.Out.Write(String.Format("{0}, ", s));
            //    //}
            //    Console.Out.WriteLine();
            //}
            vpu["Attributes"] = objectsAttributes;
            vpu["Time"]       = DataValueFactory.BuildInteger(currentTick);

            string xml = DataValueFactory.XMLSerialize(objectsAttributes);
            AttributeCollectionValue temp = new AttributeCollectionValue();

            temp.FromXML(xml);


            distClient.PutEvent(vpu);
        }