public WaypointsCollection ConnectWaypoints(WaypointsCollection col) { WaypointsCollection resp = new WaypointsCollection(col.MapName); foreach (Waypoint item in col.GetWaypointsList()) { item.NeightBorWaypointsId = new List <int>(); foreach (Waypoint item2 in col.GetWaypointsList()) { if (item.Id != item2.Id) { Vector3 dir = item2.WorldPos - item.WorldPos; if (dir.Length() < maxDistance) { float dist = dir.Length() * 1.2f; dir.Normalize(); Ray raio = new Ray(item.WorldPos + new Vector3(0, altura, 0), dir); SegmentInterceptInfo ri = world.PhysicWorld.SegmentIntersect(raio, (a) => true, dist); if (ri != null) { continue; } else { item.NeightBorWaypointsId.Add(item2.Id); } } } } } resp.State = WaypointsState.Connected; resp.IdWaypoint = col.IdWaypoint; return(resp); }
void p_OnPickedLeftButton(SegmentInterceptInfo SegmentInterceptInfo) { destiny = SegmentInterceptInfo.ImpactPosition; for (int i = 0; i < Simulator.getNumAgents(); i++) { Simulator.setAgentPrefVelocity(i, Vector3.Normalize(destiny - Simulator.getAgentPosition(i))); } }
/// <summary> /// Called when picking happens /// </summary> /// <param name="SegmentInterceptInfo">The segment intercept info.</param> void onPick(SegmentInterceptInfo SegmentInterceptInfo) { IObject obj = SegmentInterceptInfo.PhysicObject.ObjectOwner; if (obj != null) { this.ri = SegmentInterceptInfo; changed = true; } }
void pick_OnPickedLeftButton(SegmentInterceptInfo SegmentInterceptInfo) { Waypoint cw = new Waypoint() { AditionalInfo = null, WayType = WAYPOINTTYPE.NORMAL, WorldPos = SegmentInterceptInfo.ImpactPosition, }; wh.AddWaypointUnconnected(cw); }
/// <summary> /// Called when picking happens /// </summary> /// <param name="SegmentInterceptInfo">The segment intercept info.</param> void onPick(SegmentInterceptInfo SegmentInterceptInfo) { IObject obj = SegmentInterceptInfo.PhysicObject.ObjectOwner; if (obj != null) { objName = obj.Name; shouldDraw = true; this.ri = SegmentInterceptInfo; } }
void p_OnPickedGesture(SegmentInterceptInfo SegmentInterceptInfo, Microsoft.Xna.Framework.Input.Touch.TouchLocation TouchLocation) { destiny = VectorUtils.ToVector2(SegmentInterceptInfo.ImpactPosition); for (int i = 0; i < Simulator.getNumAgents(); i++) { Vector2 rvopos = Simulator.getAgentPosition(i); Vector2 agentpos = new Vector2(rvopos.X, rvopos.Y); Vector2 vv = Vector2.Normalize(destiny - agentpos); Vector2 v = new Vector2(vv.X, vv.Y); Simulator.setAgentPrefVelocity(i, v); } }
void pick_OnPickedLeftButton(SegmentInterceptInfo SegmentInterceptInfo) { SimpleMap sm = new SimpleMap(wh.CurrentWaypointsCollection); AStar astar = new AStar(sm); path = astar.GetPath(start.WorldPos, SegmentInterceptInfo.ImpactPosition); ///the first will always be the start and the last should be the clicked position, not the last waypoint =P path.AddLast(new Waypoint() { WorldPos = SegmentInterceptInfo.ImpactPosition }); pathchanged = true; destiny = SegmentInterceptInfo.ImpactPosition; }
protected override void Update(GameTime gt) { if (OnPickedNoneButton != null) { MouseState ms = Mouse.GetState(); UpdatePickRay(ms); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(ray, noneButtonIntercept, pickingRayDistance); if (rti == null) { return; } OnPickedNoneButton(rti); } }
private void MouseBottomRight(MouseState ms) { if (owner.ScreenState == ScreenState.Active) { if (OnPickedRighttButton != null) { UpdatePickRay(ms); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(ray, noneButtonIntercept, pickingRayDistance); if (rti == null) { return; } if (OnPickedRighttButton != null) { OnPickedRighttButton(rti); } } } }
public override SegmentInterceptInfo SegmentIntersect(Ray raio, System.Func <IPhysicObject, bool> filter, float maxDistance) { SceneQueryFlags outputFlags = SceneQueryFlags.Distance | SceneQueryFlags.Impact | SceneQueryFlags.Impact; RaycastHit[] hit = scene.RaycastMultiple(raio.Position.AsPhysX(), raio.Direction.AsPhysX(), maxDistance, outputFlags, 256); foreach (var item in hit) { if (item.Shape.Actor.UserData is IPhysicObject) { if (filter(item.Shape.Actor.UserData as IPhysicObject)) { SegmentInterceptInfo SegmentInterceptInfo = new SegmentInterceptInfo(); SegmentInterceptInfo.Distance = item.Distance; SegmentInterceptInfo.ImpactNormal = item.Normal.AsXNA(); SegmentInterceptInfo.ImpactPosition = item.Impact.AsXNA(); SegmentInterceptInfo.PhysicObject = item.Shape.Actor.UserData as IPhysicObject; return(SegmentInterceptInfo); } } } return(null); }
/// <summary> /// Called when picking happens /// </summary> /// <param name="SegmentInterceptInfo">The segment intercept info.</param> void onPick(SegmentInterceptInfo SegmentInterceptInfo) { sp1.Direction = Vector3.Normalize(SegmentInterceptInfo.ImpactPosition - cam.Position); }
void pick_OnPickedGesture(SegmentInterceptInfo SegmentInterceptInfo, Microsoft.Xna.Framework.Input.Touch.TouchLocation TouchLocation) { result = "Position " + SegmentInterceptInfo.ImpactPosition + " - " + SegmentInterceptInfo.PhysicObject.ObjectOwner.Name; }
/// <summary> /// Initializes a new instance of the <see cref="CameraFirstPerson"/> class. /// </summary> /// <param name="lrRot">The leftright rotation.</param> /// <param name="udRot">The updown rotation.</param> /// <param name="startingPos">The starting pos.</param> /// <param name="viewport">The viewport.</param> public P3DCamera(IScene scene, float lrRot, float udRot, Vector3 startingPos, Viewport viewport) { this.world = scene.World; init(lrRot, udRot, startingPos, viewport); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.FreeDrag, (sample) => { leftrightRot -= rotationSpeed * sample.Delta.X; updownRot -= rotationSpeed * sample.Delta.Y; UpdateViewMatrix(); } )); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.DoubleTap, (sample) => { onunseek = true; Matrix projection = world.CameraManager.ActiveCamera.Projection; Matrix viewProjection = world.CameraManager.ActiveCamera.View * world.CameraManager.ActiveCamera.Projection; Matrix viewInverse = Matrix.Invert(world.CameraManager.ActiveCamera.View); Matrix projectionInverse = Matrix.Invert(world.CameraManager.ActiveCamera.Projection); Matrix viewProjectionInverse = projectionInverse * viewInverse; Vector3 v = new Vector3(); v.X = (((2.0f * sample.Position.X) / viewPort.Width) - 1); v.Y = -(((2.0f * sample.Position.Y) / viewPort.Height) - 1); v.Z = 0.0f; Ray pickRay = new Ray(); pickRay.Position.X = viewInverse.M41; pickRay.Position.Y = viewInverse.M42; pickRay.Position.Z = viewInverse.M43; pickRay.Direction = Vector3.Normalize(Vector3.Transform(v, viewProjectionInverse) - pickRay.Position); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(pickRay, (a) => true, 9999); if (rti == null) { } else { Vector3 impact = rti.ImpactPosition; Vector3 lookAt = Position - impact; origem = Position; destino = Position + lookAt * 0.8f; passo = 0; } } )); scene.BindInput(new SimpleConcreteGestureInputPlayable(Microsoft.Xna.Framework.Input.Touch.GestureType.Hold, (sample) => { onseek = true; Matrix projection = world.CameraManager.ActiveCamera.Projection; Matrix viewProjection = world.CameraManager.ActiveCamera.View * world.CameraManager.ActiveCamera.Projection; Matrix viewInverse = Matrix.Invert(world.CameraManager.ActiveCamera.View); Matrix projectionInverse = Matrix.Invert(world.CameraManager.ActiveCamera.Projection); Matrix viewProjectionInverse = projectionInverse * viewInverse; Vector3 v = new Vector3(); v.X = (((2.0f * sample.Position.X) / viewPort.Width) - 1); v.Y = -(((2.0f * sample.Position.Y) / viewPort.Height) - 1); v.Z = 0.0f; Ray pickRay = new Ray(); pickRay.Position.X = viewInverse.M41; pickRay.Position.Y = viewInverse.M42; pickRay.Position.Z = viewInverse.M43; pickRay.Direction = Vector3.Normalize(Vector3.Transform(v, viewProjectionInverse) - pickRay.Position); SegmentInterceptInfo rti = world.PhysicWorld.SegmentIntersect(pickRay, (a) => true, 9999); if (rti == null) { } else { Vector3 impact = rti.ImpactPosition; Vector3 lookAt = impact - Position; destino = Position + lookAt * 0.8f; origem = Position; passo = 0; } } )); if (useAcelerometer) { accelSensor = new Microsoft.Devices.Sensors.Accelerometer(); // Start the accelerometer try { accelSensor.Start(); accelActive = true; } catch (Microsoft.Devices.Sensors.AccelerometerFailedException e) { // the accelerometer couldn't be started. No fun! accelActive = false; } catch (UnauthorizedAccessException e) { // This exception is thrown in the emulator-which doesn't support an accelerometer. accelActive = false; } accelSensor.ReadingChanged += new EventHandler <Microsoft.Devices.Sensors.AccelerometerReadingEventArgs>(accelSensor_ReadingChanged); } }
public WaypointsCollection ConnectWaypoints(WaypointsCollection col) { WaypointsCollection resp = new WaypointsCollection(col.MapName); foreach (Waypoint item in col.GetWaypointsList()) { item.NeightBorWaypointsId = new List <int>(); } foreach (Waypoint item in col.GetWaypointsList()) { float dist = float.MaxValue; float dist2 = float.MaxValue; Waypoint candidate = null; Waypoint candidate2 = null; foreach (Waypoint item2 in col.GetWaypointsList()) { Vector3 dir = item2.WorldPos - item.WorldPos; dir.Normalize(); Ray raio = new Ray(item.WorldPos + new Vector3(0, altura, 0), dir); SegmentInterceptInfo ri = world.PhysicWorld.SegmentIntersect(raio, (a) => true, maxDistance); if (ri != null) { continue; } else { float distance = Vector3.Distance(item.WorldPos, item2.WorldPos); if (distance < dist && item.Id != item2.Id) { if (item2.NeightBorWaypointsId.Count > 0) { if (item2.NeightBorWaypointsId[0] != item.Id) { dist = distance; candidate = item2; } } else { dist = distance; candidate = item2; } } else if (distance < dist2 && dist2 > dist && item.Id != item2.Id) { if (item2.NeightBorWaypointsId.Count > 0) { if (item2.NeightBorWaypointsId[0] != item.Id) { dist2 = distance; candidate2 = item2; } } else { dist2 = distance; candidate2 = item2; } } } } if (candidate != null) { item.NeightBorWaypointsId.Add(candidate.Id); } else { } } resp.State = WaypointsState.Connected; resp.IdWaypoint = col.IdWaypoint; return(resp); }