joystick.cpp
来自「Source code (C++) of the Amoebax game fo」· C++ 代码 · 共 246 行
CPP
246 行
//// Cross-platform free Puyo-Puyo clone.// Copyright (C) 2007 Emma's software//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//#if defined (HAVE_CONFIG_H)#include <config.h>#endif // !HAVE_CONFIG_H#include "Joystick.h"using namespace Amoebax;// The possible axis' positions.static const int8_t k_AxisLeft = -1;static const int8_t k_AxisRight = 1;static const int8_t k_AxisBottom = 1;static const int8_t k_AxisCenter = 0;////// \brief Default constructor.///Joystick::Joystick (void): m_AxisXDirection (k_AxisCenter), m_AxisYDirection (k_AxisCenter), m_HasConfiguration (false), m_PlayerControls (){}////// \brief Checks the action for the specified joystick's pressed button.////// \param joystick The joystick index that had a button pressed./// \param button The button pressed./// \return The action that happened from the game's POV.///Joystick::ActionJoystick::down (uint8_t joystick, uint8_t button){ Action action = Nothing; if ( hasConfiguration () && Options::JoystickControls == m_PlayerControls.controlsType && m_PlayerControls.joystick.index == joystick ) { if ( m_PlayerControls.joystick.rotateClockwise == button ) { action = RotateCWPressed; } else if ( m_PlayerControls.joystick.rotateCounterClockwise == button ) { action = RotateCCWPressed; } } return action;}////// \brief Gets the current direction of joystick's X axis.////// \return -1 if the axis is at left, 0 if at center or 1 if at right.///inline int8_tJoystick::getAxisXDirection (void) const{ return m_AxisXDirection;}////// \brief Gets the current direction of joystick's Y axis.////// \return -1 if the axis is at top, 0 if at center or 1 if at bottom.///inline int8_tJoystick::getAxisYDirection (void) const{ return m_AxisYDirection;}////// \brief Tells if the controls were set.////// \return \a true if the player's controls were set by calling setControls()./// \a false otherwise.///inline boolJoystick::hasConfiguration (void) const{ return m_HasConfiguration;}////// \brief Checks the action for the specified joystick's motion.////// \param joystick The joystick index that had a motion event./// \param axis The axis index that had a motion./// \param value The motion's value./// \return The action that happened from the game's POV.///Joystick::ActionJoystick::motion (uint8_t joystick, uint8_t axis, int16_t value){ Action action = Nothing; if ( hasConfiguration () && Options::JoystickControls == m_PlayerControls.controlsType ) { if ( m_PlayerControls.joystick.index == joystick ) { if ( std::abs (m_PlayerControls.joystick.moveLeft) - 1 == axis || std::abs (m_PlayerControls.joystick.moveRight) - 1 == axis ) { if ( std::abs (value) > k_DeadZone ) { if ( (value < 0 && m_PlayerControls.joystick.moveLeft < 0 || value > 0 && m_PlayerControls.joystick.moveLeft > 0 ) && k_AxisLeft != getAxisXDirection () ) { setAxisXDirection (k_AxisLeft); action = LeftPressed; } else if ( (value > 0 && m_PlayerControls.joystick.moveRight > 0 || value < 0 && m_PlayerControls.joystick.moveRight < 0 ) && k_AxisRight != getAxisXDirection () ) { setAxisXDirection (k_AxisRight); action = RightPressed; } } else { if ( k_AxisRight == getAxisXDirection () ) { action = RightReleased; } else if ( k_AxisLeft == getAxisXDirection () ) { action = LeftReleased; } setAxisXDirection (k_AxisCenter); } } else if ( std::abs (m_PlayerControls.joystick.pushDown) - 1 == axis ) { if ( (m_PlayerControls.joystick.pushDown > 0 && value > k_DeadZone) || (m_PlayerControls.joystick.pushDown < 0 && value < -k_DeadZone) ) { if ( k_AxisBottom != getAxisYDirection () ) { setAxisYDirection (k_AxisBottom); action = DownPressed; } } else { if ( k_AxisBottom == getAxisYDirection () ) { action = DownReleased; } setAxisYDirection (k_AxisCenter); } } } } return action;}////// \brief Checks the action for the specified joystick's released button.////// \param joystick The joystick index that had a button pressed./// \param button The button released./// \return The action that happened from the game's POV.///Joystick::ActionJoystick::up (uint8_t joystick, uint8_t button){ Action action = Nothing; if ( hasConfiguration () && Options::JoystickControls == m_PlayerControls.controlsType && m_PlayerControls.joystick.index == joystick ) { if ( m_PlayerControls.joystick.rotateClockwise == button ) { action = RotateCWReleased; } else if ( m_PlayerControls.joystick.rotateCounterClockwise == button ) { action = RotateCCWReleased; } } return action;}////// \brief Sets the current joystick's X direction.////// \param direction The current direction of the axis: -1 if it's at left,/// 0 if it's at center, 1 if it's at right.///inline voidJoystick::setAxisXDirection (int8_t direction){ m_AxisXDirection = direction;}////// \brief Sets the current joystick's Y direction.////// \param direction The current direction of the axis: -1 if it's at top,/// 0 at center, 1 at bottom.///inline voidJoystick::setAxisYDirection (int8_t direction){ m_AxisYDirection = direction;}////// \brief Sets the player's controls.////// \param controls The player's controls.///voidJoystick::setControls (const Options::PlayerControls &controls){ m_PlayerControls = controls; m_HasConfiguration = true;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?