|
- //
- // Lol Engine
- //
- // Copyright: (c) 2010-2013 Benjamin Litzelmann
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the Do What The Fuck You Want To
- // Public License, Version 2, as published by Sam Hocevar. See
- // http://www.wtfpl.net/ for more details.
- //
-
- #ifdef LOL_INPUT_V2
-
- #if defined HAVE_CONFIG_H
- # include "config.h"
- #endif
-
- #include "core.h"
-
- namespace lol
- {
-
- ///////////////////////////////////////////////////////////////////////////////
- // KeyBinding
-
- void KeyBinding::Bind(const char* device_name, const char* key_name)
- {
- m_device = InputDevice::Get(device_name);
- if (!m_device)
- {
- Log::Warn("Trying to bind controller to device %s which doesn't exist", device_name);
- return;
- }
-
- m_keyindex = m_device->GetKeyIndex(key_name);
-
- if (m_keyindex < 0)
- {
- Log::Warn("Trying to bind controller to key %s.%s which doesn't exist", device_name, key_name);
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- // AxisBinding
-
- void AxisBinding::Bind(const char* device_name, const char* axis_name)
- {
- m_device = InputDevice::Get(device_name);
- if (!m_device)
- {
- Log::Warn("Trying to bind controller to device %s which doesn't exist", device_name);
- return;
- }
-
- m_axisindex = m_device->GetAxisIndex(axis_name);
-
- if (m_axisindex < 0)
- {
- Log::Warn("Trying to bind controller to axis %s.%s which doesn't exist", device_name, axis_name);
- }
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////
- // Controller
-
- Array<Controller*> Controller::controllers;
-
- Controller::Controller(int nb_keys, int nb_axis)
- {
- m_gamegroup = GAMEGROUP_BEFORE;
- m_nb_keys = nb_keys;
- m_nb_axis = nb_axis;
- m_keys = new KeyBinding[m_nb_keys];
- m_axis = new AxisBinding[m_nb_axis];
- m_activate_nextframe = false;
- m_deactivate_nextframe = false;
- m_active = false;
- controllers.Push(this);
- }
-
- Controller::~Controller()
- {
- for (int i = 0; i < controllers.Count(); ++i)
- {
- if (controllers[i] == this)
- {
- controllers.Remove(i);
- break;
- }
- }
- }
-
- void Controller::TickGame(float seconds)
- {
- Entity::TickGame(seconds);
-
- for (int i = 0; i < m_nb_keys; ++i)
- {
- m_keys[i].Update();
- }
-
- for (int i = 0; i < m_nb_axis; ++i)
- {
- m_axis[i].Update();
- }
-
- if (m_activate_nextframe)
- m_active = true;
-
- if (m_deactivate_nextframe)
- m_active = false;
-
- m_activate_nextframe = false;
- m_deactivate_nextframe = false;
- }
-
- void Controller::Activate()
- {
- m_activate_nextframe = true;
- m_deactivate_nextframe = false;
- }
-
- void Controller::Deactivate()
- {
- m_deactivate_nextframe = true;
- m_activate_nextframe = false;
- }
-
- Array<Controller*> Controller::DeactivateAll()
- {
- Array<Controller*> result;
-
- for (int i = 0; i < controllers.Count(); ++i)
- {
- if (controllers[i]->m_active || controllers[i]->m_activate_nextframe)
- {
- result.Push(controllers[i]);
- controllers[i]->Deactivate();
- }
- }
-
- return result;
- }
-
- } /* namespace lol */
-
- #endif // LOL_INPUT_V2
|