From: Eduardo Date: Sun, 11 Feb 2024 16:57:00 +0000 (+0100) Subject: setup "F to pick" and recharge battery logic X-Git-Url: http://git.edufdez.es/?a=commitdiff_plain;h=b83251af5d7ebe06f32e390ff2d58dce24b041d9;p=ScaryGame.git setup "F to pick" and recharge battery logic --- diff --git a/levels/ui.gd b/levels/ui.gd index 620aec5..8ab4ec9 100644 --- a/levels/ui.gd +++ b/levels/ui.gd @@ -2,12 +2,39 @@ extends Control @export var battery := 100.0 @export_range(0, 2) var unChargeSpeedMod: float = 1 +@export_category("Conections") +@export var player: CharacterBody3D +@export var camera: Camera3D + @onready var dateLabel := $HBoxContainer/Date @onready var batteryLabel := $HBoxContainer/Battery @onready var timeLabel := $Time @onready var nightmareLabel := $NightmareText @onready var rightTopLabel := $RightTopText @onready var rightBottomLabel := $RightBottomText +@onready var actionTextLabel := $CenterContainer2/ActionText + + +func _ready() -> void: + camera.connect("object_detected", _on_object_detected) + player.connect("recharge_battery", _on_recharge_battery_command) + + +func _on_object_detected(ob: Object): + var regex = RegEx.new() + regex.compile("^bateria(\\d*)$") + + if !ob: + actionTextLabel.set_text("") + elif regex.search(ob.name): + actionTextLabel.set_text("Press F to pick") + else: + actionTextLabel.set_text(ob.name) + + +func _on_recharge_battery_command(): + battery = 100 + batteryLabel.set_text(format_battery_text(battery)) # each 1 seconds diff --git a/levels/unicorn_level/unicorn_map.tscn b/levels/unicorn_level/unicorn_map.tscn index 0e04b7c..b7306d7 100644 --- a/levels/unicorn_level/unicorn_map.tscn +++ b/levels/unicorn_level/unicorn_map.tscn @@ -71,7 +71,7 @@ shape = SubResource("BoxShape3D_s6l2r") [node name="Ground" type="Node3D" parent="NavigationRegion3D"] [node name="Sprite3D" type="Sprite3D" parent="NavigationRegion3D/Ground"] -transform = Transform3D(12, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0) +transform = Transform3D(17.028, 0, 0, 0, 17.028, 0, 0, 0, 17.028, 0, 0, 0) axis = 1 texture = ExtResource("4_8lsu2") @@ -1814,7 +1814,9 @@ transform = Transform3D(-3.0598e-09, 0.07, 0, -0.07, -3.0598e-09, 0, 0, 0, 0.07, [node name="bateria2" parent="." instance=ExtResource("9_acsxj")] transform = Transform3D(0.0271521, -0.000234109, 0.0645191, 0.000603528, 0.0699974, 0, -0.0645167, 0.000556272, 0.0271531, -116.369, 0.106564, -125.972) -[node name="UI" parent="." instance=ExtResource("8_sxpo7")] +[node name="UI" parent="." node_paths=PackedStringArray("player", "camera") instance=ExtResource("8_sxpo7")] +player = NodePath("../Player") +camera = NodePath("../Player/Camera3D") [node name="Shaders" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_s2ner") diff --git a/player/Player.gd b/player/Player.gd index 676c379..b551065 100644 --- a/player/Player.gd +++ b/player/Player.gd @@ -1,5 +1,7 @@ extends CharacterBody3D +signal recharge_battery + @export_category("Noise") @export_range(0, 2) var squating_noise_mod: float = 1 @export_range(0, 2) var running_noise_mod: float = 1 @@ -13,6 +15,7 @@ extends CharacterBody3D @onready var pivot := $Pivot @onready var camera := $Camera3D +@onready var collider := $CollisionShape3D var target_velocity := Vector3.ZERO var noise: float = 0 @@ -22,6 +25,12 @@ const stand_position := 1.7 # Position to which the camera moves when standing const move_speed := 8.0 # Speed at which the camera moves from stand to squat and back var is_squatting := false +var object_detected: Object = null + + +func _ready() -> void: + camera.connect("object_detected", _on_object_detected) + # Called every frame. 'delta' is the elapsed time since the previous frame. func _physics_process(delta): @@ -35,9 +44,9 @@ func _physics_process(delta): is_squatting = false if is_squatting and camera.position.y > squat_position: - camera.translate(Vector3(0, -move_speed * delta, 0)) + scale.y = scale.y * -move_speed * delta elif not is_squatting and camera.position.y < stand_position: - camera.translate(Vector3(0, move_speed * delta, 0)) + scale.y = scale.y * move_speed * delta if Input.is_action_pressed("squat"): speed_mod = squating_speed_mod @@ -46,6 +55,16 @@ func _physics_process(delta): speed_mod = running_speed_mod noise_mod = running_noise_mod + if Input.is_action_just_pressed("action") && object_detected: + var regex = RegEx.new() + regex.compile("^bateria(\\d*)$") + + if regex.search(object_detected.name): + object_detected.queue_free() + emit_signal("recharge_battery") + else: + print("Action on ", object_detected.name) + if Input.is_action_pressed("move_right"): direction += transform.basis.x if Input.is_action_pressed("move_left"): @@ -80,3 +99,8 @@ func _on_timer_timeout(): noise = clamp(noise - 1, 0, 9) set_meta("noise", noise) print(noise) + + +# whenever the detection changes it emits an object (or null if nothing detected) +func _on_object_detected(ob: Object): + object_detected = ob