コード例 #1
0
ファイル: DDDAdapter.cs プロジェクト: vishalbelsare/DDD
        protected void SelfDefense(SimulationEvent ev)
        //Set throttle of target to 0 when pirate attacks (the "attack" is actually a self defense attack)
        {
            String targetID = ((StringValue)ev["TargetObjectID"]).value;

            _dddConnection.SendObjectAttributeUpdateEvent(targetID, "Throttle", DataValueFactory.BuildDouble(0));
        }
コード例 #2
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);
        }
コード例 #3
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);
            }
        }
コード例 #4
0
ファイル: DDDAdapter.cs プロジェクト: vishalbelsare/DDD
        protected void MoveDone(SimulationEvent ev)
        {//ObjectID, Reason
            String id = ((StringValue)ev["ObjectID"]).value;

            if (!_revealedObjects.ContainsKey(id))
            {
                return;
            }
            AttributeCollectionValue atts = new AttributeCollectionValue();

            atts.attributes.Add("DestinationLocation", new LocationValue());
            atts.attributes.Add("Throttle", DataValueFactory.BuildDouble(0));

            String owner = _revealedObjects[id].Owner;

            foreach (PolygonValue region in GetAllEntryRegions())
            {
                if (Polygon2D.IsPointInside(new Polygon2D(region), new Vec2D(GetSeamateObject(id).Location)) &&
                    owner == "Merchant DM")
                {
                    Console.WriteLine("Detected vessel " + id + " ending move in entry region, turning state to Dead.");
                    //atts.attributes.Add("State", DataValueFactory.BuildString("Dead"));
                    _dddConnection.SendStateChange(id, "Dead");
                }
            }


            //LocationValue destLoc =  as LocationValue;
            _revealedObjects[id].SetAttributes(atts);
        }
コード例 #5
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;
                    }
                }
            }
        }
コード例 #6
0
        private void ResetObjectMovement(string objectID, double throttle, LocationValue destination)
        {
            SimulationEvent moveObject = SimulationEventFactory.BuildEvent(ref simModel, "MoveObject");

            moveObject["ObjectID"]            = DataValueFactory.BuildString(objectID);
            moveObject["DestinationLocation"] = destination;
            moveObject["Throttle"]            = DataValueFactory.BuildDouble(throttle);

            distClient.PutEvent(moveObject);
        }
コード例 #7
0
        private void ChangeObjectFuelAmount(DoubleValue newAmount, string objectID)
        {
            SimulationObjectProxy obj = objectProxies[objectID];

            if (obj == null)
            {
                return;
            }
            double fuelCapacity   = ((DoubleValue)obj["FuelCapacity"].GetDataValue()).value;
            double newAmountValue = Math.Min(newAmount.value, fuelCapacity); //enforce constraint

            obj["FuelAmount"].SetDataValue(DataValueFactory.BuildDouble(newAmountValue));
        }
コード例 #8
0
ファイル: Class1.cs プロジェクト: xiangnanyue/DDD
        public static void PublishCPE(String dmId, double findFixCpe, double trackTargetCpe)
        {
            SimulationEvent cpe = new SimulationEvent();

            cpe.eventType = "SEAMATE_UpdateCPE";
            cpe.parameters.Add("DM_ID", DataValueFactory.BuildString(dmId));
            cpe.parameters.Add("FF_CPE", DataValueFactory.BuildDouble(findFixCpe));
            cpe.parameters.Add("TT_CPE", DataValueFactory.BuildDouble(trackTargetCpe));

            if (_client == null)
            {
                throw new Exception("DDD Network Client not connected; You need to call Connect successfully before sending events.");
            }
            _client.PutEvent(cpe);
        }
コード例 #9
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);
        }
コード例 #10
0
ファイル: DDDAdapter.cs プロジェクト: vishalbelsare/DDD
        protected void AttackObject(SimulationEvent ev)
        {//ObjectID,TargetObjectID,CapabilityName,PercentageApplied
            String targetID = ((StringValue)ev["TargetObjectID"]).value;

            _dddConnection.SendObjectAttributeUpdateEvent(targetID, "Throttle", DataValueFactory.BuildDouble(0));
        }