feat: implement PlayerboardManager for handling tile collection, power-up consumption, and grid synchronization.
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dqdntrjuarixl"
|
||||||
|
path="res://.godot/imported/gogo_sprite.png-9c7123654645ea9aeba75ebe74a547bf.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/graphics/vfx/gogo_sprite.png"
|
||||||
|
dest_files=["res://.godot/imported/gogo_sprite.png-9c7123654645ea9aeba75ebe74a547bf.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
Binary file not shown.
@@ -1,19 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="mp3"
|
|
||||||
type="AudioStreamMP3"
|
|
||||||
uid="uid://8ctpkvemgvmt"
|
|
||||||
path="res://.godot/imported/pick_up_tekton_roaming.mp3-fcbc7bdfbf724091b491495057817c9b.mp3str"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sfx/pick_up_tekton_roaming.mp3"
|
|
||||||
dest_files=["res://.godot/imported/pick_up_tekton_roaming.mp3-fcbc7bdfbf724091b491495057817c9b.mp3str"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
loop=false
|
|
||||||
loop_offset=0
|
|
||||||
bpm=0
|
|
||||||
beat_count=0
|
|
||||||
bar_beats=4
|
|
||||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://db4vo6r3kpquq"
|
||||||
|
path="res://.godot/imported/pick_up_tekton_roaming.wav-8942d5b7e57f38a308199ed30a36e90f.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sfx/pick_up_tekton_roaming.wav"
|
||||||
|
dest_files=["res://.godot/imported/pick_up_tekton_roaming.wav-8942d5b7e57f38a308199ed30a36e90f.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=2
|
||||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://d2i01ld0puh3m"
|
||||||
|
path="res://.godot/imported/pick_up_tiles.wav-00c55b444fa0e1c1bc5e092df839b61e.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sfx/pick_up_tiles.wav"
|
||||||
|
dest_files=["res://.godot/imported/pick_up_tiles.wav-00c55b444fa0e1c1bc5e092df839b61e.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=2
|
||||||
Binary file not shown.
@@ -1,19 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="mp3"
|
|
||||||
type="AudioStreamMP3"
|
|
||||||
uid="uid://cpgg54uaogaaq"
|
|
||||||
path="res://.godot/imported/tile_scatter.mp3-73bb39bcbdf43b4782c4b8f6a040f991.mp3str"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sfx/tile_scatter.mp3"
|
|
||||||
dest_files=["res://.godot/imported/tile_scatter.mp3-73bb39bcbdf43b4782c4b8f6a040f991.mp3str"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
loop=false
|
|
||||||
loop_offset=0
|
|
||||||
bpm=0
|
|
||||||
beat_count=0
|
|
||||||
bar_beats=4
|
|
||||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://c13vw2lorgv6q"
|
||||||
|
path="res://.godot/imported/tile_scatter.wav-aa9d8fa0a43423ae0619a49b773da03e.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sfx/tile_scatter.wav"
|
||||||
|
dest_files=["res://.godot/imported/tile_scatter.wav-aa9d8fa0a43423ae0619a49b773da03e.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=2
|
||||||
+11
-2
@@ -530,10 +530,15 @@ func sync_walk_animation() -> void:
|
|||||||
play_walk_animation()
|
play_walk_animation()
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable")
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
func sync_pickup_animation() -> void:
|
func sync_pickup_animation(item_id: int = -1) -> void:
|
||||||
"""Sync pickup/grab animation across network."""
|
"""Sync pickup/grab animation across network and play sound."""
|
||||||
play_pickup_animation()
|
play_pickup_animation()
|
||||||
|
|
||||||
|
if item_id >= 11 and item_id <= 14:
|
||||||
|
SfxManager.play("pick_up_power_tile")
|
||||||
|
elif item_id >= 7 and item_id <= 10:
|
||||||
|
SfxManager.play("pick_up_tiles")
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable")
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
func sync_put_animation() -> void:
|
func sync_put_animation() -> void:
|
||||||
"""Sync put/drop animation across network."""
|
"""Sync put/drop animation across network."""
|
||||||
@@ -875,6 +880,7 @@ func drop_random_item():
|
|||||||
# Drop it
|
# Drop it
|
||||||
playerboard[slot_index] = -1
|
playerboard[slot_index] = -1
|
||||||
rpc("sync_playerboard", playerboard)
|
rpc("sync_playerboard", playerboard)
|
||||||
|
SfxManager.play("tile_scatter")
|
||||||
|
|
||||||
# Sync grid item
|
# Sync grid item
|
||||||
var cell = Vector3i(drop_pos.x, 1, drop_pos.y)
|
var cell = Vector3i(drop_pos.x, 1, drop_pos.y)
|
||||||
@@ -906,6 +912,7 @@ func drop_all_tiles():
|
|||||||
if dropped_count > 0:
|
if dropped_count > 0:
|
||||||
rpc("sync_playerboard", playerboard)
|
rpc("sync_playerboard", playerboard)
|
||||||
rpc("trigger_screen_shake", "targeted")
|
rpc("trigger_screen_shake", "targeted")
|
||||||
|
SfxManager.play("tile_scatter")
|
||||||
NotificationManager.send_message(self , NotificationManager.MESSAGES.CRITICALLY_HIT, NotificationManager.MessageType.WARNING)
|
NotificationManager.send_message(self , NotificationManager.MESSAGES.CRITICALLY_HIT, NotificationManager.MessageType.WARNING)
|
||||||
print("Player %s dropped %d tiles due to Super Push" % [name, dropped_count])
|
print("Player %s dropped %d tiles due to Super Push" % [name, dropped_count])
|
||||||
|
|
||||||
@@ -968,6 +975,7 @@ func on_stop_phase_violation():
|
|||||||
if main:
|
if main:
|
||||||
main.rpc("sync_grid_item", cell.x, cell.y, cell.z, item_id)
|
main.rpc("sync_grid_item", cell.x, cell.y, cell.z, item_id)
|
||||||
|
|
||||||
|
SfxManager.rpc("play_rpc", "tile_scatter")
|
||||||
NotificationManager.send_message(self , "STOP VIOLATION! Tiles scattered!", NotificationManager.MessageType.WARNING)
|
NotificationManager.send_message(self , "STOP VIOLATION! Tiles scattered!", NotificationManager.MessageType.WARNING)
|
||||||
|
|
||||||
func _find_multiple_drop_positions(count: int) -> Array:
|
func _find_multiple_drop_positions(count: int) -> Array:
|
||||||
@@ -2229,6 +2237,7 @@ func sync_grab_tekton(tekton_path: NodePath):
|
|||||||
is_attack_mode = false
|
is_attack_mode = false
|
||||||
|
|
||||||
SfxManager.play("pick_up_tekton_roaming")
|
SfxManager.play("pick_up_tekton_roaming")
|
||||||
|
play_pickup_animation()
|
||||||
print("[Player %s] Grabbed Tekton %s" % [name, tekton.name])
|
print("[Player %s] Grabbed Tekton %s" % [name, tekton.name])
|
||||||
|
|
||||||
func throw_tekton():
|
func throw_tekton():
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func grab_item(grid_position: Vector2i) -> bool:
|
|||||||
|
|
||||||
# Play pickup animation (synced across network)
|
# Play pickup animation (synced across network)
|
||||||
if player.is_multiplayer_authority() and player.has_method("sync_pickup_animation"):
|
if player.is_multiplayer_authority() and player.has_method("sync_pickup_animation"):
|
||||||
player.rpc("sync_pickup_animation")
|
player.rpc("sync_pickup_animation", item)
|
||||||
|
|
||||||
# === Optimistic Local Update (immediate visual feedback) ===
|
# === Optimistic Local Update (immediate visual feedback) ===
|
||||||
# Apply changes locally first, server will validate/sync
|
# Apply changes locally first, server will validate/sync
|
||||||
@@ -95,9 +95,7 @@ func grab_item(grid_position: Vector2i) -> bool:
|
|||||||
if special_tiles_manager:
|
if special_tiles_manager:
|
||||||
special_tiles_manager.add_powerup_from_item(item)
|
special_tiles_manager.add_powerup_from_item(item)
|
||||||
|
|
||||||
SfxManager.play("pick_up_power_tile")
|
# Animation and sound handled via sync_pickup_animation RPC above
|
||||||
# Animation for powerup?
|
|
||||||
# ...
|
|
||||||
|
|
||||||
# Skip adding to playerboard. Just consume.
|
# Skip adding to playerboard. Just consume.
|
||||||
else:
|
else:
|
||||||
@@ -311,6 +309,10 @@ func bot_try_grab_item() -> bool:
|
|||||||
|
|
||||||
player.playerboard[empty_slot] = item
|
player.playerboard[empty_slot] = item
|
||||||
|
|
||||||
|
# Play pickup animation for bot
|
||||||
|
if player.has_method("sync_pickup_animation"):
|
||||||
|
player.rpc("sync_pickup_animation", item)
|
||||||
|
|
||||||
var main = player.get_tree().get_root().get_node_or_null("Main")
|
var main = player.get_tree().get_root().get_node_or_null("Main")
|
||||||
if main:
|
if main:
|
||||||
main.rpc("sync_grid_item", current_cell.x, current_cell.y, current_cell.z, -1)
|
main.rpc("sync_grid_item", current_cell.x, current_cell.y, current_cell.z, -1)
|
||||||
@@ -338,6 +340,10 @@ func bot_try_grab_item() -> bool:
|
|||||||
if player.is_multiplayer_authority():
|
if player.is_multiplayer_authority():
|
||||||
player.playerboard[empty_slot] = item
|
player.playerboard[empty_slot] = item
|
||||||
|
|
||||||
|
# Play pickup animation for bot
|
||||||
|
if player.has_method("sync_pickup_animation"):
|
||||||
|
player.rpc("sync_pickup_animation", item)
|
||||||
|
|
||||||
var main = player.get_tree().get_root().get_node_or_null("Main")
|
var main = player.get_tree().get_root().get_node_or_null("Main")
|
||||||
if main:
|
if main:
|
||||||
main.rpc("sync_grid_item", cell.x, cell.y, cell.z, -1)
|
main.rpc("sync_grid_item", cell.x, cell.y, cell.z, -1)
|
||||||
|
|||||||
Reference in New Issue
Block a user