aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-06-23 00:25:19 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 19:31:29 +0200
commita3a4e6f2da74c9dd5231269001139071cedf5d55 (patch)
tree767882f1d0d43b406f1b67b50f193b14101436c9
parent04cc939e31ec57b83f811022d408bacfc40ca627 (diff)
downloadhurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar
hurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar.bz2
hurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar.zst
add progress
-rw-r--r--client/scenes/progress.tscn18
-rw-r--r--client/scripts/controllable_player.gd7
-rw-r--r--client/scripts/game.gd12
-rw-r--r--client/scripts/item.gd11
-rw-r--r--client/scripts/progress.gd7
-rw-r--r--client/scripts/tiles/floor.gd8
-rw-r--r--client/textures/progress.gdshader28
7 files changed, 86 insertions, 5 deletions
diff --git a/client/scenes/progress.tscn b/client/scenes/progress.tscn
new file mode 100644
index 00000000..8ac60bc6
--- /dev/null
+++ b/client/scenes/progress.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=5 format=3 uid="uid://4ewufm6tqhpb"]
+
+[ext_resource type="Shader" path="res://textures/progress.gdshader" id="1_6f2a0"]
+[ext_resource type="Script" path="res://scripts/progress.gd" id="2_bb3u3"]
+
+[sub_resource type="QuadMesh" id="QuadMesh_m0itj"]
+size = Vector2(0.75, 0.1)
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_4k6cy"]
+render_priority = 0
+shader = ExtResource("1_6f2a0")
+shader_parameter/progress = 0.5
+shader_parameter/bad = true
+
+[node name="Progress" type="MeshInstance3D"]
+mesh = SubResource("QuadMesh_m0itj")
+surface_material_override/0 = SubResource("ShaderMaterial_4k6cy")
+script = ExtResource("2_bb3u3")
diff --git a/client/scripts/controllable_player.gd b/client/scripts/controllable_player.gd
index debb86dd..dce81d06 100644
--- a/client/scripts/controllable_player.gd
+++ b/client/scripts/controllable_player.gd
@@ -74,15 +74,14 @@ func interact():
int(floor(position.z + cos(rotation.y)))
)
var tile_idx = str(target)
+ var t: Floor = game.map.tile_by_pos.get(tile_idx)
if Input.is_action_just_pressed("interact"):
Multiplayer.send_interact(target, true)
- if game.map.tile_by_pos.has(tile_idx):
- var t: Floor = game.map.tile_by_pos[tile_idx]
+ if t != null:
t.interact()
elif Input.is_action_just_released("interact"):
Multiplayer.send_interact(target, false)
- if game.map.tile_by_pos.has(tile_idx):
- var t: Floor = game.map.tile_by_pos[tile_idx]
+ if t != null:
game.marker.visible = true
game.marker_target = t.item_base.global_position
else:
diff --git a/client/scripts/game.gd b/client/scripts/game.gd
index 44875056..5d127e78 100644
--- a/client/scripts/game.gd
+++ b/client/scripts/game.gd
@@ -38,7 +38,7 @@ func _ready():
players.erase(id)
player.queue_free()
)
-
+
Multiplayer.connect("set_tile_item", func(tile: Vector2i, item: int):
var t: Floor = map.tile_by_pos[str(tile)]
var i = Item.new(item, t.item_base)
@@ -77,6 +77,16 @@ func _ready():
p.put_item(t)
)
+ Multiplayer.connect("set_progress", func(tile: Vector2i, progress: float, warn: bool):
+ var t: FullTile = map.tile_by_pos[str(tile)]
+ t.progress(progress, warn)
+ )
+
+ Multiplayer.connect("set_finished", func(tile: Vector2i, warn: bool):
+ var t: FullTile = map.tile_by_pos[str(tile)]
+ t.finish(warn)
+ )
+
Multiplayer.send_join("Blub", 1)
diff --git a/client/scripts/item.gd b/client/scripts/item.gd
index c3fba434..5c73db9f 100644
--- a/client/scripts/item.gd
+++ b/client/scripts/item.gd
@@ -3,7 +3,12 @@ extends Node3D
var owned_by: Node3D
+var progress_instance: ProgressBar3D = preload("res://scenes/progress.tscn").instantiate()
+
func _init(idx: int, owned_by_: Node3D):
+ progress_instance.position.y = 2.
+ add_child(progress_instance)
+ progress_instance.visible = false
match Multiplayer.item_names[idx]:
var t:
add_child(load("res://models/prefabs/map/bag.tscn").instantiate())
@@ -28,3 +33,9 @@ func _ready():
func _process(delta):
position = lerp(position, owned_by.global_position, delta * 30.0)
+func progress(p: float, warn: bool):
+ progress_instance.visible = true
+ progress_instance.set_progress(p, warn)
+
+func finish(warn: bool):
+ progress_instance.visible = false
diff --git a/client/scripts/progress.gd b/client/scripts/progress.gd
new file mode 100644
index 00000000..22a2392f
--- /dev/null
+++ b/client/scripts/progress.gd
@@ -0,0 +1,7 @@
+class_name ProgressBar3D
+extends MeshInstance3D
+
+func set_progress(progress: float, bad: bool):
+ var mat: ShaderMaterial = self.get_active_material(0)
+ mat.set_shader_parameter("progress", progress)
+ mat.set_shader_parameter("bad", bad)
diff --git a/client/scripts/tiles/floor.gd b/client/scripts/tiles/floor.gd
index 0c4af8a0..380f3d6d 100644
--- a/client/scripts/tiles/floor.gd
+++ b/client/scripts/tiles/floor.gd
@@ -41,6 +41,14 @@ static func interact_target() -> Vector3:
func interact():
pass
+func progress(p: float, warn: bool):
+ if item != null:
+ item.progress(p, warn)
+
+func finish(warn: bool):
+ if item != null:
+ item.finish(warn)
+
func put_item(i: Item):
if item != null:
push_error("already holding an item")
diff --git a/client/textures/progress.gdshader b/client/textures/progress.gdshader
new file mode 100644
index 00000000..0bf3e04a
--- /dev/null
+++ b/client/textures/progress.gdshader
@@ -0,0 +1,28 @@
+shader_type spatial;
+
+uniform float progress = 0.;
+uniform bool bad = false;
+
+void fragment() {
+ vec3 color = vec3(0., 1., 0.);
+ float alpha_fac = 1.;
+ if (bad) {
+ color = vec3(1., 0., 0.);
+ alpha_fac = sin(TIME * 15.) * .5 + 1.;
+ }
+ if (UV.x > progress) {
+ ALPHA = 0.1;
+ }
+ ALPHA *= alpha_fac;
+ ALBEDO = color;
+}
+
+void vertex() {
+ mat4 modified_model_view = VIEW_MATRIX * mat4(
+ INV_VIEW_MATRIX[0],
+ INV_VIEW_MATRIX[1],
+ INV_VIEW_MATRIX[2],
+ MODEL_MATRIX[3]
+ );
+ MODELVIEW_MATRIX = modified_model_view;
+}