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;
            }
        }
Example #4
0
        void pick_OnPickedLeftButton(SegmentInterceptInfo SegmentInterceptInfo)
        {
            Waypoint cw = new Waypoint()
            {
                AditionalInfo = null,
                WayType       = WAYPOINTTYPE.NORMAL,
                WorldPos      = SegmentInterceptInfo.ImpactPosition,
            };

            wh.AddWaypointUnconnected(cw);
        }
Example #5
0
        /// <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);
     }
 }
Example #7
0
        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;
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
 }
Example #12
0
 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);
            }
        }
Example #14
0
        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);
        }