diff options
-rw-r--r-- | client/global.gd | 4 | ||||
-rw-r--r-- | client/map/tiles/conveyor.gd | 8 | ||||
-rw-r--r-- | client/map/tiles/conveyor.tscn | 20 | ||||
-rw-r--r-- | client/map/tiles/conveyor_direction.gdshader | 34 | ||||
-rw-r--r-- | client/map/tiles/conveyor_direction.tscn | 21 | ||||
-rw-r--r-- | client/map/tiles/conveyor_model.gd | 15 | ||||
-rw-r--r-- | client/player/interact_marker.gdshader | 2 |
7 files changed, 99 insertions, 5 deletions
diff --git a/client/global.gd b/client/global.gd index 691a85c7..39418e2f 100644 --- a/client/global.gd +++ b/client/global.gd @@ -203,10 +203,10 @@ func set_setting(key: String, value): return settings[key].set_value(value) -func interpolate(current, target, dt): +static func interpolate(current, target, dt): return target + (current - target) * exp(-dt) -func interpolate_angle(current, target, dt): +static func interpolate_angle(current, target, dt): if abs(target - current) > PI: if target < 0: target += PI * 2 diff --git a/client/map/tiles/conveyor.gd b/client/map/tiles/conveyor.gd index 93bd4282..d920915c 100644 --- a/client/map/tiles/conveyor.gd +++ b/client/map/tiles/conveyor.gd @@ -16,10 +16,16 @@ class_name Conveyor extends Floor +var conveyor: ConveyorModel = preload("res://map/tiles/conveyor.tscn").instantiate() + func _init(rename: String, neighbors: Array): super(rename, neighbors) - var conveyor = preload("res://map/tiles/conveyor.tscn").instantiate() base.add_child(conveyor) static func interact_target() -> Vector3: return Vector3(0., .425, 0.) + +func pass_to(tile: Tile): + super(tile) + var dir: Vector3 = (tile.position - position) + conveyor.to_direction(Vector2(dir.x, dir.z).normalized()) diff --git a/client/map/tiles/conveyor.tscn b/client/map/tiles/conveyor.tscn index 3a5d3a83..5e71bcec 100644 --- a/client/map/tiles/conveyor.tscn +++ b/client/map/tiles/conveyor.tscn @@ -1,10 +1,28 @@ -[gd_scene load_steps=2 format=3 uid="uid://df5wbypoqbkf"] +[gd_scene load_steps=6 format=3 uid="uid://df5wbypoqbkf"] [ext_resource type="ArrayMesh" uid="uid://djet05vuyh6iv" path="res://map/tiles/conveyor.res" id="1_hoctt"] +[ext_resource type="Script" path="res://map/tiles/conveyor_model.gd" id="1_xdf1u"] +[ext_resource type="PackedScene" uid="uid://60wue8ult1bx" path="res://map/tiles/conveyor_direction.tscn" id="2_sf55l"] +[ext_resource type="Shader" path="res://map/tiles/conveyor_direction.gdshader" id="4_8s3rd"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bgatf"] +resource_local_to_scene = true +render_priority = 0 +shader = ExtResource("4_8s3rd") +shader_parameter/angle = 0.2 +shader_parameter/frequency = 0.5 +shader_parameter/width = 0.2 +shader_parameter/speed = 1.0 +shader_parameter/alpha_fac = 1.0 [node name="Conveyor" type="Node3D"] +script = ExtResource("1_xdf1u") [node name="Mesh" type="MeshInstance3D" parent="."] transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) mesh = ExtResource("1_hoctt") skeleton = NodePath("") + +[node name="ConveyorDirection" parent="." instance=ExtResource("2_sf55l")] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.43, 0) +surface_material_override/0 = SubResource("ShaderMaterial_bgatf") diff --git a/client/map/tiles/conveyor_direction.gdshader b/client/map/tiles/conveyor_direction.gdshader new file mode 100644 index 00000000..7b3565e6 --- /dev/null +++ b/client/map/tiles/conveyor_direction.gdshader @@ -0,0 +1,34 @@ +/* + Hurry Curry! - a game about cooking + Copyright 2024 nokoe + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ +shader_type spatial; + +uniform float angle = .2; +uniform float frequency = .5; +uniform float width = .2; +uniform float speed = 1.; +uniform float alpha_fac = 1.; + +void fragment() { + ALBEDO = vec3(1., 1., 0.); + vec2 uv = UV.xy; + uv.x = abs(2. * uv.x - 1.); + float alpha = step( + mod(uv.y - TIME * speed + angle * uv.x, frequency), width + ); + ALPHA = alpha * alpha_fac; +} diff --git a/client/map/tiles/conveyor_direction.tscn b/client/map/tiles/conveyor_direction.tscn new file mode 100644 index 00000000..9d407683 --- /dev/null +++ b/client/map/tiles/conveyor_direction.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=3 uid="uid://60wue8ult1bx"] + +[ext_resource type="Shader" path="res://map/tiles/conveyor_direction.gdshader" id="1_47s57"] + +[sub_resource type="QuadMesh" id="QuadMesh_hr8jj"] +size = Vector2(0.8, 1) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_h5q6r"] +resource_local_to_scene = true +render_priority = 0 +shader = ExtResource("1_47s57") +shader_parameter/angle = 0.2 +shader_parameter/frequency = 0.5 +shader_parameter/width = 0.2 +shader_parameter/speed = 1.0 +shader_parameter/alpha_fac = 1.0 + +[node name="ConveyorDirection" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1.19249e-08, 1, 0, -1, 1.19249e-08, 0, 0, 0) +mesh = SubResource("QuadMesh_hr8jj") +surface_material_override/0 = SubResource("ShaderMaterial_h5q6r") diff --git a/client/map/tiles/conveyor_model.gd b/client/map/tiles/conveyor_model.gd new file mode 100644 index 00000000..7dd48957 --- /dev/null +++ b/client/map/tiles/conveyor_model.gd @@ -0,0 +1,15 @@ +class_name ConveyorModel +extends Node3D + +var alpha: float = 0. + +@onready var mat: ShaderMaterial = $ConveyorDirection.get_active_material(0) + +func _process(delta): + alpha = Global.interpolate(alpha, 0., delta) + mat.set_shader_parameter("alpha_fac", alpha) + +func to_direction(direction: Vector2): + direction.y *= -1 + $ConveyorDirection.rotation.y = direction.angle() + .5 * PI + alpha = 1. diff --git a/client/player/interact_marker.gdshader b/client/player/interact_marker.gdshader index 6f3cd435..1a1b9c63 100644 --- a/client/player/interact_marker.gdshader +++ b/client/player/interact_marker.gdshader @@ -1,6 +1,6 @@ /* Hurry Curry! - a game about cooking - Copyright 2024 metamuffin + Copyright 2024 nokoe This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by |