feat: Overhaul of the Game Over UI, custom texture integrations, and fixing visual artifacts.
This commit is contained in:
@@ -14,6 +14,7 @@ var active_safe_zone_rects: Array[Rect2i] = []
|
||||
var spawned_safe_zones: int = 0
|
||||
var _safe_zone_animating: bool = false
|
||||
var _outline_nodes: Array[Node3D] = [] # Track perimeter outline containers for cleanup
|
||||
var _cached_safe_zone_mesh: Mesh = null
|
||||
|
||||
# Power-Up Tile Spawning
|
||||
const POWERUP_TILES = [11, 14] # Speed, Ghost (Freeze and Wall excluded in this mode)
|
||||
@@ -654,7 +655,10 @@ func _animate_safe_zone_appear():
|
||||
_safe_zone_animating = false
|
||||
return
|
||||
|
||||
var original_mesh = gridmap.mesh_library.get_item_mesh(TILE_SAFE)
|
||||
if not _cached_safe_zone_mesh:
|
||||
_cached_safe_zone_mesh = gridmap.mesh_library.get_item_mesh(TILE_SAFE)
|
||||
|
||||
var original_mesh = _cached_safe_zone_mesh
|
||||
if not is_instance_valid(original_mesh):
|
||||
_safe_zone_animating = false
|
||||
return
|
||||
@@ -854,12 +858,10 @@ func _animate_safe_zone_disappear():
|
||||
var cur_mat = cur_mesh.material
|
||||
if not is_instance_valid(cur_mat): return
|
||||
|
||||
var fade_mat: StandardMaterial3D = cur_mat.duplicate()
|
||||
var fade_mesh = cur_mesh.duplicate()
|
||||
fade_mesh.material = fade_mat
|
||||
gridmap.mesh_library.set_item_mesh(TILE_SAFE, fade_mesh)
|
||||
# Instead of continuously duplicating, use the current duplicated material for tweening.
|
||||
var fade_mat: StandardMaterial3D = cur_mat
|
||||
|
||||
var start_alpha: float = cur_mat.albedo_color.a
|
||||
var start_alpha: float = fade_mat.albedo_color.a
|
||||
var tween = create_tween()
|
||||
|
||||
# Phase 1 — Flicker brighten: alpha → 0.95 in 0.15s (warn the player)
|
||||
@@ -895,6 +897,17 @@ func _animate_safe_zone_disappear():
|
||||
func(a: float): if is_instance_valid(omat): omat.albedo_color.a = a,
|
||||
1.0, 0.0, 0.4
|
||||
).set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_EXPO)
|
||||
|
||||
# Wait for animation to finish, then free outlines locally
|
||||
await get_tree().create_timer(0.6).timeout
|
||||
for outline in _outline_nodes:
|
||||
if is_instance_valid(outline):
|
||||
outline.queue_free()
|
||||
_outline_nodes.clear()
|
||||
|
||||
# Restore the original safe zone mesh to prevent material/alpha leakage
|
||||
if _cached_safe_zone_mesh and gridmap and gridmap.mesh_library:
|
||||
gridmap.mesh_library.set_item_mesh(TILE_SAFE, _cached_safe_zone_mesh)
|
||||
|
||||
func _clear_dynamic_safe_zones():
|
||||
var gridmap = get_parent().get_node_or_null("EnhancedGridMap")
|
||||
@@ -926,11 +939,8 @@ func _clear_dynamic_safe_zones():
|
||||
active_safe_zone_rects.clear()
|
||||
spawned_safe_zones = 0
|
||||
|
||||
# Free all outline containers now that the animation has finished
|
||||
for outline in _outline_nodes:
|
||||
if is_instance_valid(outline):
|
||||
outline.queue_free()
|
||||
_outline_nodes.clear()
|
||||
# Outline deletion and mesh restoration is now handled locally by each client
|
||||
# at the end of _animate_safe_zone_disappear()
|
||||
|
||||
func _scatter_player_tiles(player_node: Node):
|
||||
"""Server: Take all tiles from player's playerboard and scatter them onto nearby grid cells."""
|
||||
|
||||
Reference in New Issue
Block a user