示例#1
0
 private ParachuteInput SmoothMouseInput(ParachuteInput prevInput, ParachuteInput input)
 {
     input.Brakes      = SmoothMouseLineInput(_mouseSmoothingConfig, prevInput.Brakes, input.Brakes, _gameClock.DeltaTime);
     input.FrontRisers = SmoothMouseLineInput(_mouseSmoothingConfig, prevInput.FrontRisers, input.FrontRisers, _gameClock.DeltaTime);
     input.RearRisers  = SmoothMouseLineInput(_mouseSmoothingConfig, prevInput.RearRisers, input.RearRisers, _gameClock.DeltaTime);
     return(input);
 }
示例#2
0
        private ParachuteInput SmoothInput(ParachuteInput prevInput, ParachuteInput input)
        {
            // Handle dual analog gamepad input and convert to parachute domain input (Todo: in external module)
            ScaleInputQuadratically(ref input, 1.5f);

            return(ParachuteInput.SmoothInput(_inputConfig, prevInput, input, _gameClock.DeltaTime));
        }
示例#3
0
        private void ApplyInput(ParachuteInput input, Parachute parachute)
        {
            // Toggle input

            // Todo: this should be wrapped into the parachute interface
            for (int i = 0; i < parachute.LeftToggleSections.Count; i++)
            {
                parachute.LeftToggleSections[i].BrakeLine.ApplyPull(input.Brakes.x);
            }

            for (int i = 0; i < parachute.RightToggleSections.Count; i++)
            {
                parachute.RightToggleSections[i].BrakeLine.ApplyPull(input.Brakes.y);
            }

            // Risers input

            for (int i = 0; i < parachute.LeftRiserSections.Count; i++)
            {
                parachute.LeftRiserSections[i].RearLine.ApplyPull(input.RearRisers.x);
                parachute.LeftRiserSections[i].FrontLine.ApplyPull(input.FrontRisers.x);
            }


            for (int i = 0; i < parachute.RightRiserSections.Count; i++)
            {
                parachute.RightRiserSections[i].RearLine.ApplyPull(input.RearRisers.y);
                parachute.RightRiserSections[i].FrontLine.ApplyPull(input.FrontRisers.y);
            }

            // Weight shift input (Todo: through parachutepilot interface)

            // TODO Re-implement weight-shift
            //pilot.Body.centerOfMass = new Vector3(input.WeightShift.x, 0f, input.WeightShift.y) * config.WeightshiftMagnitude;
        }
示例#4
0
        private void Update()
        {
            if (_wingsuitActionMap == null)
            {
                Debug.LogWarning("No actionmap found");
                return;
            }

            var wingsuitInput  = PollWingsuitInput(_wingsuitActionMap.ActionMap);
            var prevMouseInput = _mouseWingsuitInput;

            _mouseWingsuitInput = PollWingsuitMouseInput(_wingsuitActionMap.ActionMap);
            var mouseWingsuitInput = ApplyWingsuitMouseState(_gameClock.DeltaTime, _mouseGravity, _mouseCancelPower, _mouseBufferStrength, prevMouseInput, _mouseWingsuitInput);

            _wingsuitInput = wingsuitInput.Merge(mouseWingsuitInput);
            _cameraInput   = PollCameraInput(_wingsuitActionMap.ActionMap);

            if (_parachuteActionMap == null)
            {
                Debug.LogWarning("No parachute actionmap assigned");
                return;
            }

            _parachuteInput = _parachuteActionMap.V.Input;
        }
示例#5
0
        private void AnimateParachute(ParachuteInput input, CharacterMuscleLimits limits, CharacterParts parts)
        {
            CharacterMuscleOutput o = new CharacterMuscleOutput();

            Vector2 lineInput = Max(input.Brakes, input.FrontRisers, input.RearRisers);

            /* Todo: Lower body has to try and cancel out oscillations about harness pivot
             * I suspect that if we can get a rough version of this going it'll be enough
             */

            o.ArmLClose       = -lineInput.x * 0.6f;
            o.ArmRClose       = lineInput.y * 0.6f;
            o.LegLUpperPitch  = Mathf.Abs(input.WeightShift.y) * 0.66f;
            o.LegRUpperPitch  = Mathf.Abs(input.WeightShift.y) * 0.66f;
            o.LegLLowerPitch  = input.WeightShift.y;
            o.LegRLowerPitch  = input.WeightShift.y;
            o.LegLUpperClose -= input.WeightShift.x;
            o.LegRUpperClose -= input.WeightShift.x;
            o.TorsoPitch      = -input.WeightShift.y;
            o.TorsoRoll       = input.WeightShift.x * 0.66f;

            CharacterMuscleOutput.Clamp(ref o);
            CharacterMuscleOutput.ScaleToLimits(ref o, limits);
            CharacterMuscleOutput.ApplyPose(ref o, _parachutePose);
            CharacterMuscleOutput.Output(ref o, parts);
        }
示例#6
0
 private void ScaleInputQuadratically(ref ParachuteInput input, float scaleFactor)
 {
     input.Brakes.x      = ScaleQuadratic(input.Brakes.x, scaleFactor);
     input.Brakes.y      = ScaleQuadratic(input.Brakes.y, scaleFactor);
     input.FrontRisers.x = ScaleQuadratic(input.FrontRisers.x, scaleFactor);
     input.FrontRisers.y = ScaleQuadratic(input.FrontRisers.y, scaleFactor);
     input.RearRisers.x  = ScaleQuadratic(input.RearRisers.x, scaleFactor);
     input.RearRisers.y  = ScaleQuadratic(input.RearRisers.y, scaleFactor);
 }
示例#7
0
 private void ScaleInput(ref ParachuteInput input, float scaleFactor)
 {
     input.Brakes.x      *= scaleFactor;
     input.Brakes.y      *= scaleFactor;
     input.FrontRisers.x *= scaleFactor;
     input.FrontRisers.y *= scaleFactor;
     input.RearRisers.x  *= scaleFactor;
     input.RearRisers.y  *= scaleFactor;
 }
示例#8
0
        void FixedUpdate()
        {
            if (_parachute != null && Time.renderedFrameCount != _renderFrame)
            {
                var            rawInput = _actionMap.V.Input;
                ParachuteInput smoothInput;
                if (rawInput.IsMouseInput)
                {
                    smoothInput = SmoothMouseInput(_input, rawInput);
                }
                else
                {
                    smoothInput = SmoothInput(_input, rawInput);
                }
                _input = smoothInput;

                ApplyInput(_input, _parachute);

                _renderFrame = Time.renderedFrameCount;
            }
        }
示例#9
0
 public void Clear()
 {
     _wingsuitInput  = CharacterInput.Zero;
     _parachuteInput = ParachuteInput.Zero;
 }
示例#10
0
 public void SetInput(CharacterInput wingsuitInput, ParachuteInput parachuteInput, CameraInput cameraInput)
 {
     _wingsuitInput  = wingsuitInput;
     _parachuteInput = parachuteInput;
     _cameraInput    = cameraInput;
 }
示例#11
0
 public void SetParachuteInput(ParachuteInput input)
 {
     _parachuteInput = input;
 }