godot-shooter / commit
Added zoom support. Zoom can be changed with UP/DOWN keys.
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 )