Example #1
0
        public void Update()
        {
            IsPaused     = Game.IsPaused;
            IsInVehicle  = Game.Player.Character.IsInVehicle();
            IsInAircraft = Game.Player.Character.IsInFlyingVehicle;

            IsMenuOpen = _menuPool.IsAnyMenuOpen();

            var controllerState = _controllerEmulation.ControllerState;

            IsInRadialMenu        = !IsInVehicle && controllerState.Gamepad.Buttons.HasFlag(GamepadButtonFlags.LeftShoulder);
            IsShootingWithMouse   = !IsInVehicle && User32.IsKeyPressed(VirtualKeyStates.VK_LBUTTON);
            IsShootingWithGamepad = !IsInVehicle && !IsInRadialMenu && (controllerState.Gamepad.RightTrigger > 0);

            IsAimingWithMouse   = !IsInVehicle && User32.IsKeyPressed(VirtualKeyStates.VK_RBUTTON);
            IsAimingWithGamepad = !IsInVehicle && !IsInRadialMenu && (controllerState.Gamepad.LeftTrigger > 50);

            IsMeleeWeapon           = ScriptHookExtensions.IsMelee(Game.Player.Character.Weapons.Current.Hash);
            IsThrowableWeapon       = ScriptHookExtensions.IsThrowable(Game.Player.Character.Weapons.Current.Hash);
            IsSniperWeaponAndZoomed = ScriptHookExtensions.IsSniper(Game.Player.Character.Weapons.Current.Hash) && (GameplayCamera.IsFirstPersonAimCamActive);

            IsInCharacterSelectionMenu = !IsMenuOpen &&
                                         (controllerState.Gamepad.Buttons.HasFlag(GamepadButtonFlags.DPadDown) ||
                                          User32.IsKeyPressed(VirtualKeyStates.VK_LMENU));
        }
Example #2
0
        public static Vector3 ConecastPedsAndVehicles(Vector2 screenCoords, out Entity hitEntity)
        {
            var radius      = 1;
            var numPoints   = 5;
            var angleStep   = Math.PI * 0.2;
            var distStep    = 0.05 / numPoints;
            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, radius);
                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 bool IsFirstPersonPedCameraActive()
 {
     return(ScriptHookExtensions.GetFollowPedCamViewMode() == 4);
 }
        public void FindGazeProjection(
            Vector2 gazePoint,
            Vector2 joystickDelta,
            out Vector3 shootCoord,
            out Vector3 shootCoordSnap,
            out Vector3 shootMissileCoord,
            out Ped ped,
            out Entity missileTarget
            )
        {
            Entity target = null;

            var w = (float)(1 - _settings.Responsiveness * 0.9);

            _filteredGazePoint = new Vector2(_filteredGazePoint.X + (gazePoint.X - _filteredGazePoint.X) * w,
                                             _filteredGazePoint.Y + (gazePoint.Y - _filteredGazePoint.Y) * w);

            var filteredGazePointPlusJoystickDelta   = _filteredGazePoint + joystickDelta;
            var unfilteredGazePointPlusJoystickDelta = gazePoint;

            Entity unfilteredEntity;
            Entity filteredEntity;
            var    hitUnfiltered = Geometry.ConecastPedsAndVehicles(unfilteredGazePointPlusJoystickDelta, out unfilteredEntity);

            shootMissileCoord = hitUnfiltered;
            shootCoordSnap    = hitUnfiltered;


            var hitFiltered = Geometry.RaycastEverything(filteredGazePointPlusJoystickDelta, out filteredEntity, 0);

            shootCoord = hitFiltered;


            if (unfilteredEntity != null &&
                ScriptHookExtensions.IsEntityAPed(unfilteredEntity) &&
                unfilteredEntity.IsAlive)
            {
                ped = unfilteredEntity as Ped;
            }
            else
            {
                //if (_frameSkip == 0)
                //{
                //	ped = Geometry.SearchPed(unfilteredGazePointPlusJoystickDelta); //Too slow :(
                //	_lastPed = ped;
                //}
                //else
                {
                    ped = _lastPed;
                }
            }

            if ((ped != null) &&
                (ped.Handle != Game.Player.Character.Handle))
            {
                shootCoordSnap = ped.GetBoneCoord(Bone.SKEL_L_Clavicle);
                target         = ped;
                if (_settings.SnapAtTargetsEnabled)
                {
                    shootCoord = shootCoordSnap;
                }
            }
            else
            {
                Vehicle vehicle;
                if (unfilteredEntity != null &&
                    ScriptHookExtensions.IsEntityAVehicle(unfilteredEntity) &&
                    unfilteredEntity.IsAlive)
                {
                    vehicle = unfilteredEntity as Vehicle;
                }
                else
                {
                    //if (_frameSkip == 0)
                    //{
                    //	vehicle = Geometry.SearchVehicle(unfilteredGazePointPlusJoystickDelta); // Too slow :(
                    //	_lastVehicle = vehicle;
                    //}
                    //else
                    {
                        vehicle = _lastVehicle;
                    }
                }

                if (vehicle != null &&
                    !((Game.Player.Character.IsInVehicle()) &&
                      (vehicle.Handle == Game.Player.Character.CurrentVehicle.Handle)))
                {
                    shootCoordSnap    = vehicle.Position + vehicle.Velocity * 0.06f;
                    shootMissileCoord = shootCoordSnap;
                    target            = vehicle;
                }
            }


            ProcessMissileLock(target);


            missileTarget = _missileTarget;
            _frameSkip++;
            if (_frameSkip > _maxSkipFrames)
            {
                _frameSkip = 0;
            }
        }