2006-03-20 17:12:09 +00:00
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ( " PARALLAX " ) . PARALLAX , IN DISTRIBUTING THE CODE TO
END - USERS , AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN , GRANTS A
ROYALTY - FREE , PERPETUAL LICENSE TO SUCH END - USERS FOR USE BY SUCH END - USERS
IN USING , DISPLAYING , AND CREATING DERIVATIVE WORKS THEREOF , SO LONG AS
SUCH USE , DISPLAY OR CREATION IS FOR NON - COMMERCIAL , ROYALTY OR REVENUE
FREE PURPOSES . IN NO EVENT SHALL THE END - USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE - BEARING PURPOSES . THE END - USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE .
COPYRIGHT 1993 - 1999 PARALLAX SOFTWARE CORPORATION . ALL RIGHTS RESERVED .
*/
/*
*
* Prototypes for reading controls
*
*/
# ifndef _KCONFIG_H
# define _KCONFIG_H
# include "config.h"
2011-02-02 00:36:49 +00:00
# include "event.h"
2011-01-04 10:43:37 +00:00
# include "key.h"
# include "joy.h"
# include "mouse.h"
2013-11-09 23:17:28 +00:00
# include "dxxsconf.h"
2006-03-20 17:12:09 +00:00
2012-11-11 22:12:51 +00:00
# ifdef __cplusplus
2013-11-09 23:17:28 +00:00
# include <vector>
2013-12-21 05:12:38 +00:00
# include "compiler-array.h"
2013-11-09 23:17:28 +00:00
2013-11-08 23:10:42 +00:00
struct control_info {
template < typename T >
struct ramp_controls_t
{
T key_pitch_forward ,
key_pitch_backward ,
key_heading_left ,
key_heading_right ,
key_slide_left ,
key_slide_right ,
key_slide_up ,
key_slide_down ,
key_bank_left ,
key_bank_right ;
} ;
2013-11-26 22:46:48 +00:00
struct state_controls_t : public ramp_controls_t < ubyte >
{
ubyte btn_slide_left , btn_slide_right ,
btn_slide_up , btn_slide_down ,
btn_bank_left , btn_bank_right ,
slide_on , bank_on ,
accelerate , reverse ,
cruise_plus , cruise_minus , cruise_off ,
rear_view ,
fire_primary , fire_secondary , fire_flare , drop_bomb ,
automap ,
cycle_primary , cycle_secondary , select_weapon ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_II)
2013-11-26 22:46:48 +00:00
ubyte toggle_bomb ,
afterburner , headlight , energy_to_shield ;
2013-03-03 01:03:33 +00:00
# endif
2013-11-26 22:46:48 +00:00
} ;
ramp_controls_t < float > down_time ; // to scale movement depending on how long the key is pressed
fix pitch_time , vertical_thrust_time , heading_time , sideways_thrust_time , bank_time , forward_thrust_time ;
state_controls_t state ; // to scale movement for keys only we need them to be separate from joystick/mouse buttons
2013-01-03 15:57:24 +00:00
fix joy_axis [ JOY_MAX_AXES ] , raw_joy_axis [ JOY_MAX_AXES ] , mouse_axis [ 3 ] , raw_mouse_axis [ 3 ] ;
2013-11-08 23:10:42 +00:00
} ;
2006-03-20 17:12:09 +00:00
2010-02-21 01:25:27 +00:00
# define CONTROL_USING_JOYSTICK 1
# define CONTROL_USING_MOUSE 2
2011-01-04 10:43:37 +00:00
# define MOUSEFS_DELTA_RANGE 512
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_I)
2013-08-16 21:47:00 +00:00
# define MAX_DXX_REBIRTH_CONTROLS 30
2013-03-03 01:03:33 +00:00
# define MAX_CONTROLS 50
# elif defined(DXX_BUILD_DESCENT_II)
2013-08-16 21:47:00 +00:00
# define MAX_DXX_REBIRTH_CONTROLS 30
2006-03-20 17:12:09 +00:00
# define MAX_CONTROLS 60 // there are actually 48, so this leaves room for more
2013-03-03 01:03:33 +00:00
# endif
2006-03-20 17:12:09 +00:00
2009-12-02 13:49:54 +00:00
extern control_info Controls ;
2011-02-02 00:36:49 +00:00
extern void kconfig_read_controls ( d_event * event , int automap_flag ) ;
2013-06-08 22:24:17 +00:00
extern void kconfig ( int n , const char * title ) ;
2009-12-02 13:49:54 +00:00
2013-07-21 00:03:08 +00:00
# if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II)
2013-08-16 21:47:00 +00:00
extern const ubyte DefaultKeySettingsRebirth [ MAX_DXX_REBIRTH_CONTROLS ] ;
2012-07-22 23:17:54 +00:00
extern const ubyte DefaultKeySettings [ 3 ] [ MAX_CONTROLS ] ;
2013-07-21 00:03:08 +00:00
# endif
2006-03-20 17:12:09 +00:00
extern void kc_set_controls ( ) ;
//set the cruise speed to zero
extern void reset_cruise ( void ) ;
2012-11-11 00:14:30 +00:00
extern fix Cruise_speed ;
2012-11-11 00:12:17 +00:00
2013-11-09 23:17:28 +00:00
template < std : : size_t N >
struct joystick_text_length
{
enum { value = ( ( N > = 10 ) ? ( joystick_text_length < N / 10 > : : value + 1 ) : 1 ) } ;
} ;
template < >
struct joystick_text_length < 0 >
{
enum { value = 1 } ;
} ;
template < std : : size_t N >
class joystick_text_t
{
typedef std : : vector < array < char , N > > vector_type ;
typedef typename vector_type : : size_type size_type ;
typedef typename vector_type : : reference reference ;
vector_type text ;
public :
void clear ( ) { text . clear ( ) ; }
size_type size ( ) const { return text . size ( ) ; }
void resize ( size_type s ) { text . resize ( s ) ; }
reference operator [ ] ( size_type s ) { return text . at ( s ) ; }
} ;
class joyaxis_text_t : public joystick_text_t < sizeof ( " J A " ) + joystick_text_length < MAX_JOYSTICKS > : : value + joystick_text_length < MAX_AXES_PER_JOYSTICK > : : value >
{
} ;
2013-11-09 23:31:19 +00:00
class joybutton_text_t : public joystick_text_t < sizeof ( " J H " ) + joystick_text_length < MAX_JOYSTICKS > : : value + joystick_text_length < MAX_BUTTONS_PER_JOYSTICK > : : value >
{
} ;
extern joybutton_text_t joybutton_text ;
2013-11-09 23:17:28 +00:00
extern joyaxis_text_t joyaxis_text ;
2012-11-11 22:12:51 +00:00
# endif
2006-03-20 17:12:09 +00:00
# endif /* _KCONFIG_H */