From ebece003eb008a5682b557fc4b3a1c77b4b6d510 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Sun, 20 Aug 2023 17:03:52 -0400 Subject: [PATCH] Allowing for camera movement and moving camera functions out of conway.gd --- project.godot | 24 ++++++++++++++++++++++++ scenes/camera_view.gd | 30 ++++++++++++++++++++++++++++++ scenes/conway.gd | 17 +++++------------ scenes/conway.tscn | 8 ++++++-- 4 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 scenes/camera_view.gd diff --git a/project.godot b/project.godot index 53b5ebc..6c4d570 100644 --- a/project.godot +++ b/project.godot @@ -51,3 +51,27 @@ Menu={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"echo":false,"script":null) ] } +Left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +Right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +Forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +Backward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} diff --git a/scenes/camera_view.gd b/scenes/camera_view.gd new file mode 100644 index 0000000..516ed8e --- /dev/null +++ b/scenes/camera_view.gd @@ -0,0 +1,30 @@ +extends Node2D + +@export var zoom_increment: Vector2 = Vector2(0.1, 0.1) +@export var move_speed: int = 250 + +var mouse: Vector2 = Vector2.ZERO + +@onready var camera: Camera2D = $Camera2D + + +func _process(delta: float) -> void: + var input_dir := Input.get_vector("Left", "Right", "Forward", "Backward") + var velocity_y = input_dir.y * move_speed * delta + var velocity_x = input_dir.x * move_speed * delta + + position += Vector2(velocity_x, velocity_y) + + mouse = Vector2() + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("Zoom In"): + camera.zoom += zoom_increment + if event.is_action_pressed("Zoom Out"): + camera.zoom -= zoom_increment + if event.is_action_pressed("Reset Zoom"): + camera.zoom = Vector2.ONE + + +func update_position(pos: Vector2) -> void: + camera.position = pos diff --git a/scenes/conway.gd b/scenes/conway.gd index 75e2cc2..07e42e7 100644 --- a/scenes/conway.gd +++ b/scenes/conway.gd @@ -29,7 +29,7 @@ enum CellStates { @onready var messages_label: Label = $UI/Messages/Label ## Other -@onready var camera: Camera2D = $Camera2D +@onready var camera: Node2D = $CameraView @onready var generation_timer: Timer = $GenerationTimer @export var world_seed: int ## The seed utilized for generation of the world @@ -37,8 +37,6 @@ enum CellStates { @export var cell_texture: Texture2D ## Testure for each cell @export var world_size: Vector2 = Vector2(32, 32) ## The size of the world -@export var zoom_increment: Vector2 = Vector2(0.1, 0.1) - var cell_instance var evolution_is_stalled: bool = false var generation: int = 1 @@ -78,13 +76,6 @@ func _input(event: InputEvent) -> void: update_generation_ui() generation_ui.visible = is_paused - if event.is_action_pressed("Zoom In"): - camera.zoom += zoom_increment - if event.is_action_pressed("Zoom Out"): - camera.zoom -= zoom_increment - if event.is_action_pressed("Reset Zoom"): - camera.zoom = Vector2.ONE - # # UI @@ -115,8 +106,10 @@ func start_conway() -> void: debug_living_cells_counter.text = "Living Cells: %s" % total_living # Center the camera on the world - camera.position.x = world_size.x * cell_size.x / 2 - camera.position.y = world_size.y * cell_size.y / 2 + camera.update_position(Vector2( + world_size.x * cell_size.x / 2, + world_size.y * cell_size.y / 2 + )) if not is_paused: generation_timer.start() diff --git a/scenes/conway.tscn b/scenes/conway.tscn index caaa62e..888bea4 100644 --- a/scenes/conway.tscn +++ b/scenes/conway.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=4 format=3 uid="uid://d3twfk56sjf2m"] +[gd_scene load_steps=5 format=3 uid="uid://d3twfk56sjf2m"] [ext_resource type="Script" path="res://scenes/conway.gd" id="1_1gvb0"] [ext_resource type="Texture2D" uid="uid://c2vm5pfsamed4" path="res://assets/icon.svg" id="2_l6fa6"] +[ext_resource type="Script" path="res://scenes/camera_view.gd" id="3_avkud"] [ext_resource type="Texture2D" uid="uid://b8gggrriib8n" path="res://assets/refresh.png" id="4_hmfh6"] [node name="World" type="Node2D"] @@ -9,7 +10,10 @@ position = Vector2(-152, 0) script = ExtResource("1_1gvb0") cell_texture = ExtResource("2_l6fa6") -[node name="Camera2D" type="Camera2D" parent="."] +[node name="CameraView" type="Node2D" parent="."] +script = ExtResource("3_avkud") + +[node name="Camera2D" type="Camera2D" parent="CameraView"] position = Vector2(464, 200) [node name="GenerationTimer" type="Timer" parent="."]