Пример #1
0
        public void PostUpdate(ulong updateTick, float deltaTime)
        {
            // Apply post-processing to controls.
            foreach (InputControl control in Controls.IgnoreNulls())
            {
                if (control.RawValue != null)
                {
                    control.UpdateWithValue(control.RawValue.Value, updateTick);
                }
                else if (control.PreValue != null)
                {
                    control.UpdateWithValue(ProcessAnalogControlValue(control, deltaTime), updateTick);
                }

                control.PostUpdate(updateTick);

                if (control.HasChanged)
                {
                    LastChangeTick = updateTick;
                }
            }

            // Update two-axis controls.
            LeftStick.Update(LeftStickX, LeftStickY, updateTick);
            RightStick.Update(RightStickX, RightStickY, updateTick);

            Vector2 dpv = DPadVector;

            DPad.Update(dpv.x, dpv.y, updateTick);
        }
Пример #2
0
 public void Update(float delta)
 {
     if (!controllerInitted)
     {
         return;
     }
     RightStick.Update();
     LeftStick.Update();
 }
Пример #3
0
        public void Update(float delta)
        {
            GameController.Update(delta);
            PcController.Update(delta);
            PcAltController.Update(delta);

            RightStick.Update();
            LeftStick.Update();

            //Updating Dpad to use it's joystick emulator
            _actionDPad.Update(delta);
            //Updating KeyboardOnlyDpad to use it's joystick emulator
            _keyboardDPad.Update(delta);

            UpdateSticks();
        }
Пример #4
0
        public void PostUpdate(ulong updateTick, float deltaTime)
        {
            // Apply post-processing to controls.
            int controlCount = Controls.GetLength(0);

            for (int i = 0; i < controlCount; i++)
            {
                var control = Controls[i];
                if (control != null)
                {
                    if (control.RawValue.HasValue)
                    {
                        control.UpdateWithValue(control.RawValue.Value, updateTick);
                    }
                    else
                    if (control.PreValue.HasValue)
                    {
                        control.UpdateWithValue(ProcessAnalogControlValue(control, deltaTime), updateTick);
                    }

                    control.PostUpdate(updateTick);

                    if (control.HasChanged)
                    {
                        LastChangeTick = updateTick;
                    }
                }
            }

            // Update two-axis controls.
            LeftStick.Update(LeftStickX, LeftStickY, updateTick);
            RightStick.Update(RightStickX, RightStickY, updateTick);

            var dpv = DPadVector;

            DPad.Update(dpv.x, dpv.y, updateTick);
        }
Пример #5
0
        public void Update(GameTime gameTime)
        {
            var dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            totalTime += dt;

            var           state = TouchPanel.GetState();
            TouchLocation?leftTouch = null, rightTouch = null;

            if (tapStartCount > state.Count)
            {
                tapStartCount = state.Count;
            }

            foreach (TouchLocation loc in state)
            {
                if (loc.State == TouchLocationState.Released)
                {
                    int tapStartId = -1;
                    for (int i = 0; i < tapStartCount; ++i)
                    {
                        if (tapStarts[i].Id == loc.Id)
                        {
                            tapStartId = i;
                            break;
                        }
                    }
                    if (tapStartId >= 0)
                    {
                        for (int i = tapStartId; i < tapStartCount - 1; ++i)
                        {
                            tapStarts[i] = tapStarts[i + 1];
                        }
                        tapStartCount--;
                    }
                    continue;
                }
                else if (loc.State == TouchLocationState.Pressed && tapStartCount < tapStarts.Length)
                {
                    tapStarts[tapStartCount] = new TapStart(loc.Id, totalTime, loc.Position);
                    tapStartCount++;
                }

                if (LeftStick.touchLocation.HasValue && loc.Id == LeftStick.touchLocation.Value.Id)
                {
                    leftTouch = loc;
                    continue;
                }
                if (RightStick.touchLocation.HasValue && loc.Id == RightStick.touchLocation.Value.Id)
                {
                    rightTouch = loc;
                    continue;
                }

                if (!loc.TryGetPreviousLocation(out TouchLocation locPrev))
                {
                    locPrev = loc;
                }

                if (!LeftStick.touchLocation.HasValue)
                {
                    if (LeftStick.StartRegion.Contains((int)locPrev.Position.X, (int)locPrev.Position.Y))
                    {
                        if (LeftStick.Style == TouchStickStyle.Fixed)
                        {
                            if (Vector2.Distance(locPrev.Position, LeftStick.StartLocation) < aliveZoneSize)
                            {
                                leftTouch = locPrev;
                            }
                        }
                        else
                        {
                            leftTouch = locPrev;
                            LeftStick.StartLocation = leftTouch.Value.Position;
                            if (LeftStick.StartLocation.X < LeftStick.StartRegion.Left + edgeSpacing)
                            {
                                LeftStick.StartLocation.X = LeftStick.StartRegion.Left + edgeSpacing;
                            }
                            if (LeftStick.StartLocation.Y > LeftStick.StartRegion.Bottom - edgeSpacing)
                            {
                                LeftStick.StartLocation.Y = LeftStick.StartRegion.Bottom - edgeSpacing;
                            }
                        }
                        continue;
                    }
                }

                if (!RightStick.touchLocation.HasValue && locPrev.Id != RightStick.lastExcludedRightTouchId)
                {
                    if (RightStick.StartRegion.Contains((int)locPrev.Position.X, (int)locPrev.Position.Y))
                    {
                        bool excluded = false;
                        foreach (Rectangle r in RightStick.startExcludeRegions)
                        {
                            if (r.Contains((int)locPrev.Position.X, (int)locPrev.Position.Y))
                            {
                                excluded = true;
                                RightStick.lastExcludedRightTouchId = locPrev.Id;
                                continue;
                            }
                        }
                        if (excluded)
                        {
                            continue;
                        }
                        RightStick.lastExcludedRightTouchId = -1;
                        if (RightStick.Style == TouchStickStyle.Fixed)
                        {
                            if (Vector2.Distance(locPrev.Position, RightStick.StartLocation) < aliveZoneSize)
                            {
                                rightTouch = locPrev;
                            }
                        }
                        else
                        {
                            rightTouch = locPrev;
                            RightStick.StartLocation = rightTouch.Value.Position;
                            if (RightStick.StartLocation.X > RightStick.StartRegion.Right - edgeSpacing)
                            {
                                RightStick.StartLocation.X = RightStick.StartRegion.Right - edgeSpacing;
                            }
                            if (RightStick.StartLocation.Y > RightStick.StartRegion.Bottom - edgeSpacing)
                            {
                                RightStick.StartLocation.Y = RightStick.StartRegion.Bottom - edgeSpacing;
                            }
                        }
                        continue;
                    }
                }
            }

            LeftStick.Update(state, leftTouch, dt);
            RightStick.Update(state, rightTouch, dt);
        }