当前位置: 首页>>代码示例>>C++>>正文


C++ ControllerMessage::get_abs_float方法代码示例

本文整理汇总了C++中ControllerMessage::get_abs_float方法的典型用法代码示例。如果您正苦于以下问题:C++ ControllerMessage::get_abs_float方法的具体用法?C++ ControllerMessage::get_abs_float怎么用?C++ ControllerMessage::get_abs_float使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ControllerMessage的用法示例。


在下文中一共展示了ControllerMessage::get_abs_float方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

void
Acc2AxisModifier::update(int msec_delta, ControllerMessage& msg, const ControllerMessageDescriptor& desc)
{
  float ax = msg.get_abs_float(m_acc_x);
  float ay = msg.get_abs_float(m_acc_y);
  float az = msg.get_abs_float(m_acc_z);

  float rx = (atan2f(az, ax) - static_cast<float>(M_PI)/2.0f) * -1.0f;
  float ry = (atan2f(az, ay) - static_cast<float>(M_PI)/2.0f) * -1.0f;

  // FIXME: to simplistic, need a better way to normalize the angles
  // normalize the range from [-pi/2, 3/2pi] to [-pi,pi]
  if (rx > static_cast<float>(M_PI))
    rx -= static_cast<float>(M_PI*2.0);

  if (ry > static_cast<float>(M_PI))
    ry -= static_cast<float>(M_PI*2.0);

  ry *= -1.0f;

  // full range is M_PI, but we use M_PI/2 as beyond that point
  // precision is lacking
  rx = static_cast<float>(rx/(M_PI/2.0));
  ry = static_cast<float>(ry/(M_PI/2.0));

  rx = Math::clamp(-1.0f, rx, 1.0f);
  ry = Math::clamp(-1.0f, ry, 1.0f);

  //log_tmp("Rot: " /*<< ax << " " << ay << " " << az << " -- " */<< rx << " " << ry);

  msg.set_abs_float(m_axis_x, rx);
  msg.set_abs_float(m_axis_y, ry);
}
开发者ID:Ape,项目名称:xboxdrv,代码行数:33,代码来源:acc2axis_modifier.cpp

示例2: sqrtf

void
RotateAxisModifier::update(int msec_delta, ControllerMessage& msg, const ControllerMessageDescriptor& desc)
{
    float x = msg.get_abs_float(m_xaxis);
    float y = msg.get_abs_float(m_yaxis);

    if (m_mirror)
    {
        x = -x;
    }

    float length = sqrtf(x*x + y*y);
    float angle = atan2f(y, x) + m_angle;

    msg.set_abs_float(m_xaxis, cosf(angle) * length);
    msg.set_abs_float(m_yaxis, sinf(angle) * length);
}
开发者ID:roman5566,项目名称:xboxdrv,代码行数:17,代码来源:rotate_axis_modifier.cpp

示例3: if

void
SplitAxisModifier::update(int msec_delta, ControllerMessage& msg, const ControllerMessageDescriptor& desc)
{
  float value = msg.get_abs_float(m_axis);
  if (value < 0)
  {
    msg.set_abs_float(m_out_lhs, -value * 2.0f - 1.0f);
    msg.set_abs_float(m_out_rhs, -1.0f);
  }
  else if (value > 0)
  {
    msg.set_abs_float(m_out_lhs, -1.0f);
    msg.set_abs_float(m_out_rhs, value * 2.0f - 1.0f);
  }
  else
  {
    msg.set_abs_float(m_out_lhs, -1.0f);
    msg.set_abs_float(m_out_rhs, -1.0f);
  }
}
开发者ID:mrj10,项目名称:xboxdrv,代码行数:20,代码来源:split_axis_modifier.cpp

示例4: get_float

 float get_float(const ControllerMessage& msg)
 {
   return msg.get_abs_float(get_abs());
 }
开发者ID:Ape,项目名称:xboxdrv,代码行数:4,代码来源:abs_port.hpp


注:本文中的ControllerMessage::get_abs_float方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。