diff options
| author | nokoe <nokoe@mailbox.org> | 2024-06-29 20:46:56 +0200 | 
|---|---|---|
| committer | nokoe <nokoe@mailbox.org> | 2024-06-29 20:47:23 +0200 | 
| commit | 52dbf26f1e598ad7a095af09cf638b263db7dab0 (patch) | |
| tree | b07562ba9d2c8121a0b926ccda8d7d8305f57b1a | |
| parent | c1a65adf8aecaa56ee3a7495d5eb59bcce694d93 (diff) | |
| download | hurrycurry-52dbf26f1e598ad7a095af09cf638b263db7dab0.tar hurrycurry-52dbf26f1e598ad7a095af09cf638b263db7dab0.tar.bz2 hurrycurry-52dbf26f1e598ad7a095af09cf638b263db7dab0.tar.zst | |
add effects
| -rw-r--r-- | client/game.gd | 23 | ||||
| -rw-r--r-- | client/menu/setup_menu.tscn | 26 | ||||
| -rw-r--r-- | client/multiplayer.gd | 18 | ||||
| -rw-r--r-- | client/player/character/character.tscn | 2 | ||||
| -rw-r--r-- | client/player/effect.gd | 28 | ||||
| -rw-r--r-- | client/player/effect.tscn | 10 | ||||
| -rw-r--r-- | client/player/item_bubble.gd | 3 | ||||
| -rw-r--r-- | client/player/player.gd | 40 | ||||
| -rw-r--r-- | client/player/stars.tscn | 2 | 
9 files changed, 121 insertions, 31 deletions
| diff --git a/client/game.gd b/client/game.gd index 799b987b..a2893cc8 100644 --- a/client/game.gd +++ b/client/game.gd @@ -149,32 +149,37 @@ func _ready():  		t.finish(warn)  	) -	mp.text_message.connect(func(player: int, text: String): +	mp.text_message.connect(func(player: int, text: String, persist: bool):  		var p: Player = players[player] -		p.chat_bubble.set_text(text) +		p.text_message(text, persist)  	) -	mp.clear_message.connect(func(player: int): +	mp.item_message.connect(func(player: int, item: int, persist: bool): +		var p: Player = players[player] +		p.item_message(item_names[item], persist) +	) + +	mp.effect_message.connect(func(player: int, effect: String, persist: bool):  		var p: Player = players[player] -		p.item_bubble.remove_item() -		p.chat_bubble.remove_text() +		p.effect_message(effect, persist)  	) -	mp.item_message.connect(func(player: int, item: int): +	mp.clear_message.connect(func(player: int):  		var p: Player = players[player] -		p.item_bubble.set_item(item_names[item]) +		p.clear_message()  	) +  	mp.send_join(Global.profile["username"], Global.profile["character"])  	mp.set_ingame.connect(func (state): -		if state:  +		if state:  			await transition.fade_out()  			map.gi_bake()  			await transition.fade_in()  			map.autobake = true  		else: -			map.autobake = false  +			map.autobake = false  			await transition.fade_out()  	) diff --git a/client/menu/setup_menu.tscn b/client/menu/setup_menu.tscn index 98eb9e66..c1d796ef 100644 --- a/client/menu/setup_menu.tscn +++ b/client/menu/setup_menu.tscn @@ -3,34 +3,34 @@  [ext_resource type="Script" path="res://menu/setup_menu.gd" id="1_mo46n"]  [ext_resource type="Theme" uid="uid://ci2qajdoa1an1" path="res://menu/theme/paper.tres" id="1_yq0aa"] -[sub_resource type="Animation" id="Animation_s1to2"] -resource_name = "paper_slide" +[sub_resource type="Animation" id="Animation_m4a1a"] +length = 0.001  tracks/0/type = "value"  tracks/0/imported = false  tracks/0/enabled = true  tracks/0/path = NodePath("ScrollContainer:position") -tracks/0/interp = 2 +tracks/0/interp = 1  tracks/0/loop_wrap = true  tracks/0/keys = { -"times": PackedFloat32Array(0, 1), -"transitions": PackedFloat32Array(1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1),  "update": 0, -"values": [Vector2(0, 600), Vector2(0, 0)] +"values": [Vector2(0, 0)]  } -[sub_resource type="Animation" id="Animation_m4a1a"] -length = 0.001 +[sub_resource type="Animation" id="Animation_s1to2"] +resource_name = "paper_slide"  tracks/0/type = "value"  tracks/0/imported = false  tracks/0/enabled = true  tracks/0/path = NodePath("ScrollContainer:position") -tracks/0/interp = 1 +tracks/0/interp = 2  tracks/0/loop_wrap = true  tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1),  "update": 0, -"values": [Vector2(0, 0)] +"values": [Vector2(0, 600), Vector2(0, 0)]  }  [sub_resource type="AnimationLibrary" id="AnimationLibrary_wjgak"] @@ -86,6 +86,8 @@ layout_mode = 1  anchors_preset = 15  anchor_right = 1.0  anchor_bottom = 1.0 +offset_right = 1152.0 +offset_bottom = 648.0  grow_horizontal = 2  grow_vertical = 2  horizontal_scroll_mode = 0 diff --git a/client/multiplayer.gd b/client/multiplayer.gd index 6ea36595..68c0c0f3 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -28,8 +28,9 @@ signal data(  signal set_tile(tile: Vector2i, kind: int, neighbors: Array)  signal remove_tile(tile: Vector2i)  signal clear_message(player: int) -signal text_message(player: int, text: String) -signal item_message(player: int, item: int) +signal text_message(player: int, text: String, persist: bool) +signal item_message(player: int, item: int, persist: bool) +signal effect_message(player: int, effect: String, persist: bool)  signal add_player(player: int, name: String, pos: Vector2, character: int)  signal remove_player(player: int)  signal position(player: int, position: Vector2, rotation: float) @@ -153,17 +154,21 @@ func handle_packet(bytes: PackedByteArray):  			else:  				emit_signal("remove_tile", tile)  		"communicate": -			var player = decoded["player"] +			var player: int = decoded["player"]  			var message = decoded.get("message") +			var persist: bool = decoded["persist"]  			if message != null:  				var item = message.get("item")  				var text = message.get("text") +				var effect = message.get("effect")  				if item != null: -					emit_signal("item_message", player, item) +					emit_signal("item_message", player, item, persist)  				elif text != null: -					emit_signal("text_message", player, text) +					emit_signal("text_message", player, text, persist) +				elif effect != null: +					emit_signal("effect_message", player, effect, persist)  				else: -					push_error("neither text nor item provided") +					push_error("neither text, item nor effect provided")  			else:  				emit_signal("clear_message", player)  		"set_ingame": @@ -204,6 +209,7 @@ func send_interact(pos: Vector2i, edge: bool):  func send_chat(message: String):  	send_packet({  		"type": "communicate", +		"persist": false,  		"message": {  			"text": message  		} diff --git a/client/player/character/character.tscn b/client/player/character/character.tscn index cb5aa988..d55296a5 100644 --- a/client/player/character/character.tscn +++ b/client/player/character/character.tscn @@ -575,7 +575,7 @@ height = 0.2  _data = [Vector2(0, 0.054945), 0.0, 0.0, 0, 0, Vector2(0.174157, 1), 0.0, 0.0, 0, 0, Vector2(0.573034, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]  point_count = 4 -[node name="guy" type="Node3D"] +[node name="Character" type="Node3D"]  script = ExtResource("1_12lbh")  [node name="Main" type="MeshInstance3D" parent="."] diff --git a/client/player/effect.gd b/client/player/effect.gd new file mode 100644 index 00000000..eba2e66f --- /dev/null +++ b/client/player/effect.gd @@ -0,0 +1,28 @@ +# Undercooked - 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/>. +#  +class_name Effect +extends Node3D + +func set_effect(e: String): +	clear_effect() +	match e: +		"satisfied": +			$Stars.emitting = true +		_: +			push_warning("effect %s unknown" % e) + +func clear_effect(): +	$Stars.emitting = false diff --git a/client/player/effect.tscn b/client/player/effect.tscn new file mode 100644 index 00000000..787997e9 --- /dev/null +++ b/client/player/effect.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=3 uid="uid://dn2ne30t81ame"] + +[ext_resource type="Script" path="res://player/effect.gd" id="1_aqsk6"] +[ext_resource type="PackedScene" uid="uid://yaed1vnhd0aa" path="res://player/stars.tscn" id="2_shb5l"] + +[node name="Effect" type="Node3D"] +script = ExtResource("1_aqsk6") + +[node name="Stars" parent="." instance=ExtResource("2_shb5l")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) diff --git a/client/player/item_bubble.gd b/client/player/item_bubble.gd index e57fbace..6bfe60b1 100644 --- a/client/player/item_bubble.gd +++ b/client/player/item_bubble.gd @@ -29,7 +29,8 @@ func set_item(t: String):  func remove_item():  	visible = false -	item.queue_free() +	if item != null: +		item.queue_free()  func _process(delta):  	if item != null: diff --git a/client/player/player.gd b/client/player/player.gd index b20eba14..75e3861e 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -30,6 +30,9 @@ var position_anim = Vector2(0, 0)  var character: Character = preload("res://player/character/character.tscn").instantiate()  var chat_bubble: ChatBubble = preload("res://player/chat_bubble.tscn").instantiate()  var item_bubble: ItemBubble = preload("res://player/item_bubble.tscn").instantiate() +var effect: Effect = preload("res://player/effect.tscn").instantiate() + +var clear_timer: Timer = Timer.new()  var hand: Item = null  var hand_base: Node3D = Node3D.new() @@ -50,12 +53,18 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new  	add_child(chat_bubble)  	add_child(item_bubble) -	 +	add_child(effect) + +	clear_timer.one_shot = true +	clear_timer.wait_time = 5. +	add_child(clear_timer) +  	character_idx = new_character_idx -	 +  func _ready():  	character.select_hairstyle(character_idx) +	clear_timer.timeout.connect(clear_message)  func update_position(new_position: Vector2, new_rotation: float):  	position_ = new_position @@ -97,3 +106,30 @@ func _process(delta):  	position.z = position_anim.y  	rotation.y = rotation_anim  	character.walking = position_.distance_squared_to(position_anim) > 0.001 + + +func clear_message(): +	item_bubble.remove_item() +	chat_bubble.remove_text() +	effect.clear_effect() + +func item_message(item_name: String, persist: bool): +	item_bubble.set_item(item_name) +	if persist: +		clear_timer.stop() +	else: +		clear_timer.start() + +func text_message(m: String, persist: bool): +	chat_bubble.set_text(m) +	if persist: +		clear_timer.stop() +	else: +		clear_timer.start() + +func effect_message(effect_name: String, persist: bool): +	effect.set_effect(effect_name) +	if persist: +		clear_timer.stop() +	else: +		clear_timer.start() diff --git a/client/player/stars.tscn b/client/player/stars.tscn index e3fcc587..5c96c291 100644 --- a/client/player/stars.tscn +++ b/client/player/stars.tscn @@ -22,8 +22,10 @@ offsets = PackedFloat32Array(0, 0.711828, 1)  colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)  [node name="Stars" type="CPUParticles3D"] +emitting = false  amount = 5  lifetime = 2.0 +one_shot = true  explosiveness = 1.0  mesh = SubResource("QuadMesh_d0lru")  direction = Vector3(0, 1, 0) | 
