mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-17 05:09:20 +02:00
feat(editor): track editor driven by what the cursor is over: the outline and a label show what a click or a drag does, snapping to free ends on the screen, handles and ends dragged directly, no rotation gizmo; laying from a free end the same in every mode, straight with Shift, the curve of a switch going on past its diverging end; height 0 where there's no terrain; placed switch leaves the switch mode, double slips listed apart, a drive of the switch placed with it by the //$e switch description of its template; compound curves of any number of radii; dragged end of a straight fits the curve beside it; name of a path, followed by the memory cells and the includes taking it; turntable placed from a template described as one, tracks led out of it and the tracks around fitted to it, its positions written to the include; infrastructure bound to the path whose events read its memory cell; terrain made where the route has none and shaped to the formation under the ballast; models along the track over the selected path and on along the joined ones while dragged, rarely used settings folded; vehicles and trainsets placed on any path, switches included, facing the way the arrow shows; joined paths spread into the selection; New scenery in the File menu starts the editor again with the wizard; ortho zoom towards the cursor; scripted self tests; Polish translation
This commit is contained in:
@@ -29,7 +29,6 @@ namespace
|
||||
{
|
||||
|
||||
double const kSpeedLineReach{5000.0}; // m each way, for the line through the selected path
|
||||
double const kSpeedViewDistance{25.0};
|
||||
double const kSpeedOverlayRange{3000.0};
|
||||
|
||||
bool rail(TTrack const &Track)
|
||||
@@ -148,21 +147,7 @@ void editor_mode::speed_focus(int const Index)
|
||||
return;
|
||||
m_node = verdict.track;
|
||||
ui()->set_node(m_node);
|
||||
auto const &path{verdict.track->m_paths[std::min<std::size_t>(verdict.path, verdict.track->m_paths.size() - 1)]};
|
||||
geometry::bezier const curve{path};
|
||||
glm::dvec3 look{curve.first(0.5)};
|
||||
look.y = 0.0;
|
||||
look = glm::length(look) > 1e-6 ? glm::normalize(look) : glm::dvec3(0.0, 0.0, 1.0);
|
||||
if (glm::dot(Camera.Pos - verdict.position, look) > 0.0)
|
||||
look = -look;
|
||||
look = glm::normalize(look - glm::dvec3(0.0, 0.25, 0.0));
|
||||
m_focus_start_pos = Camera.Pos;
|
||||
m_focus_start_angle = Camera.Angle;
|
||||
m_focus_target_pos = verdict.position - look * kSpeedViewDistance;
|
||||
m_focus_target_angle = glm::vec3(static_cast<float>(std::asin(std::clamp(look.y, -1.0, 1.0))), static_cast<float>(std::atan2(-look.x, -look.z)), 0.0f);
|
||||
m_focus_active = true;
|
||||
m_focus_time = 0.0;
|
||||
m_focus_duration = 0.6;
|
||||
focus_track(*verdict.track, verdict.path, verdict.position);
|
||||
}
|
||||
|
||||
void editor_mode::speed_apply(std::vector<int> const &Indices, bool const Branches)
|
||||
|
||||
Reference in New Issue
Block a user