2006-03-20 17:12:09 +00:00
/*
2014-06-01 17:55:23 +00:00
* Portions of this file are copyright Rebirth contributors and licensed as
* described in COPYING . txt .
* Portions of this file are copyright Parallax Software and licensed
* according to the Parallax license below .
* See COPYING . txt for license details .
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
*
*/
2015-04-19 04:18:51 +00:00
# pragma once
2006-03-20 17:12:09 +00:00
2011-01-04 10:43:37 +00:00
# include "joy.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>
2015-12-05 22:57:24 +00:00
# include "fwd-event.h"
2013-12-21 05:12:38 +00:00
# include "compiler-array.h"
2015-04-19 04:18:52 +00:00
# include "compiler-type_traits.h"
2013-11-09 23:17:28 +00:00
2015-09-26 21:17:12 +00:00
# if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II)
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 ;
} ;
Only respawn when the player presses fire
Only respawn when the player presses a fire key/button (primary,
secondary, or flare). Only clear primary, second, flare, and bomb when
respawning. This allows dead players to use the automap or change their
camera views.
This is a necessary step to flushing only the firing inputs on respawn,
as requested by Mako88 in
<https://github.com/dxx-rebirth/dxx-rebirth/issues/104>. Currently,
inputs are flushed again by the activation of the game window, so
respawn still flushes all inputs.
#1 0x00005555555cee19 in game_flush_inputs () at similar/main/game.cpp:374
#2 game_handler (event=...) at similar/main/game.cpp:1114
#3 0x0000555555576113 in window_send_event (wind=..., event=...) at common/arch/sdl/window.cpp:208
#4 0x000055555557627b in WINDOW_SEND_EVENT (file=0x5555556dc126 "common/arch/sdl/window.cpp", e=0x5555556dc141 "EVENT_WINDOW_ACTIVATED", line=179, event=..., w=...) at common/include/window.h:111
#5 window_set_visible (w=..., visible=visible@entry=1) at common/arch/sdl/window.cpp:179
#6 0x00005555555e90f5 in window_set_visible (visible=1, wind=<optimized out>) at common/include/window.h:90
#7 DoPlayerDead () at similar/main/gameseq.cpp:1479
#8 0x000055555563ed65 in dead_player_frame () at similar/main/object.cpp:1486
#9 0x00005555555cf4df in GameProcessFrame () at similar/main/game.cpp:1329
#10 game_handler (event=...) at similar/main/game.cpp:1157
2015-06-20 16:16:43 +00:00
struct fire_controls_t
{
uint8_t fire_primary , fire_secondary , fire_flare , drop_bomb ;
} ;
struct state_controls_t :
public fire_controls_t ,
public ramp_controls_t < ubyte >
2013-11-26 22:46:48 +00:00
{
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 ,
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 ;
2015-09-24 14:31:10 +00:00
fix excess_pitch_time , excess_vertical_thrust_time , excess_heading_time , excess_sideways_thrust_time , excess_bank_time , excess_forward_thrust_time ;
2013-11-26 22:46:48 +00:00
state_controls_t state ; // to scale movement for keys only we need them to be separate from joystick/mouse buttons
2015-04-02 02:36:52 +00:00
array < fix , 3 > mouse_axis , raw_mouse_axis ;
2015-11-01 21:15:40 +00:00
# if MAX_AXES_PER_JOYSTICK
array < fix , JOY_MAX_AXES > joy_axis , raw_joy_axis ;
# endif
2013-11-08 23:10:42 +00:00
} ;
2006-03-20 17:12:09 +00:00
2015-09-26 21:17:12 +00:00
extern control_info Controls ;
# endif
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
2014-10-04 21:47:13 +00:00
extern void kconfig_read_controls ( const d_event & event , int automap_flag ) ;
2015-11-01 21:15:38 +00:00
enum class kconfig_type
{
keyboard ,
2015-11-01 21:15:40 +00:00
# if MAX_JOYSTICKS
2015-11-01 21:15:38 +00:00
joystick ,
2015-11-01 21:15:40 +00:00
# endif
2015-11-01 21:15:38 +00:00
mouse ,
rebirth ,
} ;
void kconfig ( kconfig_type n ) ;
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)
2014-08-26 02:59:01 +00:00
extern const array < array < ubyte , MAX_CONTROLS > , 3 > DefaultKeySettings ;
extern const array < ubyte , MAX_DXX_REBIRTH_CONTROLS > DefaultKeySettingsRebirth ;
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
2015-11-01 21:15:40 +00:00
# if MAX_JOYSTICKS
2013-11-09 23:17:28 +00:00
template < std : : size_t N >
2015-04-19 04:18:52 +00:00
struct joystick_text_length : tt : : integral_constant < std : : size_t , ( N > = 10 ) ? ( joystick_text_length < N / 10 > : : value + 1 ) : 1 >
2013-11-09 23:17:28 +00:00
{
} ;
template < >
2015-04-19 04:18:52 +00:00
struct joystick_text_length < 0 > : tt : : integral_constant < std : : size_t , 1 >
2013-11-09 23:17:28 +00:00
{
} ;
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 ) ; }
} ;
2015-11-01 21:15:40 +00:00
# if MAX_AXES_PER_JOYSTICK
2013-11-09 23:17:28 +00:00
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 >
{
} ;
2015-11-01 21:15:40 +00:00
extern joyaxis_text_t joyaxis_text ;
# endif
2013-11-09 23:17:28 +00:00
2015-11-01 21:15:40 +00:00
# if MAX_BUTTONS_PER_JOYSTICK || MAX_HATS_PER_JOYSTICK
class joybutton_text_t : public joystick_text_t < sizeof ( " J H " ) + joystick_text_length < MAX_JOYSTICKS > : : value + joystick_text_length < MAX_HATS_PER_JOYSTICK > : : value >
2013-11-09 23:31:19 +00:00
{
} ;
extern joybutton_text_t joybutton_text ;
2015-11-01 21:15:40 +00:00
# endif
# endif
2012-11-11 22:12:51 +00:00
# endif