@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
[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")
[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")
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
@onready var pivot := $Pivot
@onready var camera := $Camera3D
+@onready var collider := $CollisionShape3D
var target_velocity := Vector3.ZERO
var noise: float = 0
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):
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
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"):
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