fuzzyworld

godot-shooter / commit

Added zoom support. Zoom can be changed with UP/DOWN keys.

f1a6c921277336f486d5913037004da660aea766 · Pavel Safronov · 2023-12-01 15:56:03 -0800 · parents 636e5224ec84

Added zoom support. Zoom can be changed with UP/DOWN keys.
The background is now the color of Godot's IDE.
 actors/Player.gd  | 15 ++++++++++++++-
 project.godot     | 12 +++++++++++-
 scenes/World.tscn |  3 ++-
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/actors/Player.gd b/actors/Player.gd
index 86f4213..969abb7 100644
--- a/actors/Player.gd
+++ b/actors/Player.gd
@@ -21,6 +21,7 @@ signal destination_set
 signal debug
 
 onready var hud = $UI/HUD
+onready var camera = $Camera2D
 onready var static_controls = $Graphics/Alive/StaticControls
 onready var radar_sprite = $Graphics/Alive/StaticControls/RadarSprite
 onready var radar_container = $Graphics/Alive/StaticControls/Radar
@@ -44,6 +45,7 @@ var weapon: Weapon
 var dead = false
 var velocity: Vector2 = Vector2.UP * move_speed
 var settings: Settings
+const zoom_step = 1.01
 
 func create_default_weapon() -> Weapon:
 	return Weapons.create_basic_gun()
@@ -64,6 +66,12 @@ func _process(_delta: float) -> void:
 	if dead:
 		return
 
+	# handle up/down actions
+	if Input.is_action_pressed("up"):
+		camera.zoom /= zoom_step
+	if Input.is_action_pressed("down"):
+		camera.zoom *= zoom_step
+
 	# set the rotation for static controls
 	static_controls.global_rotation = 0
 
@@ -154,6 +162,7 @@ func update_radar(items: Array, color: Color):
 			ratio = 0
 		var angle_to = Vector2.UP.angle_to(diff)
 		var sprite: Sprite = radar_sprite.duplicate()
+		sprite.scale = camera.zoom / 2
 		sprite.rotate(angle_to)
 		sprite.modulate = Color(color.r,color.g,color.b,ratio * .5)
 		radar_container.add_child(sprite)
@@ -258,10 +267,14 @@ func _on_HUD_position_set(event_pos: Vector2) -> void:
 	var width = ProjectSettings.get("display/window/size/width")
 	var height = ProjectSettings.get("display/window/size/height")
 	var mid = Vector2(width / 2.0, height / 2.0)
-	var pos = event_pos + self.position - mid
+	var pos = camera_scale(event_pos) + self.position - camera_scale(mid)
 	set_destination(pos)
 	emit_signal("destination_set")
 
+func camera_scale(pos: Vector2) -> Vector2:
+	var scaled_pos = Vector2(pos.x * camera.zoom.x, pos.y * camera.zoom.y)
+	return scaled_pos
+
 func show_message(message: String, duration_seconds: int = 2) -> void:
 	hud.show_message(message, duration_seconds)
 
diff --git a/project.godot b/project.godot
index a27c543..047d375 100644
--- a/project.godot
+++ b/project.godot
@@ -125,6 +125,16 @@ debug_action={
 "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
  ]
 }
+up={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
+down={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
+ ]
+}
 
 [layer_names]
 
@@ -150,5 +160,5 @@ common/enable_pause_aware_picking=true
 
 quality/driver/driver_name="GLES2"
 vram_compression/import_etc=true
-environment/default_clear_color=Color( 0, 0, 0, 1 )
+environment/default_clear_color=Color( 0.12549, 0.145098, 0.192157, 1 )
 environment/default_environment="res://default_env.tres"
diff --git a/scenes/World.tscn b/scenes/World.tscn
index d306dd5..27ba6e8 100644
--- a/scenes/World.tscn
+++ b/scenes/World.tscn
@@ -27,9 +27,10 @@ shape = SubResource( 1 )
 
 [node name="Background" type="CanvasLayer" parent="."]
 layer = -100
+visible = false
 
 [node name="ParallaxBackground" type="ParallaxBackground" parent="Background"]
-scroll_ignore_camera_zoom = true
+visible = false
 
 [node name="Foreground" type="ParallaxLayer" parent="Background/ParallaxBackground"]
 motion_mirroring = Vector2( 600, 1000 )