public void Update(DDDServerConnection serverConnection, DMView dmView) { if (DateTime.Now >= m_endTime) { m_done = true; } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } //SimObject me = dmView.AllObjects[m_thisID]; //LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); if (ShouldTrack(serverConnection, dmView)) { serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); m_trackTarget = true; } else { if (m_trackTarget) { StartLoiter(serverConnection, dmView); m_trackTarget = false; } ContinueLoiter(serverConnection, dmView); } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; //Console.Out.WriteLine(String.Format("MoveWithAvoidanceBehavior.Start(){0}",m_thisID)); LogWriter.Write(m_dmView.DecisionMakerID + "_" + m_thisID, dmView.SimTime, String.Format("MoveWithAvoidanceBehavior.Start,{0},{1}", m_destLocation.ToXML(), m_throttle)); m_wasBlocked = false; SimObject me = dmView.AllObjects[m_thisID]; //SimObject dest = dmView.AllObjects[m_destID]; LocationValue myLocation = me.Location; //LocationValue destLocation = dest.Location; if (BehaviorHelper.LocationIsEqual(myLocation, m_destLocation)) { m_done = true; return; } if (!IsBlocked2()) { m_wasBlocked = false; serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, m_destLocation, m_throttle); } else { m_wasBlocked = true; } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; SimObject dest = dmView.AllObjects[m_destID]; LocationValue myLocation = me.Location; LocationValue destLocation = dest.Location; VelocityValue myVelocity = me.Velocity; if (ObjectMath.IsWithinRange(0.1, myLocation, destLocation)) { m_done = true; return; } if (myVelocity.VX == 0 && myVelocity.VY == 0 && myVelocity.VZ == 0) { serverConnection.SendMoveObjectRequest(m_thisID, destLocation, 1); } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; SimObject dest = dmView.AllObjects[m_destID]; LocationValue clearLoc = dest.Location; LocationValue otherLocation = null; bool clear = true; foreach (String id in dmView.AllObjects.Keys) { if (id == m_destID || id == m_thisID) { continue; } otherLocation = dmView.AllObjects[id].Location; if (ObjectMath.IsWithinRange(100, clearLoc, otherLocation)) { clear = false; break; } } if (clear) { m_done = true; } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; SimActiveRegion zone = dmView.ActiveRegions[m_zoneID]; LocationValue otherLocation = null; Polygon2D azPoly = new Polygon2D(); foreach (PolygonValue.PolygonPoint p in zone.Shape.points) { azPoly.AddVertex(new Vec2D(p.X, p.Y)); } bool clear = true; foreach (String id in dmView.AllObjects.Keys) { if (id == m_thisID) { continue; } otherLocation = dmView.AllObjects[id].Location; if (Polygon2D.IsPointInside(azPoly, new Vec2D(otherLocation))) { clear = false; break; } } if (clear) { m_done = true; } }
public void Update(DDDServerConnection serverConnection,DMView dmView) { if (m_behaviorQueue.Count >= 1) { //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update() {0}",simObject.ID)); if (m_currentBehavior != m_behaviorQueue[0]) { m_currentBehavior = m_behaviorQueue[0]; //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update() starting {0} for {1}",m_currentBehavior.GetName(), simObject.ID)); m_currentBehavior.Start(serverConnection,dmView); } m_currentBehavior.Update(serverConnection, dmView); if (m_currentBehavior.IsDone(serverConnection, dmView)) { //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update(){0} is done for {1}", m_currentBehavior.GetName(), simObject.ID)); m_behaviorQueue.Remove(m_currentBehavior); m_currentBehavior = null; } } else { m_currentBehavior = null; } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; m_dddServer = serverConnection; m_done = false; m_endTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, m_delayMS); }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; m_dddServer = serverConnection; m_dddServer.SendStateChange(m_thisID, m_newState); m_done = true; }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; m_destWaypoint = m_absoluteLoiterPattern.GetWaypointClosestTo(myLocation); serverConnection.SendMoveObjectRequest(m_thisID, m_destWaypoint.Location, 1); }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; m_dddServer = serverConnection; SimObject ob = dmView.AllObjects[m_thisID]; m_dddServer.SendTransferObjectRequest(ob.ID, ob.Owner, m_newOwner, ob.State); m_done = true; }
public MoveWithAvoidanceBehavior(String thisID, LocationValue destLoc, double avoidRange, double avoidPathWidth, List <String> objectClassesToAvoid, double throttle) { m_thisID = thisID; m_destLocation = destLoc; m_avoidRange = avoidRange; m_avoidPathWidth = avoidPathWidth; m_dmView = null; m_objectClassesToAvoid = objectClassesToAvoid; m_throttle = throttle; m_holdWP = null; m_blockedBy = String.Empty; }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; if (!m_attackInProcess) // start the attack { // start with weapons if (me.DockedWeapons.Count > 0) { m_attackWeaponID = me.DockedWeapons[0]; serverConnection.SendWeaponLaunchRequest(m_thisID, m_attackWeaponID, m_targetID); m_attackEndTime = dmView.SimTime + 12000; // give a two minute time window to start, AttackUpdate will modify this m_attackInProcess = true; m_attackIsWeapon = true; } else // use native capabilities { // figure out capability/vulnerability match up String cap = DetermineCapability(me.CapabilityList, track.VulnerabilityList); if (cap != String.Empty) { serverConnection.SendAttackObjectRequest(m_thisID, m_targetID, cap); m_attackInProcess = true; m_attackIsWeapon = false; m_attackEndTime = dmView.SimTime + 12000; } else // I don't have the right capabilities, finish up { ResetAttack(); m_done = true; } } } else // check to see if the attack was succesful { // if we are still in attack mode 2 seconds after attack was supposed to end // start another attack if (dmView.SimTime > m_attackEndTime + 2000) { ResetAttack(); } } }
void StartLoiter(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); m_destWaypoint = m_absoluteLoiterPattern.GetWaypointClosestTo(myLocation); m_relativeLoiterPattern.NextWaypointIndex = m_absoluteLoiterPattern.NextWaypointIndex; m_relativeLoiterPattern.CurrentWaypointIndex = m_absoluteLoiterPattern.CurrentWaypointIndex; serverConnection.SendMoveObjectRequest(m_thisID, m_destWaypoint.Location, 1); }
public MoveWithAvoidanceBehavior(String thisID, LocationValue destLoc, double avoidRange,double avoidPathWidth, List<String> objectClassesToAvoid, double throttle) { m_thisID = thisID; m_destLocation = destLoc; m_avoidRange = avoidRange; m_avoidPathWidth = avoidPathWidth; m_dmView = null; m_objectClassesToAvoid = objectClassesToAvoid; m_throttle = throttle; m_holdWP = null; m_blockedBy = String.Empty; }
void ContinueLoiter(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; if (BehaviorHelper.LocationIsEqual(myLocation, m_destWaypoint.Location)) { m_destWaypoint = m_absoluteLoiterPattern.GetNextWaypoint(); m_relativeLoiterPattern.NextWaypointIndex = m_absoluteLoiterPattern.NextWaypointIndex; m_relativeLoiterPattern.CurrentWaypointIndex = m_absoluteLoiterPattern.CurrentWaypointIndex; serverConnection.SendMoveObjectRequest(m_thisID, m_destWaypoint.Location, 1); } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; SimObject dest = dmView.AllObjects[m_destID]; LocationValue myLocation = me.Location; LocationValue destLocation = dest.Location; if (ObjectMath.IsWithinRange(0.1, myLocation, destLocation)) { m_done = true; return; } serverConnection.SendMoveObjectRequest(m_thisID, destLocation, 1); }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; if (BehaviorHelper.LocationIsEqual(myLocation, m_destWaypoint.Location)) { m_destWaypoint = m_absoluteLoiterPattern.GetNextWaypoint(); serverConnection.SendMoveObjectRequest(m_thisID, m_destWaypoint.Location, 1); } }
bool ShouldTrack(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; WaypointSequence absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); Waypoint destWaypoint = absoluteLoiterPattern.GetWaypointClosestTo(myLocation); Double myDis = BehaviorHelper.Distance(myLocation, trackLocation); Double destDis = BehaviorHelper.Distance(destWaypoint.Location, trackLocation); if (myDis > (destDis * 2)) { return true; } else { return false; } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_trackTarget = ShouldTrack(serverConnection, dmView); if (m_trackTarget) { serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); } else { StartLoiter(serverConnection, dmView); } }
bool ShouldTrack(DDDServerConnection serverConnection, DMView dmView) { SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; WaypointSequence absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); Waypoint destWaypoint = absoluteLoiterPattern.GetWaypointClosestTo(myLocation); Double myDis = BehaviorHelper.Distance(myLocation, trackLocation); Double destDis = BehaviorHelper.Distance(destWaypoint.Location, trackLocation); if (myDis > (destDis * 2)) { return(true); } else { return(false); } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { //Console.Out.WriteLine(String.Format("MoveWithAvoidanceBehavior.Update() {0}", m_thisID)); if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; //SimObject dest = dmView.AllObjects[m_destID]; LocationValue myLocation = me.Location; VelocityValue myVelocity = me.Velocity; if (ObjectMath.IsWithinRange(0.1, myLocation, m_destLocation)) { m_done = true; return; } if (!IsBlocked2()) { if (m_wasBlocked) { m_wasBlocked = false; serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, m_destLocation, m_throttle); } else if (myVelocity.VX == 0 && myVelocity.VY == 0 && myVelocity.VZ == 0) { serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, m_destLocation, m_throttle); } } else { m_wasBlocked = true; serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, myLocation, 0); } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; m_dddServer = serverConnection; SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_originalLocation = myLocation; //m_trackTarget = ShouldTrack(serverConnection, dmView); m_engagementState = EngagementState.Tracking; //if (m_trackTarget) //{ // serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); //} //else //{ // StartLoiter(serverConnection, dmView); //} }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_behaviorQueue.Count >= 1) { //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update() {0}",simObject.ID)); if (m_currentBehavior != m_behaviorQueue[0]) { m_currentBehavior = m_behaviorQueue[0]; //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update() starting {0} for {1}",m_currentBehavior.GetName(), simObject.ID)); m_currentBehavior.Start(serverConnection, dmView); } m_currentBehavior.Update(serverConnection, dmView); if (m_currentBehavior.IsDone(serverConnection, dmView)) { //Console.Out.WriteLine(String.Format("ObjectControlAgent.Update(){0} is done for {1}", m_currentBehavior.GetName(), simObject.ID)); m_behaviorQueue.Remove(m_currentBehavior); m_currentBehavior = null; } } else { m_currentBehavior = null; } }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } //SimObject me = dmView.AllObjects[m_thisID]; //LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); if (ShouldTrack(serverConnection,dmView)) { serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); m_trackTarget = true; } else { if (m_trackTarget) { StartLoiter(serverConnection,dmView); m_trackTarget = false; } ContinueLoiter(serverConnection, dmView); } }
public void Start(DDDServerConnection serverConnection, DMView dmView) { }
public void Update(DDDServerConnection serverConnection, DMView dmView) { }
public bool IsDone(DDDServerConnection serverConnection, DMView dmView) { //Console.Out.WriteLine(String.Format("MoveWithAvoidanceBehavior.IsDone() {0} {1}", m_thisID,m_done)); return(m_done); }
public void Update(DDDServerConnection serverConnection, DMView dmView) { if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_absoluteLoiterPattern = m_relativeLoiterPattern.ToAbsolute(trackLocation); switch (m_engagementState) { case EngagementState.Tracking: if (ShouldTrack(serverConnection, dmView)) { serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); } else { m_engagementState = EngagementState.Attacking; StartLoiter(serverConnection, dmView); } break; case EngagementState.Attacking: ContinueLoiter(serverConnection, dmView); if (!m_attackInProcess) // start the attack { // start with weapons if (me.DockedWeapons.Count > 0) { m_attackWeaponID = me.DockedWeapons[0]; serverConnection.SendWeaponLaunchRequest(m_thisID, m_attackWeaponID, m_targetID); m_attackEndTime = dmView.SimTime + 12000; // give a two minute time window to start, AttackUpdate will modify this m_attackInProcess = true; m_attackIsWeapon = true; } else // use native capabilities { // figure out capability/vulnerability match up String cap = DetermineCapability(me.CapabilityList, track.VulnerabilityList); if (cap != String.Empty) { serverConnection.SendAttackObjectRequest(m_thisID, m_targetID, cap); m_attackInProcess = true; m_attackIsWeapon = false; m_attackEndTime = dmView.SimTime + 12000; } else // I don't have the right capabilities, finish up { ResetAttack(); if (m_returnAfter) { m_engagementState = EngagementState.Returning; m_dddServer.SendMoveObjectRequest(m_thisID, m_originalLocation, 1); } else { m_done = true; } } } } else // check to see if the attack was succesful { // if we are still in attack mode 2 seconds after attack was supposed to end // start another attack if (dmView.SimTime > m_attackEndTime + 2000) { ResetAttack(); } } break; case EngagementState.Returning: if (BehaviorHelper.Distance(myLocation, m_originalLocation) < 1) { m_done = true; } break; } }
/// <summary> /// The constructor for the DDDServerConnection object. /// </summary> /// public DDDServerConnection() { m_subscibedEvents = new List<string>(); m_eventQueue = new List<SimulationEvent>(); m_netClient = new NetworkClient(); m_players = new List<string>(); lock (PublicDmViewLock) { m_dmViews = new Dictionary<string, DMView>(); } m_dddClientPath = ""; m_dddTimeInt = 0; m_dddTimeString = "0:00:00"; _eventCallbacks = new Dictionary<string, List<ProcessSimulationEvent>>(); m_regionDefinitions = new Dictionary<string, PolygonValue>(); m_groundTruthView = new DMView("Ground_Truth"); }
public void ResetForNewSession() { m_players = new List<string>(); lock (PublicDmViewLock) { m_dmViews = new Dictionary<string, DMView>(); } m_subscibedEvents = new List<string>(); m_eventQueue = new List<SimulationEvent>(); m_dddClientPath = ""; m_dddTimeInt = 0; m_dddTimeString = "0:00:00"; m_playerID = ""; m_regionDefinitions = new Dictionary<string, PolygonValue>(); m_groundTruthView = new DMView("Ground_Truth"); }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; SimObject me = dmView.AllObjects[m_thisID]; LocationValue myLocation = me.Location; SimObject track = dmView.AllObjects[m_targetID]; LocationValue trackLocation = track.Location; m_trackTarget = ShouldTrack(serverConnection,dmView); if (m_trackTarget) { serverConnection.SendMoveObjectRequest(m_thisID, trackLocation, 1); } else { StartLoiter(serverConnection,dmView); } }
public bool IsDone(DDDServerConnection serverConnection, DMView dmView) { //Console.Out.WriteLine(String.Format("MoveWithAvoidanceBehavior.IsDone() {0} {1}", m_thisID,m_done)); return m_done; }
public void Update(DDDServerConnection serverConnection, DMView dmView) { //Console.Out.WriteLine(String.Format("MoveWithAvoidanceBehavior.Update() {0}", m_thisID)); if (m_done) { return; } SimObject me = dmView.AllObjects[m_thisID]; //SimObject dest = dmView.AllObjects[m_destID]; LocationValue myLocation = me.Location; VelocityValue myVelocity = me.Velocity; if (ObjectMath.IsWithinRange(0.1, myLocation, m_destLocation)) { m_done = true; return; } if (!IsBlocked2()) { if (m_wasBlocked) { m_wasBlocked = false; serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, m_destLocation, m_throttle); } else if (myVelocity.VX == 0 && myVelocity.VY == 0 && myVelocity.VZ == 0) { serverConnection.SendMoveObjectRequest(m_thisID, me.Owner, m_destLocation, m_throttle); } } else { m_wasBlocked = true; serverConnection.SendMoveObjectRequest(m_thisID, me.Owner,myLocation, 0); } }
public bool IsDone(DDDServerConnection serverConnection, DMView dmView) { return(m_done); }
public void Start(DDDServerConnection serverConnection, DMView dmView) { m_dmView = dmView; m_dddServer = serverConnection; }
/// <summary> /// Get the DMView object that contains DDD object state information. /// </summary> /// <param name="dm"></param> /// <returns></returns> public DMView GetDMView(String dm) { if (m_dmViews.ContainsKey(dm)) { return m_dmViews[dm]; } else { lock (PublicDmViewLock) { m_dmViews[dm] = new DMView(dm); } return m_dmViews[dm]; //fine to return ref out of lock, consumer of this object needs to use the lock while accessing dmView } }
public bool IsDone(DDDServerConnection serverConnection, DMView dmView) { return m_done; }