Ignore:
Timestamp:
Aug 15, 2012, 10:25:00 PM (8 years ago)
Author:
touky
Message:

Added a skeleton for Input Tracking & base idea for Touch/untouch mechanics.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/input/input.cpp

    r1710 r1751  
    3232 */
    3333
     34Array<ButtonSetting>    Input::InputAssocationList;
     35
    3436static class InputData
    3537{
     
    114116}
    115117
     118//--
     119
     120//---
     121//Internal : Updates the action status & timers
     122void Input::UpdateActionStatus(float seconds)
     123{
     124        for (int i = 0; i < InputAssocationList.Count(); i++)
     125        {
     126                ButtonSetting &CurIT = InputAssocationList[i];
     127
     128                CurIT.PrevStatus = CurIT.CurStatus;
     129                CurIT.CurStatus = Input::GetButtonState(CurIT.RawButtonId);
     130
     131                for (int j = 0; j < CurIT.AssociatedActionList.Count(); j++)
     132                {
     133                        ActionSetting &CurAS = CurIT.AssociatedActionList[j];
     134
     135                        if (CurAS.BufferedSince <= CurAS.BufferingTime)
     136                                CurAS.BufferedSince += seconds;
     137
     138                        if (CurIT.CurStatus && CurAS.BufferingTime >= .0f)
     139                                CurAS.BufferedSince = .0f;
     140                }
     141        }
     142
     143}
     144
     145//Helps link a software input Action-Id to an hardware input Button-Id.
     146void Input::LinkActionIdToButtonId(int ActionId, int ButtonId)
     147{
     148        int ITIdx = GetButtonSettingIdx(ButtonId);
     149        if (ITIdx == -1)
     150        {
     151                ITIdx = InputAssocationList.Count();
     152                InputAssocationList << ButtonSetting(ButtonId);
     153        }
     154
     155        ButtonSetting &CurIT = InputAssocationList[ITIdx];
     156
     157        int ASIdx = CurIT.GetActionSettingIdx(ActionId);
     158        if (ASIdx == -1)
     159        {
     160                ASIdx = CurIT.AssociatedActionList.Count();
     161                CurIT.AssociatedActionList << ActionSetting(ActionId);
     162        }
     163}
     164
     165//Helps unlink a software input Action-Id to an hardware input Button-Id.
     166void Input::UnlinkActionId(int ActionId)
     167{
     168        for (int i = 0; i < InputAssocationList.Count(); i++)
     169        {
     170                ButtonSetting &CurIT = InputAssocationList[i];
     171                int ASIdx = CurIT.GetActionSettingIdx(ActionId);
     172                if (ASIdx != -1)
     173                        CurIT.AssociatedActionList.Remove(ASIdx);
     174        }
     175}
     176
     177//Returns the current status of a given action
     178int Input::GetActionStatus(int ActionId)
     179{
     180        for (int i = 0; i < InputAssocationList.Count(); i++)
     181        {
     182                ButtonSetting &CurIT = InputAssocationList[i];
     183                int ASIdx = CurIT.GetActionSettingIdx(ActionId);
     184                if (ASIdx != -1)
     185                {
     186                        ActionSetting &CurAS = CurIT.AssociatedActionList[ASIdx];
     187                       
     188                        if (CurAS.BufferingTime >= .0f && CurAS.BufferedSince <= CurAS.BufferingTime)
     189                                return 1;
     190                        return 0;
     191                }
     192        }
     193        return 0;
     194}
     195
     196//Returns TRUE if action status when from Active to Inactive this frame
     197bool Input::WasActionJustReleased(int ActionId)
     198{
     199        for (int i = 0; i < InputAssocationList.Count(); i++)
     200        {
     201                ButtonSetting &CurIT = InputAssocationList[i];
     202                int ASIdx = CurIT.GetActionSettingIdx(ActionId);
     203                if (ASIdx != -1)
     204                {
     205                        if (!CurIT.CurStatus && CurIT.PrevStatus)
     206                                return TRUE;
     207                        return FALSE;
     208                }
     209        }
     210        return FALSE;
     211}
     212
     213//--
    116214void Input::TrackMouse(WorldEntity *e)
    117215{
Note: See TracChangeset for help on using the changeset viewer.