コード例 #1
0
ファイル: Aiming.cs プロジェクト: Ro9ueAdmin/gta5eyetracking
        public void Shoot(Vector3 target)
        {
            IsCrosshairVisible = true;
            var weaponPos = Game.Player.Character.Position;

            //take velocity into account
            if (Game.Player.Character.IsInVehicle())
            {
                var vehicle = Game.Player.Character.CurrentVehicle;
                weaponPos += vehicle.Velocity * 0.06f;
                var fireRateTime = TimeSpan.FromSeconds(0.2);
                if (_shootStopWatch.Elapsed > fireRateTime)
                {
                    World.ShootBullet(weaponPos, target, Game.Player.Character, new Model(Game.Player.Character.Weapons.Current.Hash),
                                      1);
                    _shootStopWatch.Restart();
                }
            }
            else
            {
                var dir           = target - Game.Player.Character.GetBoneCoord(Bone.SKEL_R_Hand);
                var pitchToTarget = Geometry.DirectionToRotation(dir).X;

                _animationHelper.PlayShootingAnimation(pitchToTarget);

                ScriptHookExtensions.SetPedShootsAtCoord(Game.Player.Character, target);
                RotatePlayerCharacterTowardsTarget(target);
            }
        }
コード例 #2
0
        private void CreateMissileEntity()
        {
            var model           = new Model("w_at_ar_supp_02");
            var playerCharacter = Game.Player.Character;

            if (playerCharacter == null)
            {
                return;
            }
            var position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 1f;

            if (playerCharacter.IsInVehicle())
            {
                position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 2f;
            }
            if (playerCharacter.IsInPlane)
            {
                position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 4f;
            }
            _missile = World.CreateProp(model, position, false, false);
            if (_missile == null)
            {
                Debug.Log("Failed to create a missile prop");
                Exists = false;
                return;
            }
            GTA.Native.Function.Call(GTA.Native.Hash.SET_ENTITY_RECORDS_COLLISIONS, _missile, false);
            _soundId = ScriptHookExtensions.GetSoundId();
            ScriptHookExtensions.PlaySoundFromEntity(_soundId, "SPL_RPG_DIST_FLIGHT_MASTER", _missile, "");
            ScriptHookExtensions.PtfxRequestAsset("scr_exile2");
            _fxId = ScriptHookExtensions.PtfxStartOnEntity(_missile, "scr_ex2_rpg_trail", "scr_exile2", new Vector3(0.56f, 0, 0),
                                                           new Vector3(0, 0, -90), 1.0);
            UpdatePosition();
        }
コード例 #3
0
        private void RemoveMissileEntity()
        {
            ScriptHookExtensions.PtfxStop(_fxId);
            if (_missile != null)
            {
                _missile.IsVisible = false;
                _missile.Detach();
                _missile.MarkAsNoLongerNeeded();
                _missile.Position = Vector3.Zero;
            }

            Exists = false;
        }
コード例 #4
0
        private void ApplyCameraPosition(Camera camera, Vector3 extraOffset, bool isRelative)
        {
            var pitch = Mathf.Deg2Rad * camera.Rotation.X;
            var yaw   = Mathf.Deg2Rad * camera.Rotation.Z;

            var delta = new Vector3(extraOffset.X, (float)(_distanceToCharacter * -Math.Cos(pitch)),
                                    (float)(_distanceToCharacter * -Math.Sin(pitch)));

            delta.Z = Math.Max(delta.Z, -1f) + extraOffset.Z;

            var extendedViewCameraOffset = delta;

            extendedViewCameraOffset.X = (float)(Math.Cos(yaw) * delta.X - Math.Sin(yaw) * delta.Y);
            extendedViewCameraOffset.Y = (float)(Math.Sin(yaw) * delta.X + Math.Cos(yaw) * delta.Y);

            ScriptHookExtensions.AttachCamToEntity(camera, Game.Player.Character, extendedViewCameraOffset, isRelative);
        }
コード例 #5
0
        public void PlayMindControlAnimation()
        {
            if (Game.Player.Character.IsInVehicle())
            {
                return;
            }

            if (_lastAnimation == null)
            {
                var animation = new AnimationName();
                animation.Group = "gestures@f@standing@casual";
                animation.Name  = "gesture_shrug_soft";
                ScriptHookExtensions.PlayAnimation(Game.Player.Character, animation.Group, animation.Name, 40.0f, -1, false, 0, true);
                _lastAnimation = animation;
            }
            _wasPlayingAnimationThisFrame = true;
        }
コード例 #6
0
        public void PlayShootingAnimation(float pitchToTarget)
        {
            var animation = GetWeaponAnimation(Game.Player.Character.Weapons.Current.Hash, pitchToTarget);

            if ((!_wasPlayingAnimationLastFrame ||
                 !animation.Equals(_lastAnimation)) &&
                (Game.Player.Character.Weapons.Current.AmmoInClip > 0))
            {
                if (_lastAnimation != null)
                {
                    Game.Player.Character.Task.ClearAnimation(_lastAnimation.Group, _lastAnimation.Name);
                }
                ScriptHookExtensions.PlayAnimation(Game.Player.Character, animation.Group, animation.Name, 8.0f, -1, false, 0, true);
                _lastAnimation = animation;
            }
            _wasPlayingAnimationThisFrame = true;
        }
コード例 #7
0
        public void Process()
        {
            if (_initFlag)
            {
                ScriptHookExtensions.PtfxRequestAsset("scr_exile2");
                _initFlag = false;
            }

            foreach (var missile in _missiles)
            {
                missile.Process();
                if (!missile.Exists)
                {
                    missile.Dispose();
                }
            }
            _missiles = _missiles.Where(missile => missile.Exists).ToList();
        }
コード例 #8
0
        private void Detonate()
        {
            if (_missile == null)
            {
                return;
            }

            if (Exists && !Detonated)
            {
                var player = Game.Player.Character;
                var dist   = (player.Position - _missile.Position).Length();
                if (dist > 1.5)
                {
                    World.AddOwnedExplosion(player, _missile.Position, ExplosionType.Rocket, 1.5f, 0.1f);
                    ScriptHookExtensions.PtfxStop(_fxId);
                    ScriptHookExtensions.StopSound(_soundId);
                    Detonated = true;
                }
            }
        }
コード例 #9
0
 private bool HasTimeOut()
 {
     return(_flightTime > _timeout.TotalSeconds * ScriptHookExtensions.GetTimeCoef());
 }