Difference between revisions of "HPL3/SOMA/Scripting/Input Types"
(Rough outline of InputHandler_types script) |
m (Possible mod uses ("why should I care") section added) |
||
Line 1: | Line 1: | ||
<br /> | <br /> | ||
− | == What are Input types? == | + | ==What are Input types?== |
Input types ''(InputHandler_types.hps)'' is a script consisting of two Shared '''Enum classes''' which can be considered as a list of possible actions. | Input types ''(InputHandler_types.hps)'' is a script consisting of two Shared '''Enum classes''' which can be considered as a list of possible actions. | ||
Line 8: | Line 8: | ||
Names of these classes are somewhat self-explanatory: | Names of these classes are somewhat self-explanatory: | ||
− | == eAction == | + | ==eAction== |
- Button-like action (fixed step) | - Button-like action (fixed step) | ||
− | === Handler === | + | ===Handler=== |
These interactions are directly handled by ''"OnAction ( alAction, abPressed )"''. However the game some of these actions later converts to Analog type and then handles just like [[Input Types#eAnalogTypes|eAnalogTypes]] | These interactions are directly handled by ''"OnAction ( alAction, abPressed )"''. However the game some of these actions later converts to Analog type and then handles just like [[Input Types#eAnalogTypes|eAnalogTypes]] | ||
− | ==== Params: ==== | + | ====Params:==== |
− | ===== (int) alAction ===== | + | =====(int) alAction===== |
− | * Number representation <sub>(?of input type position?)</sub> in eAction | + | *Number representation <sub>(?of input type position?)</sub> in eAction |
− | ** addressable using one of the '''eAction enum''' entries | + | **addressable using one of the '''eAction enum''' entries |
− | ===== (bool) abPressed ===== | + | =====(bool) abPressed===== |
− | * Has it been pressed? | + | *Has it been pressed? |
− | ==== Typical use ==== | + | ====Typical use==== |
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
void OnAction(int alAction, bool abPressed) | void OnAction(int alAction, bool abPressed) | ||
Line 39: | Line 39: | ||
</syntaxhighlight>code that takes care of FlashLight. <u>(- script/player/Player.hps)</u> | </syntaxhighlight>code that takes care of FlashLight. <u>(- script/player/Player.hps)</u> | ||
− | == eAnalogTypes == | + | ==eAnalogTypes== |
- Joystick-like action (Analog step) | - Joystick-like action (Analog step) | ||
− | === Handler === | + | ===Handler=== |
These are being handled by functions ''"OnAnalogInput ( alAnalogID, avAmount )"'' . | These are being handled by functions ''"OnAnalogInput ( alAnalogID, avAmount )"'' . | ||
− | ==== Params: ==== | + | ====Params:==== |
− | * (int) alAnalogId | + | *(int) alAnalogId |
− | ** number representation <sub>(?of input type position?)</sub> in eAnalogTypes | + | **number representation <sub>(?of input type position?)</sub> in eAnalogTypes |
− | *** addressable using one of the '''eAnalogTypes enum''' entries | + | ***addressable using one of the '''eAnalogTypes enum''' entries |
− | * (cVector3f) avAmount | + | *(cVector3f) avAmount |
− | ** 3D vector <sub>(?Basket class?)</sub> with parameters: | + | **3D vector <sub>(?Basket class?)</sub> with parameters: |
− | *** X | + | ***X |
− | *** Y | + | ***Y |
− | *** Z | + | ***Z |
− | ** Values of [-1.0f ; 1.0f] | + | **Values of [-1.0f ; 1.0f] |
− | ==== Typical use ==== | + | ====Typical use==== |
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
void OnAnalogInput(int alAnalogId, const cVector3f &in avAmount) | void OnAnalogInput(int alAnalogId, const cVector3f &in avAmount) | ||
Line 93: | Line 93: | ||
</syntaxhighlight>Here you can see also already mentioned analog type ''(eAnalogType_Move)'' that was earlier sampled and quantized from ''eAction_Forward / _Backward / _Right / _Left'', by other script. <u>(- script/player/Player.hps)</u> | </syntaxhighlight>Here you can see also already mentioned analog type ''(eAnalogType_Move)'' that was earlier sampled and quantized from ''eAction_Forward / _Backward / _Right / _Left'', by other script. <u>(- script/player/Player.hps)</u> | ||
− | + | == Uses == | |
+ | This class could be considered a Weak Spot in case you ever wanted to do some new player implementations or to make your game controllable by virtually anything. | ||
− | + | With a slight combination of [[Input Handler]] and [[Player Overview|Player]] scripts even [https://youtu.be/ZS0fIS2qrSA implementing a Microphone is possible.] |
Revision as of 02:54, 14 September 2021
Contents
What are Input types?
Input types (InputHandler_types.hps) is a script consisting of two Shared Enum classes which can be considered as a list of possible actions.
?Be sure to use them correctly as trying to add own Enum Class while trying to use them as a part of gameplay should not work.?
Names of these classes are somewhat self-explanatory:
eAction
- Button-like action (fixed step)
Handler
These interactions are directly handled by "OnAction ( alAction, abPressed )". However the game some of these actions later converts to Analog type and then handles just like eAnalogTypes
Params:
(int) alAction
- Number representation (?of input type position?) in eAction
- addressable using one of the eAction enum entries
(bool) abPressed
- Has it been pressed?
Typical use
void OnAction(int alAction, bool abPressed)
{
///////////////////////////////////
// Flashlight
if(abPressed && alAction==eAction_Flashlight)
{
SetFlashlightOn(!mbFlashlightOn);
}
}
code that takes care of FlashLight. (- script/player/Player.hps)
eAnalogTypes
- Joystick-like action (Analog step)
Handler
These are being handled by functions "OnAnalogInput ( alAnalogID, avAmount )" .
Params:
- (int) alAnalogId
- number representation (?of input type position?) in eAnalogTypes
- addressable using one of the eAnalogTypes enum entries
- number representation (?of input type position?) in eAnalogTypes
- (cVector3f) avAmount
- 3D vector (?Basket class?) with parameters:
- X
- Y
- Z
- Values of [-1.0f ; 1.0f]
- 3D vector (?Basket class?) with parameters:
Typical use
void OnAnalogInput(int alAnalogId, const cVector3f &in avAmount)
{
//....................
//////////////////////
// Move
if(alAnalogId == eAnalogType_Move || alAnalogId == eAnalogType_GamepadMove)
{
iCharacterBody@ pCharBody = mBaseObj.GetCharacterBody();
float fLength = avAmount.Length();
if(fLength > 0.1f)
{
//////////////////////////////
// Lean
if(mbAnalogLeanPressed)
{
Lean(avAmount.x);
}
//////////////////////////////
// Movement
else
{
if(cMath_Abs(avAmount.y) > 0.001f)
pCharBody.Move(eCharDir_Forward, avAmount.y);
if(cMath_Abs(avAmount.x) > 0.001f)
pCharBody.Move(eCharDir_Right, avAmount.x);
}
}
}
//....................
}
Here you can see also already mentioned analog type (eAnalogType_Move) that was earlier sampled and quantized from eAction_Forward / _Backward / _Right / _Left, by other script. (- script/player/Player.hps)
Uses
This class could be considered a Weak Spot in case you ever wanted to do some new player implementations or to make your game controllable by virtually anything.
With a slight combination of Input Handler and Player scripts even implementing a Microphone is possible.