예제 #1
0
void PlayerUIDialog::RequestMove(RPG_Character* characterEntity, bool spawnDestinationEffect)
{
  VASSERT(characterEntity);

  hkVector4 hitPoint, characterPos;
  RPG_VisionHavokConversion::VisionToHavokPoint(characterEntity->GetPosition(), characterPos);
  if(GetClosestPointOnNavMeshUnderCursor(hitPoint, characterPos))
  {
    hkvVec3 vHitPoint;
    RPG_VisionHavokConversion::HavokToVisionPoint(hitPoint, vHitPoint);

    characterEntity->GetActionHandler().PerformAction(AT_Move, false, NULL, vHitPoint);

    if(spawnDestinationEffect)
      TrySpawnSelectDestinationEffect(vHitPoint);

#ifdef _DEBUG
    if (m_debugUI)
    {
      Vision::Message.DrawMessage3D("RequestPath", vHitPoint);
    }
#endif
  }
}
예제 #2
0
void PlayerUIDialog::OnTick(float deltaTime)
{
  VDialog::OnTick(deltaTime);

#if defined (SUPPORTS_MULTITOUCH) && (HAVOK_VISION_RESTRUCTURING) && !defined(_VISION_ANDROID)

  if (m_touchInput != NULL)
  {     
    int count = m_touchInput->GetNumberOfTouchPoints();
    if (count > 1)
      return;
  }

#endif

  RPG_Character *characterEntity = static_cast<RPG_Character *>(m_playerController->GetOwner());
  if (!characterEntity)
  {
    // @todo: handle player death properly
    hkvLog::Warning("Player character has probably died, which isn't yet handled. Set the character's Unlimited Health entity property to true to prevent this.");
    return;
  }

  RPG_PlayerControllerInput input;
  {
    if(m_inputMap->GetTrigger(PI_PrimaryAction) > 0.0f)
    {
      if(m_inputMap->GetTrigger(PI_ShiftModifier) > 0.0f)
      {
        input.m_buttons |= RPG_PlayerControllerInput::B_RANGED;
      }
      else if(m_inputMap->GetTrigger(PI_SecondaryShiftModifier) > 0.0f)
      {
        input.m_buttons |= RPG_PlayerControllerInput::B_POWER;
      }
      else
      {
        input.m_buttons |= RPG_PlayerControllerInput::B_PRIMARY;
      }
    }

    if(m_inputMap->GetTrigger(PI_SecondaryAction) > 0.0f)
    {
      input.m_buttons |= RPG_PlayerControllerInput::B_POWER;
    }

    if(m_inputMap->GetTrigger(PI_SpecialAction01) > 0.0f)
    {
      input.m_buttons |= RPG_PlayerControllerInput::B_AOE;
    }

    GetFirstAttackableEntityUnderCursor(input.m_targetEntity, input.m_targetPoint, characterEntity);
    if(!input.m_targetEntity)
    {
      hkVector4 hitPoint, characterPos;
      RPG_VisionHavokConversion::VisionToHavokPoint(characterEntity->GetPosition(), characterPos);
      if(GetClosestPointOnNavMeshUnderCursor(hitPoint, characterPos))
      {
        RPG_VisionHavokConversion::HavokToVisionPoint(hitPoint, input.m_targetPoint);
      }
    }

    m_playerController->SetInput(input);
  }

  RPG_GuiManager::GetInstance()->OnTick(deltaTime);
}