Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SCA_KeyboardSensor.h « GameLogic « gameengine « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f9de2a0e715572fb8a11ecf2c7ca422a7770fb6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**
 * $Id$
 *
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
 *
 * 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. The Blender
 * Foundation also sells licenses for use in proprietary software under
 * the Blender License.  See http://www.blender.org/BL/ for information
 * about this.
 *
 * 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.
 *
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL/BL DUAL LICENSE BLOCK *****
 * Sensor for keyboard input
 */

#ifndef __KX_KEYBOARDSENSOR
#define __KX_KEYBOARDSENSOR

#include "SCA_ISensor.h"
#include "BoolValue.h"
#include <list>

/**
 * The keyboard sensor listens to the keyboard, and passes on events
 * on selected keystrokes. It has an alternate mode in which it logs
 * keypresses to a property. Note that these modes are not mutually
 * exclusive.  */
class SCA_KeyboardSensor : public SCA_ISensor
{
	Py_Header;
	class SCA_KeyboardManager*	m_pKeyboardMgr;


	/**
	 * the key this sensor is sensing for
	 */
	int							m_hotkey;
	short int					m_qual,m_qual2;
	short int					m_val;
	/**
	 * If this toggle is true, all incoming key events generate a
	 * response.
	 */
	bool						m_bAllKeys;

	/**
	 * The name of the property to which logged text is appended. If
	 * this property is not defined, no logging takes place.
	 */
	STR_String	m_targetprop;
	/**
	 * The property that indicates whether or not to log text when in
	 * loggin mode. If the property equals 0, no loggin is done. For
	 * all other values, logging is active. Logging can only become
	 * active if there is a property to log to. Logging is independant
	 * from hotkey settings. */
	STR_String	m_toggleprop;

	/**
	 * Log the keystrokes from the current input buffer.
	 */
	void LogKeystrokes(void);
	
	/**
	 * Adds this key-code to the target prop.
	 */
	void AddToTargetProp(int keyIndex);

	/**
	 * Determine whether this character can be printed. We cannot use
	 * the library functions here, because we need to test our own
	 * keycodes. */
	bool IsPrintable(int keyIndex);

	/**
	 * Transform keycodes to something printable.
	 */
	char ToCharacter(int keyIndex, bool shifted);

	/**
	 * Tests whether this is a delete key.
	 */	
	bool IsDelete(int keyIndex);

	/**
	 * Tests whether shift is pressed.
	 */
	bool IsShifted(void);
	
public:
	SCA_KeyboardSensor(class SCA_KeyboardManager* keybdmgr,
					   short int hotkey,
					   short int qual,
					   short int qual2,
					   bool bAllKeys,
					   const STR_String& targetProp,
					   const STR_String& toggleProp,
					   SCA_IObject* gameobj,
					   PyTypeObject* T=&Type );
	virtual ~SCA_KeyboardSensor();
	virtual CValue* GetReplica();

	short int GetHotkey();
	virtual bool Evaluate(CValue* event);
	virtual bool IsPositiveTrigger();
	bool	TriggerOnAllKeys();

	/* --------------------------------------------------------------------- */
	/* Python interface ---------------------------------------------------- */
	/* --------------------------------------------------------------------- */

	virtual PyObject*  _getattr(char *attr);


	PyObject* PySetAllMode(PyObject* self, 
			       PyObject* args, 
			       PyObject* kwds);
	static PyObject* sPySetAllMode(PyObject* self, 
				       PyObject* args, 
				       PyObject* kwds);
	
	/** 1. GetKey : check which key this sensor looks at */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetKey);
	/** 2. SetKey: change the key to look at */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetKey);
	/** 3. GetHold1 : set the first bucky bit */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetHold1);
	/** 4. SetHold1: change the first bucky bit */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetHold1);
	/** 5. GetHold2 : set the second bucky bit */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetHold2);
	/** 6. SetHold2: change the second bucky bit */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetHold2);
	/** 9. GetPressedKeys: */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetPressedKeys); 
	/** 9. GetCurrrentlyPressedKeys: */
	KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetCurrentlyPressedKeys); 
};

#endif //__KX_KEYBOARDSENSOR