Exemplo n.º 1
0
bool UInputBlueprintLibrary::K2_RebindActionKey(FValorActionInputBinding OriginalBinding, FValorActionInputBinding NewBinding)
{
	UInputSettings* Settings = const_cast<UInputSettings*>(GetDefault<UInputSettings>());
	if (!Settings)
	{
		return false;
	}

	TArray<FInputActionKeyMapping>& ActionMappings = Settings->ActionMappings;

	bool bFound = false;
	for (FInputActionKeyMapping& ActionKeyMapping : ActionMappings)
	{
		if (ActionKeyMapping.ActionName.ToString() == OriginalBinding.ActionName && ActionKeyMapping.Key == OriginalBinding.Key)
		{
			UpdateActionMapping(ActionKeyMapping, NewBinding);
			bFound = true;
			break;
		}
	}

	if (bFound)
	{
		const_cast<UInputSettings*>(Settings)->SaveKeyMappings();

		for (TObjectIterator<UPlayerInput> It; It; ++It)
		{
			It->ForceRebuildingKeyMaps(true);
		}
	}
	return bFound;
}
Exemplo n.º 2
0
void ezVirtualThumbStick::UpdateInputSlotValues()
{
  m_bIsActive = false;

  m_InputSlotValues[m_szOutputLeft ]  = 0.0f;
  m_InputSlotValues[m_szOutputRight]  = 0.0f;
  m_InputSlotValues[m_szOutputUp   ]  = 0.0f;
  m_InputSlotValues[m_szOutputDown ]  = 0.0f;

  if (!m_bEnabled)
  {
    ezInputManager::RemoveInputAction(GetDynamicRTTI()->GetTypeName(), m_sName.GetData());
    return;
  }

  UpdateActionMapping();

  float fValue;
  ezInt8 iTriggerAlt;

  const ezKeyState::Enum ks = ezInputManager::GetInputActionState(GetDynamicRTTI()->GetTypeName(), m_sName.GetData(), &fValue, &iTriggerAlt);
  
  if (ks != ezKeyState::Up)
  {
    m_bIsActive = true;

    ezVec2 vTouchPos(0.0f);

    ezInputManager::GetInputSlotState(m_ActionConfig.m_sFilterByInputSlotX[iTriggerAlt].GetData(), &vTouchPos.x);
    ezInputManager::GetInputSlotState(m_ActionConfig.m_sFilterByInputSlotY[iTriggerAlt].GetData(), &vTouchPos.y);

    if (ks == ezKeyState::Pressed)
    {
      switch (m_CenterMode)
      {
      case CenterMode::InputArea:
        m_vCenter = m_vLowerLeft + (m_vUpperRight - m_vLowerLeft) * 0.5f;
        break;
      case CenterMode::ActivationPoint:
        m_vCenter = vTouchPos;
        break;
      }
    }

    ezVec2 vDir = vTouchPos - m_vCenter;
    vDir.y *= -1;

    const float fLength = ezMath::Min(vDir.GetLength(), m_fRadius) / m_fRadius;
    vDir.Normalize();

    m_InputSlotValues[m_szOutputLeft ] = ezMath::Max(0.0f, -vDir.x) * fLength;
    m_InputSlotValues[m_szOutputRight] = ezMath::Max(0.0f,  vDir.x) * fLength;
    m_InputSlotValues[m_szOutputUp   ] = ezMath::Max(0.0f,  vDir.y) * fLength;
    m_InputSlotValues[m_szOutputDown ] = ezMath::Max(0.0f, -vDir.y) * fLength;
  }
}