diff options
| author | nokoe <nokoe@mailbox.org> | 2024-06-23 00:25:19 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:31:29 +0200 | 
| commit | a3a4e6f2da74c9dd5231269001139071cedf5d55 (patch) | |
| tree | 767882f1d0d43b406f1b67b50f193b14101436c9 /client | |
| parent | 04cc939e31ec57b83f811022d408bacfc40ca627 (diff) | |
| download | hurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar hurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar.bz2 hurrycurry-a3a4e6f2da74c9dd5231269001139071cedf5d55.tar.zst | |
add progress
Diffstat (limited to 'client')
| -rw-r--r-- | client/scenes/progress.tscn | 18 | ||||
| -rw-r--r-- | client/scripts/controllable_player.gd | 7 | ||||
| -rw-r--r-- | client/scripts/game.gd | 12 | ||||
| -rw-r--r-- | client/scripts/item.gd | 11 | ||||
| -rw-r--r-- | client/scripts/progress.gd | 7 | ||||
| -rw-r--r-- | client/scripts/tiles/floor.gd | 8 | ||||
| -rw-r--r-- | client/textures/progress.gdshader | 28 | 
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; +} | 
