Skip to content

Commit d933469

Browse files
committed
feat: implement camera zoom functionality and adjust camera position in scene
1 parent 443b41c commit d933469

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

src/main_scene/main_scene.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ void MainScene::_notification(int p_what) {
5959
}
6060
}
6161

62+
camera_node = get_node<Camera3D>("Camera3D");
63+
6264
ResourceLoader* rl = ResourceLoader::get_singleton();
6365
car2_template = rl->load("res://scenes/car2.tscn");
6466
car3_template = rl->load("res://scenes/car3.tscn");
@@ -70,6 +72,32 @@ void MainScene::_notification(int p_what) {
7072
}
7173
}
7274

75+
void MainScene::_input(const Ref<InputEvent>& event) {
76+
if (!camera_node) {
77+
return;
78+
}
79+
80+
Ref<InputEventMouseButton> mb_event = event;
81+
if (mb_event.is_valid()) {
82+
if (mb_event->is_pressed()) {
83+
Vector3 current_position = camera_node->get_global_position();
84+
float current_distance_from_origin = current_position.length();
85+
86+
if (mb_event->get_button_index() == MouseButton::MOUSE_BUTTON_WHEEL_UP) {
87+
if (current_distance_from_origin > min_zoom_distance) {
88+
camera_node->translate_object_local(Vector3(0, 0, -zoom_speed));
89+
}
90+
// UtilityFunctions::print("Zoom In");
91+
} else if (mb_event->get_button_index() == MouseButton::MOUSE_BUTTON_WHEEL_DOWN) {
92+
if (current_distance_from_origin < max_zoom_distance) {
93+
camera_node->translate_object_local(Vector3(0, 0, zoom_speed));
94+
}
95+
// UtilityFunctions::print("Zoom Out");
96+
}
97+
}
98+
}
99+
}
100+
73101
void MainScene::_process(double delta) {
74102
if (is_searching) {
75103
// time->set_text("Time: " + String::num(get_process_time()));

src/main_scene/main_scene.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#pragma once
22

33
#include <godot_cpp/classes/node3d.hpp>
4+
#include <godot_cpp/classes/camera3d.hpp>
5+
#include <godot_cpp/classes/input_event_mouse_button.hpp>
46
#include <godot_cpp/classes/button.hpp>
57
#include <godot_cpp/classes/option_button.hpp>
68
#include <godot_cpp/classes/label.hpp>
@@ -64,6 +66,11 @@ class MainScene : public Node3D {
6466
bool is_animating_solution = false;
6567
const float ANIMATION_DURATION = 0.5f;
6668

69+
Camera3D* camera_node;
70+
float zoom_speed = 0.5f;
71+
float min_zoom_distance = 2.0f;
72+
float max_zoom_distance = 20.0f;
73+
6774
void _animate_next_move();
6875
void _on_move_animation_finished();
6976
Vector3 _get_3d_position_for_piece_coords(const Coordinates& piece_top_left_coords, int piece_size, bool is_vertical_piece);
@@ -91,4 +98,5 @@ class MainScene : public Node3D {
9198
~MainScene();
9299

93100
void _process(double delta) override;
101+
void _input(const Ref<InputEvent>& event);
94102
};

tukang-parkir-simulator/scenes/main.tscn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.5,
6464
shape = SubResource("ConcavePolygonShape3D_0wfyh")
6565

6666
[node name="Camera3D" type="Camera3D" parent="."]
67-
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 8, 7)
67+
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 7, 5)
6868
current = true
6969

7070
[node name="UI" type="CanvasLayer" parent="."]

0 commit comments

Comments
 (0)