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)); }
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); }
/// <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); } }
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); }
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; } } } }
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); }
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)); }
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); }
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); }
protected void AttackObject(SimulationEvent ev) {//ObjectID,TargetObjectID,CapabilityName,PercentageApplied String targetID = ((StringValue)ev["TargetObjectID"]).value; _dddConnection.SendObjectAttributeUpdateEvent(targetID, "Throttle", DataValueFactory.BuildDouble(0)); }