Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/20/24 01:28
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 645 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Capturing Keyboard Input #216150
07/15/08 12:50
07/15/08 12:50
Joined: Oct 2003
Posts: 1,550
United Kingdom
indiGLOW Offline OP
Serious User
indiGLOW  Offline OP
Serious User

Joined: Oct 2003
Posts: 1,550
United Kingdom
Is there a better way to capture all keyboard input other than using the key_for_str method?

I note that it does not capture ALL keys, cloning some of them over onto the numberpad and extra buttons?

TIA for any assistance


The Art of Conversation is dead : Discuss
Re: Capturing Keyboard Input [Re: indiGLOW] #216158
07/15/08 13:27
07/15/08 13:27
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
Xarthor Offline
Expert
Xarthor  Offline
Expert

Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
maybe try "on_anykey" and use the scan code from there?

example:
Code:
string key_name_str;

function key_Show(_ScanCode)
{
  str_for_key(key_name_str,_ScanCode);
  error(key_name_str);
}

on_anykey = key_Show;


Re: Capturing Keyboard Input [Re: Xarthor] #216178
07/15/08 15:53
07/15/08 15:53
Joined: Jul 2005
Posts: 1,930
Austria
Dark_samurai Offline
Serious User
Dark_samurai  Offline
Serious User

Joined: Jul 2005
Posts: 1,930
Austria
He means something like getch() which returns the correct char.

The problem with str_for_key is, that it ignores shift, only converts numbers and chars correct,...
So this function is total useless for a real input code.

Maybe with a plugin there is a possible solution, but getch() doesn't work with a plugin and I don't know any other functions like this.

Dark_Samurai


ANet - A stable and secure network plugin with multi-zone, unlimited players, voip, server-list features,... (for A7/A8)!
get free version
Re: Capturing Keyboard Input [Re: Dark_samurai] #216182
07/15/08 16:17
07/15/08 16:17
Joined: Feb 2006
Posts: 2,185
mpdeveloper_B Offline
Expert
mpdeveloper_B  Offline
Expert

Joined: Feb 2006
Posts: 2,185
Here's a simple keypress function:

Code:
function press_key(num)
{
	return(key_pressed(num));
}


I use it by mapping key codes (See the Manual's Keymapping section for scan codes) to varibles, like this:

Code:
var_info upp1 = 72;
var_info leftp1 = 75;
var_info rightp1 = 77;
var_info downp1 = 80;

///when used in a function you'd use it like this:
//in place of:
//if (key_cuu) { ....blah blah blah code }
//you would use:
//if (press_key(upp1)) { ....blah blah blah code }


If you want the key changing code, which includes strings that you can use to show which key is mapped, i'll post it too (the code captures all keyboard stuff and mouse, I should be able to modify it for joystick as well)

edit: oh yes, I also have Gamepad mapping which allows you to switch between the Joystick (gamepad) Digital and Analog, if you need that as well.


- aka Manslayer101
Re: Capturing Keyboard Input [Re: mpdeveloper_B] #216187
07/15/08 16:47
07/15/08 16:47
Joined: Jul 2005
Posts: 1,930
Austria
Dark_samurai Offline
Serious User
Dark_samurai  Offline
Serious User

Joined: Jul 2005
Posts: 1,930
Austria
I guess he want's to make an own inkey function because the standard inkey function is "not so good" to say it harmless ^^

Have you ever tried making an own inkey function using key_for_str?

Dark_Samurai


ANet - A stable and secure network plugin with multi-zone, unlimited players, voip, server-list features,... (for A7/A8)!
get free version
Re: Capturing Keyboard Input [Re: Dark_samurai] #216204
07/15/08 17:55
07/15/08 17:55
Joined: Jul 2007
Posts: 959
nl
F
flits Offline
User
flits  Offline
User
F

Joined: Jul 2007
Posts: 959
nl
maby somthing like this

function return_pressed_key()
{
if(key_a){return = 30;}
//until z
if(key_o){return = 11;}
//1-9
if(key_shift){return = 54;}//42
if(mouse_left){return = 280;}
//enz. enz enz
}


"empty"
Re: Capturing Keyboard Input [Re: flits] #216209
07/15/08 18:14
07/15/08 18:14
Joined: Oct 2003
Posts: 1,550
United Kingdom
indiGLOW Offline OP
Serious User
indiGLOW  Offline OP
Serious User

Joined: Oct 2003
Posts: 1,550
United Kingdom
Currently I am using str_for_key and key_for_str, and have also created a simple load / save, allowing key mapping to be done easily.

It just feels a little.... un-robust, with these keys missing. It also has some trouble with special keys and mouse input. So I would very much appreciate some alternative way of doing this.

Maybe there is a .DLL that better handles input?

@Flits: I am not sure how your code helps, please explain. Sorry for my noobish ness smile


The Art of Conversation is dead : Discuss
Re: Capturing Keyboard Input [Re: indiGLOW] #216218
07/15/08 19:04
07/15/08 19:04
Joined: Jul 2007
Posts: 959
nl
F
flits Offline
User
flits  Offline
User
F

Joined: Jul 2007
Posts: 959
nl
instead of using strings i use vars and then you can convert it to string ore use lastpressed

the great thing is you can use mouse buttons and yostick buttons


"empty"
Re: Capturing Keyboard Input [Re: flits] #216230
07/15/08 21:59
07/15/08 21:59
Joined: Feb 2006
Posts: 2,185
mpdeveloper_B Offline
Expert
mpdeveloper_B  Offline
Expert

Joined: Feb 2006
Posts: 2,185
so you do want to be able to change your mapping of keys?


- aka Manslayer101
Re: Capturing Keyboard Input [Re: mpdeveloper_B] #216587
07/17/08 19:05
07/17/08 19:05
Joined: Oct 2003
Posts: 1,550
United Kingdom
indiGLOW Offline OP
Serious User
indiGLOW  Offline OP
Serious User

Joined: Oct 2003
Posts: 1,550
United Kingdom
The simplest way to explain it, is by posting my code first.

Note I have posted the entire code below, including the read/write of the keymap ini, for persistant settings.

Code:
// Input Handling

// Default Keys
// Basic Movement & Camera/Flight Control
var k_moveForward;	
var k_moveBackward;	
var k_moveLeft;
var k_moveRight;
var k_moveUp;
var k_moveDown;

// Complex Character Movement
var k_leanLeft;
var k_leanRight;
var k_rollLeft;
var k_rollRight;
var k_takeCover;

// Move Varients
var k_sprintMove;
var k_toggleStance;
var k_jumpMove;


// Action Buttons
var k_interAction;
var k_fireMode;
var k_firePrimary;
var k_fireSecondary;
var k_throwObject;

// Hot Swap
var k_weapon1;	// Melee Slot
var k_weapon2; // Pistol Slot
var k_weapon3; // Assault Slot
var k_weapon4; // Grenade Slot
var k_weapon5; // Equip Slot (C4 etc)

var k_nextWeap; // Next Weapon
var k_prevWeap; // Previous Weapon


// Add more later


// Editor Quick Tools
define e_select = 2;			// 1
define e_move = 3;			// 2
define e_place = 4;			// 3
define e_link = 5;			// 4

// Editor Specific Keys
define e_Parachute = 25;


string keystring1;
string keystring2;
var keycode = 0;
font arial_font = "Arial",1,12;
panel keydisplay
{
	layer = 100;
	pos_x = 200;
	pos_y = 200;
	digits 100,-100,keystring1,arial_font,0,0; 
	digits 100,-90,keystring2,arial_font,0,0; 

	digits 100,50,5.3,arial_font,1,keycode;	

	flags = visible;
}


// Read "indiled.ini"

text mapping_ini{strings=300;} 


starter GetKeyMapping
{
	var i;

	txt_load(mapping_ini,"system\\keymap.ini"); 

	// Find & Assign 'Mode' - Reset Search Each Time
	i=0;while(str_cmpi(mapping_ini.string[i],"forward")!=1){i+=1;}
	i+=1;k_moveForward = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"backward")!=1){i+=1;}
	i+=1;k_moveBackward = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"stepleft")!=1){i+=1;}
	i+=1;k_moveLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"stepright")!=1){i+=1;}
	i+=1;k_moveRight = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"up")!=1){i+=1;}
	i+=1;k_moveUp = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"down")!=1){i+=1;}
	i+=1;k_moveDown = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"leanleft")!=1){i+=1;}
	i+=1;k_leanLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"leanright")!=1){i+=1;}
	i+=1;k_leanRight = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"rollleft")!=1){i+=1;}
	i+=1;k_rollLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"rollright")!=1){i+=1;}
	i+=1;k_rollRight = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"takecover")!=1){i+=1;}
	i+=1;k_takeCover = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"sprint")!=1){i+=1;}
	i+=1;k_sprintMove = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"togglestance")!=1){i+=1;}
	i+=1;k_toggleStance = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"jump")!=1){i+=1;}
	i+=1;k_jumpMove = key_for_str(mapping_ini.string[i]);


	i=0;while(str_cmpi(mapping_ini.string[i],"interaction")!=1){i+=1;}
	i+=1;k_interaction = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FireMode")!=1){i+=1;}
	i+=1;k_fireMode = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FirePrimary")!=1){i+=1;}
	i+=1;k_firePrimary = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FireSecondary")!=1){i+=1;}
	i+=1;k_firePrimary = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Throw")!=1){i+=1;}
	i+=1;k_throwObject = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"Slot1")!=1){i+=1;}
	i+=1;k_weapon1 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot2")!=1){i+=1;}
	i+=1;k_weapon2 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot3")!=1){i+=1;}
	i+=1;k_weapon3 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot4")!=1){i+=1;}
	i+=1;k_weapon4 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot5")!=1){i+=1;}
	i+=1;k_weapon5 = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"next")!=1){i+=1;}
	i+=1;k_nextWeap = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"prev")!=1){i+=1;}
	i+=1;k_prevWeap = key_for_str(mapping_ini.string[i]);

	WriteKeyMapping();

}

var_nsave ini_filehandle;
string _keystring;
function WriteKeyMapping
{
	ini_filehandle = file_open_write ("system\\keymap.ini");

	file_str_write (ini_filehandle,"[KeyMapping]");file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting
	file_str_write(ini_filehandle,"Forward,");str_for_key(_keystring,k_moveForward);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Backward,");str_for_key(_keystring,k_moveBackward);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"StepLeft,");str_for_key(_keystring,k_moveLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"StepRight,");str_for_key(_keystring,k_moveRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Up,");str_for_key(_keystring,k_moveUp);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Down,");str_for_key(_keystring,k_moveDown);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting:)
	file_str_write(ini_filehandle,"LeanLeft,");str_for_key(_keystring,k_leanLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"LeanRight,");str_for_key(_keystring,k_leanRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"RollLeft,");str_for_key(_keystring,k_rollLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"RollRight,");str_for_key(_keystring,k_rollRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"TakeCover,");str_for_key(_keystring,k_takeCover);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Sprint,");str_for_key(_keystring,k_sprintMove);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"ToggleStance,");str_for_key(_keystring,k_toggleStance);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Jump,");str_for_key(_keystring,k_jumpMove);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Interaction,");str_for_key(_keystring,k_interAction);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"FireMode,");str_for_key(_keystring,k_fireMode);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"FirePrimary,");str_for_key(_keystring,k_firePrimary);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"FireSecondary,");str_for_key(_keystring,k_fireSecondary);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Throw,");str_for_key(_keystring,k_throwObject);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Slot1,");str_for_key(_keystring,k_weapon1);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot2,");str_for_key(_keystring,k_weapon2);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot3,");str_for_key(_keystring,k_weapon3);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot4,");str_for_key(_keystring,k_weapon4);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot5,");str_for_key(_keystring,k_weapon5);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Next,");str_for_key(_keystring,k_nextWeap);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Prev,");str_for_key(_keystring,k_prevWeap);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_close (ini_filehandle); 

}

function KeyPress()
{
	keycode = key_lastpressed;

	// Catch Complex Keys
	if(str_for_key(keystring1,keycode)==null){
		str_cpy(keystring1, "Special Key");<<<<-- Here we find the major problem
	}
	
	// Quick Tools Links
	if(keycode == e_select){SelectTool();}
	if(keycode == e_move){MoveTool();}
	if(keycode == e_place){PlaceTool();}
	if(keycode == e_link){LinkTool();}

	// Editor Shortcuts
	if(keycode == e_parachute){Parachute();}
	
// E.G Get Movement Intention for Debug Cam
	if(keycode == k_moveForward){CamEnt.camforce_x += 1;}
	if(keycode == k_moveBackward){CamEnt.camforce_x -= 1;}
	if(keycode == k_moveRight){CamEnt.camforce_y -= 1;}
	if(keycode == k_moveLeft){CamEnt.camforce_y += 1;}	
	if(keycode == k_moveUp){CamEnt.camforce_z += 1;}
	if(keycode == k_moveDown){CamEnt.camforce_z -= 1;}
}

on_anykey = KeyPress;


The problem is capturing all keys, the key_mapping does not support the numpad keys, unless I am missing something here. It appears that the mapping lists 7,9,1 and 3 as the alt counterparts....

It's also worth throwing into the mix that my keypress approach doesn't seem to be a good approach, and I welcome any suggestions on how to improve / replace it.

Really I am trying to get a solid input and then link it to my camera movement and other functionality etc.

TIA for any help, and thanks to those who have helped already smile


The Art of Conversation is dead : Discuss
Page 1 of 2 1 2

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1