void Navigation::SetPathPoint() { Vector3 hitPos; Drawable* hitDrawable; NavigationMesh* navMesh = scene_->GetComponent<NavigationMesh>(); if (Raycast(250.0f, hitPos, hitDrawable)) { Vector3 pathPos = navMesh->FindNearestPoint(hitPos, Vector3(1.0f, 1.0f, 1.0f)); if (GetSubsystem<Input>()->GetQualifierDown(QUAL_SHIFT)) { // Teleport currentPath_.Clear(); jackNode_->LookAt(Vector3(pathPos.x_, jackNode_->GetPosition().y_, pathPos.z_), Vector3::UP); jackNode_->SetPosition(pathPos); } else { // Calculate path from Jack's current position to the end point endPos_ = pathPos; navMesh->FindPath(currentPath_, jackNode_->GetPosition(), endPos_); } } }
void UrhoQuickStart::HandleKeyDown(StringHash eventType, VariantMap& eventData) { using namespace KeyDown; int key = eventData[P_KEY].GetInt(); if (key == KEY_ESC) { Console* console = GetSubsystem<Console>(); if (console->IsVisible()) console->SetVisible(false); else engine_->Exit(); } else if (key == KEY_F1) { Console* console = GetSubsystem<Console>(); console->Toggle(); } if (key == KEY_F2) drawDebug_ = !drawDebug_; if (key == KEY_E) { Vector3 hitPos; Drawable* hitDrawable; NavigationMesh* navMesh = scene_->GetComponent<NavigationMesh>(); if (Raycast(250.0f, hitPos, hitDrawable)) { Vector3 pathPos = navMesh->FindNearestPoint(hitPos, Vector3(2.0f, 2.0f, 2.0f)); botScript_->AddPath(botNode_->GetWorldPosition(), pathPos); } } }