Beispiel #1
0
        private void gameEvents_UpdateTick(object sender, EventArgs e)
        {
            //if last command is not finished, update it
            if (m_curCmd != null && !m_curCmd.isFinish)
            {
                m_curCmd.update();
                return;
            }

            //try to see if we can invoke new command by last pressed but not released button
            if (StardewWrap.isPlayerBusy() || m_lastActionButtion == SButton.None)
            {
                return;
            }
            CmdCfg cfg = findCmdCfg(m_lastActionButtion);

            if (cfg == null)
            {
                return;
            }
            m_lastActionButtion = SButton.None;
            m_cmdcfg            = cfg;
            m_curCmd            = Command.create(m_cmdcfg.cmd);
            if (m_curCmd == null)
            {
                return;
            }
            m_curCmd.exec(m_cmdcfg.par);
        }
 /// <summary>Raised after the player presses a button on the keyboard, controller, or mouse.</summary>
 /// <param name="sender">The event sender.</param>
 /// <param name="e">The event data.</param>
 private void onButtonPressed(object sender, ButtonPressedEventArgs e)
 {
     //only when player is ready shall we start process button event
     if (!StardewWrap.isPlayerReady())
     {
         return;
     }
     buttonPressed(e.Button);
 }
Beispiel #3
0
 /*********
 ** Binding logic
 *********/
 /// <summary>Switch mode by name</summary>
 /// <param name="modeName">The name of desired mode.</param>
 public void switchMode(string modeName)
 {
     if (!m_config.modes.ContainsKey(modeName))
     {
         StardewWrap.inGameMessage($"No {modeName} mode!!");
         return;
     }
     m_curModeName = modeName;
     m_keyMap      = m_config.getModeDict(m_curModeName);
     StardewWrap.inGameMessage($"{modeName} mode ON!!");
 }
        /// <summary>
        /// SMAPI raise trigger when its value is above about 0.2 but Stardew process trigger 0~0.2 as swap item. if trigger need to be binded, we need our way to track its events.
        /// But this way the game will not receive any trigger event in "normal" state.
        /// </summary>
        private void overrideTrigger()
        {
            var padState = StardewWrap.GetRealGamePadState();

            if (padState.Triggers.Left > 0)
            {
                if (StardewWrap.isPlayerReady())
                {
                    //this.Monitor.Log($"left:{padState.Triggers.Left}, {Helper.Input.IsSuppressed(SButton.LeftTrigger)}", LogLevel.Debug);
                    if (padState.Triggers.Left > m_threshold && !m_leftTriggerOn)
                    {
                        m_leftTriggerOn = true;
                        buttonPressed(SButton.LeftTrigger);
                    }
                    Helper.Input.Suppress(SButton.LeftTrigger);
                }
            }
            else if (m_lastLeft != 0)
            {
                //this.Monitor.Log($"left:{padState.Triggers.Left}, {Helper.Input.IsSuppressed(SButton.LeftTrigger)}", LogLevel.Debug);
                m_leftTriggerOn = false;
                Helper.Input.Suppress(SButton.LeftTrigger);
            }
            m_lastLeft = padState.Triggers.Left;

            if (padState.Triggers.Right > 0)
            {
                if (StardewWrap.isPlayerReady())
                {
                    if (padState.Triggers.Right > 0.1 && !m_rightTriggerOn)
                    {
                        m_rightTriggerOn = true;
                        buttonPressed(SButton.RightTrigger);
                    }
                    Helper.Input.Suppress(SButton.RightTrigger);
                }
            }
            else if (m_lastRight != 0)
            {
                //this.Monitor.Log($"left:{padState.Triggers.Left}, {Helper.Input.IsSuppressed(SButton.LeftTrigger)}", LogLevel.Debug);
                m_rightTriggerOn = false;
                Helper.Input.Suppress(SButton.RightTrigger);
            }
            m_lastRight = padState.Triggers.Right;
        }
Beispiel #5
0
        /*********
        ** Private methods
        *********/
        /// <summary>The method invoked when the player presses a controller, keyboard, or mouse button.</summary>
        /// <param name="sender">The event sender.</param>
        /// <param name="e">The event data.</param>
        private void inputEvents_ButtonPressed(object sender, EventArgsInput e)
        {
#if DEBUG
            this.Monitor.Log($"Pressed {e.Button}.");
#endif
            //only when player is ready shall we start process button event
            if (!StardewWrap.isPlayerReady())
            {
                return;
            }

            //if current key is modify key, mark the key
            if (isModifyKey(e.Button))
            {
                m_modify = e.Button;
                e.SuppressButton();
                return;
            }
            //not modify key. Now check if the key combination is in the config
            CmdCfg cfg = findCmdCfg(e.Button);
            if (cfg == null)
            {
                return;
            }
            //old command must finished before new command could be created, but record the key to see if we can invoke it later
            if ((m_curCmd != null && !m_curCmd.isFinish) || StardewWrap.isPlayerBusy())
            {
                m_lastActionButtion = e.Button;
                return;
            }
            //now create the command
            m_cmdcfg = cfg;
            m_curCmd = Command.create(m_cmdcfg.cmd);
            if (m_curCmd == null)
            {
                m_cmdcfg = null;
                return;
            }
            //command is there so just overide and execute it
            m_curCmd.exec(m_cmdcfg.par);
            e.SuppressButton();
        }
Beispiel #6
0
        private void inputEvents_ButtonReleased(object sender, EventArgsInput e)
        {
#if DEBUG
            this.Monitor.Log($"Released {e.Button}.");
#endif
            //only when player is ready shall we start process button event
            if (!StardewWrap.isPlayerReady())
            {
                return;
            }
            //if modify key released, mark m_modify as none and stop current command if necessary
            if (isModifyKey(e.Button))
            {
                if (m_modify == e.Button)
                {
                    m_modify = SButton.None;
                }
                if (m_cmdcfg != null && e.Button == m_cmdcfg.modifyKey)
                {
                    stopCmd();
                }
                e.SuppressButton();
                return;
            }
            //it's action key, mark released
            if (m_lastActionButtion == e.Button)
            {
                m_lastActionButtion = SButton.None;
            }
            //try to end active command
            if (m_cmdcfg != null && e.Button == m_cmdcfg.key)
            {
                stopCmd();
            }
            e.SuppressButton();
        }
Beispiel #7
0
 /// <summary>Check if new command is good to go.</summary>
 public bool canTriggerNew()
 {
     return(!((m_curCmd != null && !m_curCmd.isFinish) || StardewWrap.isPlayerBusy()));
 }