blob: d143843026821f10bc0d3d3511342b6092eac6a1 [file] [log] [blame]
/*
* Copyright (C) 2011, Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
#include "modules/gamepad/Gamepad.h"
namespace blink {
Gamepad::Gamepad()
: m_index(0)
, m_timestamp(0)
, m_displayId(0)
{
}
Gamepad::~Gamepad()
{
}
void Gamepad::setAxes(unsigned count, const double* data)
{
m_axes.resize(count);
if (count)
std::copy(data, data + count, m_axes.begin());
}
void Gamepad::setButtons(unsigned count, const WebGamepadButton* data)
{
if (m_buttons.size() != count) {
m_buttons.resize(count);
for (unsigned i = 0; i < count; ++i)
m_buttons[i] = GamepadButton::create();
}
for (unsigned i = 0; i < count; ++i) {
m_buttons[i]->setValue(data[i].value);
m_buttons[i]->setPressed(data[i].pressed);
m_buttons[i]->setTouched(data[i].touched || data[i].pressed || (data[i].value > 0.0f));
}
}
void Gamepad::setPose(const WebGamepadPose& pose)
{
if (!pose.notNull) {
if (m_pose)
m_pose = nullptr;
return;
}
if (!m_pose)
m_pose = GamepadPose::create();
m_pose->setPose(pose);
}
void Gamepad::setHand(const WebGamepadHand& hand)
{
switch (hand) {
case GamepadHandNone:
m_hand = "";
break;
case GamepadHandLeft:
m_hand = "left";
break;
case GamepadHandRight:
m_hand = "right";
break;
default:
NOTREACHED();
}
}
DEFINE_TRACE(Gamepad)
{
visitor->trace(m_buttons);
visitor->trace(m_pose);
}
} // namespace blink