Now can move camera in line editor mode, closes #2

This commit is contained in:
2024-09-14 19:29:31 +03:00
parent 01c69a4ae9
commit e720697b70
3 changed files with 48 additions and 0 deletions

View File

@@ -12,6 +12,7 @@
#include <core/io/config_file.h>
#include <core/os/file_access.h>
#include <core/os/dir_access.h>
#include <core/os/input.h>
#include <core/os/time.h>
#include <core/io/json.h>
#include <modules/regex/regex.h>
@@ -464,6 +465,7 @@ RoadLinesEditor::RoadLinesEditor(WorldEditor *editor)
, editor(editor)
, cursor_enabled(false)
, filter_text("")
, camera_moved(false)
{
}
@@ -638,6 +640,22 @@ void RoadLinesEditor::update(float delta)
cursor_enabled = false;
get_as_node<Spatial>(cursor_name)->hide();
}
if (camera_moved) {
Camera *cam = editor->get_viewport()->get_camera();
assert(cam);
camera_moved = false;
Transform cam_xform = cam->get_global_transform();
float h = cam_xform.origin.y;
cam_xform.origin.z += Math::abs(h) * camera_motion.z * delta;
cam_xform.origin.x += Math::abs(h) * camera_motion.x * delta;
cam_xform.origin.y += camera_motion.y * delta;
camera_motion = Vector3();
cam->set_global_transform(cam_xform);
Array move_args;
move_args.push_back(cam_xform);
editor->emit_signal("editor_event", "editor_camera_moved",
move_args);
}
}
void RoadLinesEditor::exit()
@@ -901,6 +919,31 @@ void RoadLinesEditor::remove_road_meshes()
Array args;
editor->editor_command("remove_road_meshes", args);
}
void RoadLinesEditor::handle_input()
{
if (editor->get_camera_mode() != 3)
return;
bool moved = false;
float xx = Input::get_singleton()->get_axis("left", "right");
float zz = Input::get_singleton()->get_axis("backward", "forward");
float hh = Input::get_singleton()->get_axis("action2", "action");
if (Math::abs(zz) > 0.1f) {
camera_motion.z -= zz;
moved = true;
}
if (Math::abs(xx) > 0.1f) {
camera_motion.x += xx;
moved = true;
}
if (Math::abs(hh) > 0.1f && Math::abs(xx) < 0.1f &&
Math::abs(zz) < 0.1f) {
camera_motion.y += 10.0f * hh;
moved = true;
}
if (moved)
camera_moved = true;
}
void RoadLinesEditor::place_zebras()
{
editor->remove_buildings_by_prefix("zebra");

View File

@@ -9,6 +9,8 @@ class RoadLinesEditor {
bool cursor_enabled;
String filter_text;
Ref<RegEx> re;
bool camera_moved;
Vector3 camera_motion;
public:
RoadLinesEditor(WorldEditor *editor);
@@ -46,6 +48,7 @@ public:
void place_generated_objects();
void rebuild_roads();
void remove_road_meshes();
void handle_input();
protected:
void activate();

View File

@@ -434,6 +434,8 @@ void WorldEditor::_unhandled_input(const Ref<InputEvent> &event)
}
}
}
if (current_mode == MODE_ROAD_LINES)
road_lines_editor->handle_input();
}
void WorldEditor::world_exited()