Example #1
0
        public static bool IsOccluded(Entity entity, Vector3 target3D)
        {
            const float raycastToDist   = 200.0f;
            const float raycastFromDist = 1f;

            var mView    = Util.GetCameraMatrix();
            var source3D = ViewMatrixToCameraPosition(mView);

            Entity ignoreEntity = Game.Player.Character;

            if (Game.Player.Character.IsInVehicle())
            {
                ignoreEntity = Game.Player.Character.CurrentVehicle;
            }

            var dir = (target3D - source3D);

            dir.Normalize();
            var raycastResults = World.Raycast(source3D + dir * raycastFromDist,
                                               source3D + dir * raycastToDist,
                                               (IntersectOptions)(1 | 16 | 256 | 2 | 4 | 8) // | peds + vehicles
                                               , ignoreEntity);


            if (raycastResults.DitHitEntity)
            {
                return(raycastResults.HitEntity.Handle != entity.Handle);
            }
            return(true);
        }
Example #2
0
        public static Vector3 ConecastPedsAndVehicles(Vector2 screenCoords, out  Entity hitEntity)
        {
            var numPoints = 5;
            var angleStep = Math.PI * 0.2;
            var distStep = 0.05 / 5;
            var resultCoord = new Vector3();
            hitEntity = null;
            for (var i = 0; i < numPoints; i++)
            {
                var angle = i * angleStep;
                var dist = i * distStep;
                var offsetX = Math.Sin(angle) * dist;
                var offsetY = Math.Cos(angle) * dist;
                var coord = screenCoords + new Vector2((float)offsetX, (float)offsetY);
                Entity entity;
                var hitcoord = RaycastEverything(coord, out entity, i!=0);
                if (i == 0)
                {
                    resultCoord = hitcoord;
                }

                if ((entity != null)
                    && ((ScriptHookExtensions.IsEntityAPed(entity)
                            && entity.Handle != Game.Player.Character.Handle)
                        || (ScriptHookExtensions.IsEntityAVehicle(entity)
                            && !(Game.Player.Character.IsInVehicle()
                                && entity.Handle == Game.Player.Character.CurrentVehicle.Handle))))
                {
                    hitEntity = entity;
                    resultCoord = hitcoord;
                    break;
                }
            }
            return resultCoord;
        }
Example #3
0
        public static Quaternion ToQuaternion(this Vector3 vect)
        {
            vect = new Vector3()
            {
                X = vect.X.Denormalize() * -1,
                Y = vect.Y.Denormalize() - 180f,
                Z = vect.Z.Denormalize() - 180f,
            };

            vect = vect.ToRadians();

            float      rollOver2     = vect.Z * 0.5f;
            float      sinRollOver2  = (float)Math.Sin((double)rollOver2);
            float      cosRollOver2  = (float)Math.Cos((double)rollOver2);
            float      pitchOver2    = vect.Y * 0.5f;
            float      sinPitchOver2 = (float)Math.Sin((double)pitchOver2);
            float      cosPitchOver2 = (float)Math.Cos((double)pitchOver2);
            float      yawOver2      = vect.X * 0.5f; // pitch
            float      sinYawOver2   = (float)Math.Sin((double)yawOver2);
            float      cosYawOver2   = (float)Math.Cos((double)yawOver2);
            Quaternion result        = new Quaternion()
            {
                X = cosYawOver2 * cosPitchOver2 * cosRollOver2 + sinYawOver2 * sinPitchOver2 * sinRollOver2,
                Y = cosYawOver2 * cosPitchOver2 * sinRollOver2 - sinYawOver2 * sinPitchOver2 * cosRollOver2,
                Z = cosYawOver2 * sinPitchOver2 * cosRollOver2 + sinYawOver2 * cosPitchOver2 * sinRollOver2,
                W = sinYawOver2 * cosPitchOver2 * cosRollOver2 - cosYawOver2 * sinPitchOver2 * sinRollOver2
            };

            return(result);
        }
Example #4
0
        internal void Pulse()
        {
            if (!HasFinished)
            {
                long  currentTime = Util.Util.TickCount;
                float alpha       = Util.Util.Unlerp(NetInterpolation.StartTime, currentTime, NetInterpolation.FinishTime);

                alpha = Util.Util.Clamp(0f, alpha, 1.5f);

                Vector3 comp = Util.Util.Lerp(new Vector3(), alpha, NetInterpolation.vecError);

                if (alpha == 1.5f)
                {
                    NetInterpolation.FinishTime = 0;
                    HasFinished = true;
                }

                var newPos = _startPos + comp;
                _entity.Velocity = _velocity.ToVector() + 3 * (newPos - _entity.Position);

                _entity.Quaternion = GTA.Math.Quaternion.Slerp(_startRot.ToQuaternion(),
                                                               _rotation.ToQuaternion(),
                                                               Math.Min(1.5f, alpha));
            }
        }
Example #5
0
        private static Vector3 ViewMatrixToCameraPosition(Matrix mView)
        {
            mView.Transpose();

            var vForward = mView.Row4;
            var vRight   = mView.Row2;
            var vUpward  = mView.Row3;

            var n1 = new Vector3(vForward.X, vForward.Y, vForward.Z);
            var n2 = new Vector3(vRight.X, vRight.Y, vRight.Z);
            var n3 = new Vector3(vUpward.X, vUpward.Y, vUpward.Z);

            var d1 = vForward.W;
            var d2 = vRight.W;
            var d3 = vUpward.W;

            var n2n3 = Vector3.Cross(n2, n3);
            var n3n1 = Vector3.Cross(n3, n1);
            var n1n2 = Vector3.Cross(n1, n2);

            var top   = (n2n3 * d1) + (n3n1 * d2) + (n1n2 * d3);
            var denom = Vector3.Dot(n1, n2n3);

            var epsilon = 0.0000001;

            if (Math.Abs(denom) < epsilon)
            {
                return(new Vector3());
            }

            return(top / -denom);
        }
Example #6
0
        public static bool WorldToScreenRel(Vector3 entityPosition, out Vector2 screenCoords)
        {
            var mView = Util.GetCameraMatrix();

            mView.Transpose();

            var vForward = mView.Row4;
            var vRight   = mView.Row2;
            var vUpward  = mView.Row3;

            var result = new SharpDX.Vector3(0, 0, 0);

            result.Z = (vForward.X * entityPosition.X) + (vForward.Y * entityPosition.Y) + (vForward.Z * entityPosition.Z) + vForward.W;
            result.X = (vRight.X * entityPosition.X) + (vRight.Y * entityPosition.Y) + (vRight.Z * entityPosition.Z) + vRight.W;
            result.Y = (vUpward.X * entityPosition.X) + (vUpward.Y * entityPosition.Y) + (vUpward.Z * entityPosition.Z) + vUpward.W;

            if (result.Z < 0.001f)
            {
                screenCoords = new Vector2(0, 0);
                return(false);
            }

            float invw = 1.0f / result.Z;

            result.X    *= invw;
            result.Y    *= invw;
            screenCoords = new Vector2(result.X, -result.Y);
            return(true);
        }
Example #7
0
        public static void ScreenRelToWorld(Vector2 screenCoordsRel, out Vector3 camPoint, out Vector3 farPoint)
        {
            var mView = CameraHelper.GetCameraMatrix();

            camPoint = ViewMatrixToCameraPosition(mView);
            farPoint = ScreenRelToWorld(mView, screenCoordsRel);
        }
        public static void SetDealerLocation(GTA.Math.Vector3 Position, float Rotation, PedHash pedHash)
        {
            Dealer Dealer = new Dealer(Position.X, Position.Y, Position.Z, Rotation, pedHash.ToString());

            DealerDB.AddDealer(Dealer);
            UIHelper.ShowNotification("Added new dealer location");
        }
Example #9
0
        public Vehicle CreateVehicle(Model model, Vector3 position, Vector3 rotation, int netHash)
        {
            if (model == null || !model.IsValid || !model.IsInCdImage)
            {
                return(null);
            }
            LogManager.DebugLog("CREATING VEHICLE FOR NETHASH " + netHash);
            model.Request(10000);
            LogManager.DebugLog("LOAD COMPLETE. AVAILABLE: " + model.IsLoaded);

            var veh = World.CreateVehicle(model, position, rotation.Z);

            LogManager.DebugLog("VEHICLE CREATED. NULL? " + (veh == null));
            veh.Rotation     = rotation;
            veh.IsInvincible = true;
            LogManager.DebugLog("PROPERTIES SET");
            lock (HandleMap)
            {
                if (!HandleMap.Reverse.ContainsKey(veh.Handle))
                {
                    HandleMap.Reverse.Add(veh.Handle, netHash);
                }
            }
            LogManager.DebugLog("DISCARDING MODEL");
            model.MarkAsNoLongerNeeded();
            LogManager.DebugLog("CREATEVEHICLE COMPLETE");
            return(veh);
        }
Example #10
0
        public Blip CreateBlip(Vector3 pos, int netHandle)
        {
            var blip = World.CreateBlip(pos);

            lock (HandleMap) HandleMap.Add(netHandle, blip.Handle);
            lock (Blips) Blips.Add(blip.Handle);
            return(blip);
        }
Example #11
0
        public static GTA.Math.Vector3 RotationToDirection(GTA.Math.Vector3 rot)
        {
            float  retz = rot.Z * 0.0174532924F; // Degree to radian
            float  retx = rot.X * 0.0174532924F;
            double absx = Math.Abs(Math.Cos(retx));

            return(new GTA.Math.Vector3((float)(-Math.Sin(retz) * absx), (float)(Math.Cos(retz) * absx), (float)(Math.Sin(retx))));
        }
Example #12
0
 public static Vector3 LerpVector(Vector3 start, Vector3 end, float speed)
 {
     return(new Vector3()
     {
         X = start.X + (end.X - start.X) * speed,
         Y = start.Y + (end.Y - start.Y) * speed,
         Z = start.Z + (end.Z - start.Z) * speed,
     });
 }
Example #13
0
 public static Vector3 ToRadians(this Vector3 i)
 {
     return(new Vector3()
     {
         X = ToRadians(i.X),
         Y = ToRadians(i.Y),
         Z = ToRadians(i.Z),
     });
 }
Example #14
0
 public static Vector3 LinearVectorLerp(Vector3 start, Vector3 end, long currentTime, long duration)
 {
     return(new Vector3()
     {
         X = LinearFloatLerp(start.X, end.X, currentTime, duration),
         Y = LinearFloatLerp(start.Y, end.Y, currentTime, duration),
         Z = LinearFloatLerp(start.Z, end.Z, currentTime, duration),
     });
 }
Example #15
0
        public bool CheckVisible()
        {
            Vector3 cameraPos = World.RenderingCamera.Position;
            Vector3 sourcePos = new Vector3(cameraPos.X, cameraPos.Y, cameraPos.Z - 0.5f) + World.RenderingCamera.ForwardVector.Normalized;
            Vector3 targetPos = RoIEntity.Position;
            var     res       = World.Raycast(sourcePos, targetPos, IntersectFlags.Everything, null);

            return(!res.DidHit);
        }
Example #16
0
        public static void Spawn()
        {
            //Player
            Ped player = Game.Player.Character;

            //Model Spawn location
            GTA.Math.Vector3 spawnlocat = player.Position + (player.ForwardVector * 5);

            //Model name, in this case it's the random event Bride
            //string model_namespawn = "ig_bride"; //Bride ped 1633872967 ig_bride

            //Spawn the model
            Ped ped = GTA.World.CreatePed(PedHash.Stripper02SFY, spawnlocat);

            //Ped ped = GTA.World.CreatePed(model_namespawn, spawnlocat);

            //Set ped properties
            ped.Armor     = 50000;
            ped.Health    = 50000;
            ped.MaxHealth = 50000;
            ped.IsEnemy   = false;
            ped.IsPriorityTargetForEnemies = true;
            ped.RelationshipGroup          = (int)Relationship.Companion;
            ped.CanBeShotInVehicle         = true;
            ped.AlwaysDiesOnLowHealth      = false;

            //Follow Player
            //Call Native Function
            int playerG = GTA.Native.Function.Call <int>(GTA.Native.Hash.GET_PED_GROUP_INDEX,
                                                         Game.Player.Character.Handle);

            GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_AS_GROUP_MEMBER, ped.Handle, playerG);

            //Give a Weapon to ped

            //Rifle
            ped.Weapons.Give(WeaponHash.AdvancedRifle, 500, false, true);

            //Colt
            ped.Weapons.Give(WeaponHash.APPistol, 500, false, true);

            //Parachute
            ped.Weapons.Give(WeaponHash.Parachute, 1, true, true);

            //KnifeHouse

            ped.Weapons.Give(WeaponHash.Knife, 1, false, true);

            //Set ped into vehicle

            if (player.IsInVehicle())
            {
                ped.SetIntoVehicle(Game.Player.Character.CurrentVehicle, VehicleSeat.Any);
            }
            UI.Notify("Killers2 Spawn...");
        }
Example #17
0
        public GTADetection(Entity e, DetectionType type, float maxRange)
        {
            Type = type;
            var ppos = World.RenderingCamera.Position;

            Distance = ppos.DistanceTo(e.Position);
            Handle   = e.Handle;
            //Bones2D = new Dictionary<string, GTAVector2>();
            Bones3D = new Dictionary <string, GTABone>();
            //(var gmin, var gmax) = e.Model.Dimensions;
            Bbox3d = new GTABoundingBox(e);
            Bbox2d = Bbox3d.To2D();
            //System.IO.File.AppendAllText("F:/datasets/GTA_V_anomaly/log.txt", "------------" + Handle.ToString() + "------------\n");
            RaycastResult res;
            Entity        hitEntity;
            GTABone       gtaBone;

            foreach (EntityBone bone in e.Bones)
            {
                try
                {
                    Vector3 bonePosition = bone.Position;
                    float   boneDistance = ppos.DistanceTo(bonePosition);

                    // Raycasting seems to be bugged where some people have no collision? Disabled this for now...

                    //if (boneDistance < maxRange)
                    //{
                    //    res = World.Raycast(ppos, bonePosition, (IntersectFlags)287, Game.Player.Character);
                    //    hitEntity = res.HitEntity;

                    //    int isVisible = 0;
                    //    if (hitEntity == null)
                    //    {
                    //        isVisible = -1;
                    //    }
                    //    else if (hitEntity.Handle == e.Handle)
                    //    {
                    //        isVisible = 1;
                    //    }
                    //    gtaBone = new GTABone(bone, isVisible, res);
                    //}
                    //else
                    //{
                    //    gtaBone = new GTABone(bone, -2, false, null);
                    //}

                    gtaBone = new GTABone(bone);
                    Bones3D.Add(bone.Index.ToString(), gtaBone);
                }
                catch
                {
                    continue;
                }
            }
        }
Example #18
0
        public static RaycastResult Raycast(Vector3 source, Vector3 target, int options, Entity entity)
        {
            var result = Function.Call <int>(Hash._CAST_RAY_POINT_TO_POINT, source.X, source.Y, source.Z, target.X, target.Y, target.Z, options,
                                             (entity != null) ? entity.Handle : 0, 7);
            var obj = (RaycastResult)typeof(RaycastResult).GetConstructor(
                BindingFlags.NonPublic | BindingFlags.Instance,
                null, Type.EmptyTypes, null).Invoke(new[] { (object)result });

            return(obj);
        }
Example #19
0
        public static bool IsInFrontOfThePlayer(Vector3 shootCoord)
        {
            return(true);

            //var playerRotation = Game.Player.Character.Rotation;
            //var shootVector = shootCoord - Game.Player.Character.Position;
            //var shootRotation = Util.DirectionToRotation(shootVector);
            //var rotationDiff = shootRotation - playerRotation;
            //var rotationDiffBound = BoundRotationDeg(rotationDiff.Z);
            //return ((rotationDiffBound < 90) || (rotationDiffBound > 270));
        }
Example #20
0
        public static bool WorldToScreenRel_Native(Vector3 worldCoords, out Vector2 screenCoords)
        {
            var num1 = new OutputArgument();
            var num2 = new OutputArgument();

            if (!Function.Call <bool>(Hash._WORLD3D_TO_SCREEN2D, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2))
            {
                screenCoords = new Vector2();
                return(false);
            }
            screenCoords = new Vector2((num1.GetResult <float>() - 0.5f) * 2, (num2.GetResult <float>() - 0.5f) * 2);
            return(true);
        }
Example #21
0
        private void HandleBulletPacket(int netHandle, bool shooting, Vector3 aim)
        {
            //Util.Util.SafeNotify("Handling Bullet - " + DateTime.Now.Millisecond);
            var syncPed = NetEntityHandler.GetPlayer(netHandle);

            syncPed.IsShooting    = shooting;
            syncPed.AimedAtPlayer = false;

            if (shooting)
            {
                syncPed.AimCoords = aim;
            }
        }
Example #22
0
        public static Vector3 RotationToDirection(Vector3 rotation)
        {
            var z   = DegToRad(rotation.Z);
            var x   = DegToRad(rotation.X);
            var num = Math.Abs(Math.Cos(x));

            return(new Vector3
            {
                X = (float)(-Math.Sin(z) * num),
                Y = (float)(Math.Cos(z) * num),
                Z = (float)Math.Sin(x)
            });
        }
Example #23
0
        public static bool WorldToScreenRel(GTA.Math.Vector3 worldCoords, out GTA.Math.Vector2 screenCoords)
        {
            bool success;

            screenCoords = HashFunctions.Convert3dTo2d(worldCoords, out success);
            if (!success)
            {
                return(false);
            }
            screenCoords.X = (screenCoords.X - 0.5f) * 2.0f;
            screenCoords.Y = (screenCoords.Y - 0.5f) * 2.0f;
            return(success);
        }
Example #24
0
        internal void Interpolate(int netHandle, int gameHandle, Vector3 newPos, CherryMPShared.Vector3 newVelocity, Vector3 newRotation)
        {
            if (!Interpolations.ContainsKey(netHandle))
            {
                var interp = new UnoccupiedVehicleInterpolator(gameHandle, netHandle);
                interp.SetTargetPosition(newPos, newVelocity, newRotation);

                Interpolations.Set(netHandle, interp);
            }
            else
            {
                Interpolations[netHandle].SetTargetPosition(newPos, newVelocity, newRotation);
            }
        }
Example #25
0
        public static Vector3 ToEuler(this Quaternion q)
        {
            var pitchYawRoll = new Vector3();

            double sqw = q.W * q.W;
            double sqx = q.X * q.X;
            double sqy = q.Y * q.Y;
            double sqz = q.Z * q.Z;

            pitchYawRoll.Y = (float)Math.Atan2(2f * q.X * q.W + 2f * q.Y * q.Z, 1 - 2f * (sqz + sqw));   // Yaw
            pitchYawRoll.X = (float)Math.Asin(2f * (q.X * q.Z - q.W * q.Y));                             // Pitch
            pitchYawRoll.Z = (float)Math.Atan2(2f * q.X * q.Y + 2f * q.Z * q.W, 1 - 2f * (sqy + sqz));

            return(pitchYawRoll);
        }
Example #26
0
        public static Vector3 DirectionToRotation(Vector3 direction)
        {
            direction.Normalize();

            var x = (float)Math.Atan2(direction.Z, Math.Sqrt(direction.Y * direction.Y + direction.X * direction.X));
            var y = 0;
            var z = (float)-Math.Atan2(direction.X, direction.Y);

            return(new Vector3
            {
                X = Mathf.Rad2Deg * x,
                Y = Mathf.Rad2Deg * y,
                Z = Mathf.Rad2Deg * z
            });
        }
Example #27
0
        public static Vector3 DirectionToRotation(Vector3 direction)
        {
            direction.Normalize();

            var x = Math.Atan2(direction.Z, Math.Sqrt(direction.Y * direction.Y + direction.X * direction.X));
            var y = 0;
            var z = -Math.Atan2(direction.X, direction.Y);

            return(new Vector3
            {
                X = (float)RadToDeg(x),
                Y = (float)RadToDeg(y),
                Z = (float)RadToDeg(z)
            });
        }
Example #28
0
        public static Vector3 OffsetRotation(Vector3 rotationDeg, double pitchDeg, double yawDeg)
        {
            //var quaturnion = EulerDegToQuaturnion((float)DegToRad(rotationDeg.Z),
            //	(float)DegToRad(rotationDeg.X),
            //	(float) DegToRad(rotationDeg.Y));
            //var extraRotation = EulerDegToQuaturnion((float)DegToRad(yawDeg), (float)DegToRad(pitchDeg), 0);
            //var finalQuaturnion = quaturnion * extraRotation;
            //finalQuaturnion.Normalize();
            var result = rotationDeg;

            result.X += (float)pitchDeg;
            result.Z += (float)yawDeg * (float)Math.Cos(DegToRad(rotationDeg.Y));
            //UI.ShowSubtitle(Math.Round(rotationDeg.X,0) + " | " + Math.Round(rotationDeg.Y, 0) + " | " + Math.Round(rotationDeg.Z, 0)
            //	+ " | " + Math.Round(result.X, 0) + " | " + Math.Round(result.Y, 0) + " | " + Math.Round(result.Z, 0));
            return(result);
        }
Example #29
0
        public static Vector3 RaycastEverything(out Entity hitEntity, Vector3 target3D, Vector3 source3D, float radius)
        {
            hitEntity = null;
            const float raycastToDist   = 200.0f;
            const float raycastFromDist = 1f;
            const float defaultDist     = 60.0f;
            Entity      ignoreEntity    = Game.Player.Character;

            if (Game.Player.Character.IsInVehicle())
            {
                ignoreEntity = Game.Player.Character.CurrentVehicle;
            }

            var dir = (target3D - source3D);

            dir.Normalize();

            RaycastResult raycastResults;

            if (radius > 0)
            {
                raycastResults = World.RaycastCapsule(source3D + dir * raycastFromDist,
                                                      source3D + dir * raycastToDist,
                                                      radius,
                                                      (IntersectOptions)(1 | 16 | 256 | 2 | 4 | 8) // | peds + vehicles
                                                      , ignoreEntity);
            }
            else
            {
                raycastResults = World.Raycast(source3D + dir * raycastFromDist,
                                               source3D + dir * raycastToDist,
                                               (IntersectOptions)(1 | 16 | 256 | 2 | 4 | 8) // | peds + vehicles
                                               , ignoreEntity);
            }


            if (raycastResults.DitHitAnything)
            {
                if (raycastResults.DitHitEntity)
                {
                    hitEntity = raycastResults.HitEntity;
                }
                return(raycastResults.HitCoords);
            }

            return(source3D + dir * defaultDist);
        }
Example #30
0
        public static void ScreenRelToWorld(Vector2 screenCoordsRel, out Vector3 camPoint, out Vector3 farPoint)
        {
            var mView = Util.GetCameraMatrix();

            camPoint = ViewMatrixToCameraPosition(mView);
            farPoint = ScreenRelToWorld(mView, screenCoordsRel);

            //UI.ShowSubtitle("Cam: " + Math.Round(camPoint.X, 1) + " " + Math.Round(camPoint.Y, 1) + " " +
            //                Math.Round(camPoint.Z, 1)
            //                + "\nResult: " + Math.Round(farPoint.X, 1) + " " + Math.Round(farPoint.Y, 1) + " " +
            //                Math.Round(farPoint.Z, 1));

//+ "\n Cam: " + Math.Round(mView.M11, 1) + " " + Math.Round(mView.M12, 1) + " " + Math.Round(mView.M13, 1) + " " + Math.Round(mView.M14, 1)
//+ "\n " + Math.Round(mView.M21, 1) + " " + Math.Round(mView.M22, 1) + " " + Math.Round(mView.M23, 1) + " " + Math.Round(mView.M24, 1)
//+ "\n " + Math.Round(mView.M31, 1) + " " + Math.Round(mView.M32, 1) + " " + Math.Round(mView.M33, 1) + " " + Math.Round(mView.M34, 1)
//+ "\n " + Math.Round(mView.M41, 1) + " " + Math.Round(mView.M42, 1) + " " + Math.Round(mView.M43, 1) + " " + Math.Round(mView.M44, 1));
        }
Example #31
0
        public static GTABoundingBox2 ComputeBoundingBox(Entity entity)
        {
            var m = entity.Model;

            (Vector3 gmin, Vector3 gmax) = m.Dimensions;

            var bbox = new SharpDX.BoundingBox(new SharpDX.Vector3(gmin.X, gmin.Y, gmin.Z), new SharpDX.Vector3(gmax.X, gmax.Y, gmax.Z));

            var res = new GTABoundingBox2
            {
                Min = new Vector2(float.PositiveInfinity, float.PositiveInfinity),
                Max = new Vector2(float.NegativeInfinity, float.NegativeInfinity)
            };

            foreach (var corner in bbox.GetCorners())
            {
                var cornerVector = new Vector3(corner.X, corner.Y, corner.Z);

                cornerVector = entity.GetOffsetPosition(cornerVector);
                Vector2 position = HashFunctions.Convert3dTo2d(cornerVector);

                if (position.X == .1f || position.Y == .1f || position.X == .9f || position.Y == .9f)
                {
                    return(new GTABoundingBox2
                    {
                        Min = new Vector2(float.PositiveInfinity, float.PositiveInfinity),
                        Max = new Vector2(float.NegativeInfinity, float.NegativeInfinity),
                        Quality = DataQuality.Low
                    });
                }

                res = new GTABoundingBox2
                {
                    Min     = new Vector2(Math.Min(res.Min.X, position.X), Math.Min(res.Min.Y, position.Y)),
                    Max     = new Vector2(Math.Max(res.Max.X, position.X), Math.Max(res.Max.Y, position.Y)),
                    Quality = DataQuality.High
                };
            }

            if (res.Max.X == res.Min.X || res.Max.Y == res.Min.Y)
            {
                res.Quality = DataQuality.Low;
            }

            return(res);
        }
Example #32
0
        public static void ScreenRelToWorld(Vector2 screenCoordsRel, out Vector3 camPoint, out Vector3 farPoint)
        {
            var mView = ScriptHookExtensions.GetCameraMatrix();

            camPoint = ViewMatrixToCameraPosition(mView);
            farPoint = ScreenRelToWorld(mView, screenCoordsRel);
        }
Example #33
-1
 /// <summary>
 /// Creates a teleport target instance
 /// </summary>
 /// <param name="name">Name</param>
 /// <param name="x">X coordinate</param>
 /// <param name="y">Y coordinate</param>
 /// <param name="z">Z coordinate</param>
 /// <param name="requiredIPLs">Required IPLs to load</param>
 /// <param name="removeIPLs">Required IPLs to remove</param>
 /// <param name="isLoaded">Is loaded</param>
 public TeleportTarget(MString name, float x, float y, float z, string[] requiredIPLs = null, string[] removeIPLs = null)
 {
     _name = name;
     _coords = new GTA.Math.Vector3(x, y, z);
     _requiredIPLs = requiredIPLs;
     _removeIPLs = removeIPLs;
 }
Example #34
-1
        public static Vector3 DirectionToRotation(Vector3 direction)
        {
            direction.Normalize();

            var x = (float)Math.Atan2(direction.Z, Math.Sqrt(direction.Y * direction.Y + direction.X * direction.X));
            var y = 0;
            var z = (float)-Math.Atan2(direction.X, direction.Y);

            return new Vector3
            {
                X = Mathf.Rad2Deg * x,
                Y = Mathf.Rad2Deg * y,
                Z = Mathf.Rad2Deg * z
            };
        }
Example #35
-1
 public static RaycastResult Raycast(Vector3 source, Vector3 target, int options, Entity entity)
 {
     var result = Function.Call<int>(Hash._CAST_RAY_POINT_TO_POINT, source.X, source.Y, source.Z, target.X, target.Y, target.Z, options,
         (entity != null) ? entity.Handle : 0, 7);
     var obj = (RaycastResult) typeof(RaycastResult).GetConstructor(
         BindingFlags.NonPublic | BindingFlags.Instance,
         null, Type.EmptyTypes, null).Invoke(new[] {(object)result});
     return obj;
 }
Example #36
-1
 public EmergencyVehicle(string model) {
     EmergencyVehicle.spawnPos = Game.Player.Character.Position + (Game.Player.Character.ForwardVector * DISTANCE_MULTIPLIER);
     vehicle = World.CreateVehicle(model, EmergencyVehicle.spawnPos);
     // so it will unspawn like a normal emergency vehicle
     vehicle.IsPersistent = false;
 }
Example #37
-1
        public static bool WorldToScreenRel(Vector3 entityPosition, out Vector2 screenCoords)
        {
            var mView = ScriptHookExtensions.GetCameraMatrix();
            mView.Transpose();

            var vForward = mView.Row4;
            var vRight = mView.Row2;
            var vUpward = mView.Row3;

            var result = new SharpDX.Vector3(0,0,0);
            result.Z = (vForward.X * entityPosition.X) + (vForward.Y * entityPosition.Y) + (vForward.Z * entityPosition.Z) + vForward.W;
            result.X = (vRight.X * entityPosition.X) + (vRight.Y * entityPosition.Y) + (vRight.Z * entityPosition.Z) + vRight.W;
            result.Y = (vUpward.X * entityPosition.X) + (vUpward.Y * entityPosition.Y) + (vUpward.Z * entityPosition.Z) + vUpward.W;

            if (result.Z < 0.001f)
            {
                screenCoords = new Vector2(0, 0);
                return false;
            }

            float invw = 1.0f / result.Z;
            result.X *= invw;
            result.Y *= invw;
            screenCoords = new Vector2(result.X, -result.Y);
            return true;
        }
Example #38
-1
 public static Vector3 BoundRotationDeg(Vector3 angleDeg)
 {
     return new Vector3(BoundRotationDeg(angleDeg.X), BoundRotationDeg(angleDeg.Y), BoundRotationDeg(angleDeg.Z));
 }
Example #39
-1
        public static bool IsInFrontOfThePlayer(Vector3 shootCoord)
        {
            //TODO
            return true;

            //var playerRotation = Game.Player.Character.Rotation;
            //var shootVector = shootCoord - Game.Player.Character.Position;
            //var shootRotation = Util.DirectionToRotation(shootVector);
            //var rotationDiff = shootRotation - playerRotation;
            //var rotationDiffBound = BoundRotationDeg(rotationDiff.Z);
            //return ((rotationDiffBound < 90) || (rotationDiffBound > 270));
        }
Example #40
-1
 public static Vector3 RotationToDirection(Vector3 rotation)
 {
     var z = Mathf.Deg2Rad * rotation.Z;
     var x = Mathf.Deg2Rad * rotation.X;
     var num = Math.Abs(Math.Cos(x));
     return new Vector3
     {
         X = (float)(-Math.Sin(z) * num),
         Y = (float)(Math.Cos(z) * num),
         Z = (float)Math.Sin(x)
     };
 }
Example #41
-1
        private static Vector3 ViewMatrixToCameraPosition(Matrix mView)
        {
            mView.Transpose();

            var vForward = mView.Row4;
            var vRight = mView.Row2;
            var vUpward = mView.Row3;

            var n1 = new Vector3(vForward.X, vForward.Y, vForward.Z);
            var n2 = new Vector3(vRight.X, vRight.Y, vRight.Z);
            var n3 = new Vector3(vUpward.X, vUpward.Y, vUpward.Z);

            var d1 = vForward.W;
            var d2 = vRight.W;
            var d3 = vUpward.W;

            var n2n3 = Vector3.Cross(n2, n3);
            var n3n1 = Vector3.Cross(n3, n1);
            var n1n2 = Vector3.Cross(n1, n2);

            var top = (n2n3 * d1) + (n3n1 * d2) + (n1n2 * d3);
            var denom = Vector3.Dot(n1, n2n3);

            var epsilon = 0.0000001;
            if  (Math.Abs(denom) < epsilon) return new Vector3();

            return top / -denom;
        }
Example #42
-1
        public static Vector3 RaycastEverything(out Entity hitEntity, Vector3 target3D, Vector3 source3D)
        {
            hitEntity = null;
            const float raycastToDist = 200.0f;
            const float raycastFromDist = 1f;
            const float defaultDist = 60.0f;
            Entity ignoreEntity = Game.Player.Character;
            if (Game.Player.Character.IsInVehicle())
            {
                ignoreEntity = Game.Player.Character.CurrentVehicle;
            }

            var dir = (target3D - source3D);
            dir.Normalize();
            var raycastResults = World.Raycast(source3D + dir*raycastFromDist,
                source3D + dir*raycastToDist,
                (IntersectOptions) (1 | 16 | 256 | 2 | 4 | 8) // | peds + vehicles
                , ignoreEntity);

            if (raycastResults.DitHitAnything)
            {
                if (raycastResults.DitHitEntity)
                {
                    hitEntity = raycastResults.HitEntity;
                }
                return raycastResults.HitCoords;
            }

            return source3D + dir*defaultDist;
        }
Example #43
-1
 public static Vector3 OffsetRotation(Vector3 rotationDeg, double pitchDeg, double yawDeg)
 {
     //var quaturnion = EulerDegToQuaturnion((float)DegToRad(rotationDeg.Z),
     //	(float)DegToRad(rotationDeg.X),
     //	(float) DegToRad(rotationDeg.Y));
     //var extraRotation = EulerDegToQuaturnion((float)DegToRad(yawDeg), (float)DegToRad(pitchDeg), 0);
     //var finalQuaturnion = quaturnion * extraRotation;
     //finalQuaturnion.Normalize();
     var result = rotationDeg;
     result.X += (float)pitchDeg;
     result.Z += (float)yawDeg;// * (float)Math.Cos(Mathf.Deg2Rad * rotationDeg.Y);
     //UI.ShowSubtitle(Math.Round(rotationDeg.X,0) + " | " + Math.Round(rotationDeg.Y, 0) + " | " + Math.Round(rotationDeg.Z, 0)
     //	+ " | " + Math.Round(result.X, 0) + " | " + Math.Round(result.Y, 0) + " | " + Math.Round(result.Z, 0));
     return result;
 }
Example #44
-1
        public static bool IsOccluded(Entity entity, Vector3 target3D)
        {
            const float raycastToDist = 200.0f;
            const float raycastFromDist = 1f;

            var mView = ScriptHookExtensions.GetCameraMatrix();
            var source3D = ViewMatrixToCameraPosition(mView);

            Entity ignoreEntity = Game.Player.Character;
            if (Game.Player.Character.IsInVehicle())
            {
                ignoreEntity = Game.Player.Character.CurrentVehicle;
            }

            var dir = (target3D - source3D);
            dir.Normalize();
            var raycastResults = World.Raycast(source3D + dir*raycastFromDist,
                source3D + dir*raycastToDist,
                (IntersectOptions) (1 | 16 | 256 | 2 | 4 | 8) // | peds + vehicles
                , ignoreEntity);

            if (raycastResults.DitHitEntity)
            {
                return raycastResults.HitEntity.Handle != entity.Handle;
            }
            return true;
        }
Example #45
-1
                /// <summary>
                /// Teleports player to map marker
                /// </summary>
                /// <param name="sender">Source menu item</param>
                public static void MapMarker(MenuItem sender)
                {
                    int handle = Game.Player.Character.Handle;
                    if (Game.Player.Character.IsInVehicle())
                    {
                        handle = Game.Player.Character.CurrentVehicle.Handle;
                    }

                    bool markerFound = false;
                    GTA.Math.Vector3 coord = new GTA.Math.Vector3();
                    int blipIterator = Function.Call<int>(Hash._GET_BLIP_INFO_ID_ITERATOR);
                    for (int i = Function.Call<int>(Hash.GET_FIRST_BLIP_INFO_ID, blipIterator); Function.Call<bool>(Hash.DOES_BLIP_EXIST, i); i = Function.Call<int>(Hash.GET_NEXT_BLIP_INFO_ID, blipIterator))
                    {
                        if (Function.Call<int>(Hash.GET_BLIP_INFO_ID_TYPE, i) == 4)
                        {
                            coord = Function.Call<GTA.Math.Vector3>(Hash.GET_BLIP_INFO_ID_COORD, i);
                            markerFound = true;
                            break;
                        }
                    }
                    if (markerFound)
                    {
                        // Check ground
                        bool grounded = false;
                        float zz = 0;
                        for (float z = GROUND_CHECK_START; z < GROUND_CHECK_END; z += GROUND_CHECK_STEP)
                        {
                            Function.Call(Hash.SET_ENTITY_COORDS_NO_OFFSET, handle, coord.X, coord.Y, z, 0, 0, 1);
                            Script.Wait(GROUND_CHECK_WAIT);
                            unsafe
                            {
                                if (Function.Call<bool>(Hash.GET_GROUND_Z_FOR_3D_COORD, coord.X, coord.Y, z, &zz))
                                {
                                    Function.Call(Hash.SET_ENTITY_COORDS_NO_OFFSET, handle, coord.X, coord.Y, zz + MAP_MARKER_TELEPORT_EXTRA_Z, 0, 0, 1);
                                    grounded = true;
                                    break;
                                }
                            }
                        }
                        if (!grounded)
                        {
                            Function.Call(Hash.GIVE_DELAYED_WEAPON_TO_PED, Game.Player.Character.Handle, WeaponStorage.PARACHUTE_HASH, 1, false);
                            Game.Player.Character.Position = new GTA.Math.Vector3(coord.X, coord.Y, PARACHUTE_HEIGHT);
                        }
                        Utils.ShowNotificationAboveMap(GlobalConst.Message.TP_MAP_MARKER);
                    }
                    else
                    {
                        Utils.ShowNotificationAboveMap(GlobalConst.Message.TP_NO_MAP_MARKER_FOUND);
                    }
                }
Example #46
-1
 public static bool WorldToScreenRel_Native(Vector3 worldCoords, out Vector2 screenCoords)
 {
     var num1 = new OutputArgument();
     var num2 = new OutputArgument();
     if (!Function.Call<bool>(Hash._WORLD3D_TO_SCREEN2D, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2))
     {
         screenCoords = new Vector2();
         return false;
     }
     screenCoords = new Vector2((num1.GetResult<float>() - 0.5f) * 2, (num2.GetResult<float>() - 0.5f) * 2);
     return true;
 }