Changing bridge zindex and body set layer and mask from bridge process function to each bridge area on_body_entered and on_body_exited. This change optimize code avoiding to set zindex of bridge and body layers and mask each frame. The script bridge is not necessary anymore.

This commit is contained in:
penelope 2025-06-21 21:11:11 -03:00
parent 724df1b070
commit 2490ca1e37
5 changed files with 29 additions and 80 deletions

View File

@ -1,23 +1,19 @@
extends Area2D
class_name BellowBridgeArea
var is_character_bellow_bridge: bool = false
var character_body: Node2D = null
func _on_body_entered(_body: Node2D) -> void:
self._set_character_body_bellow_bridge(_body, true)
if _body is BaseCharacter:
var bridge: TileMapLayer = self.get_parent()
bridge.z_index = 2
_body.set_collision_layer_value(4, false)
_body.set_collision_mask_value(4, false)
print("entering bellow bridge")
func _on_body_exited(_body: Node2D) -> void:
self._set_character_body_bellow_bridge(_body, false)
func _set_character_body_bellow_bridge(_body: Node2D, _state: bool) -> void:
if _body is BaseCharacter:
self.is_character_bellow_bridge = _state
self.character_body = _body
print("bellow bridge: " + str(_state))
func get_character_body_bellow_bridge() -> bool:
return self.is_character_bellow_bridge
func get_body() -> Node2D:
return self.character_body
var bridge: TileMapLayer = self.get_parent()
bridge.z_index = 0
_body.set_collision_layer_value(4, true)
_body.set_collision_mask_value(4, true)
print("exiting bellow bridge")

View File

@ -1,25 +1,22 @@
extends Area2D
class_name BridgeArea
var character_body: Node2D = null
var is_character_on_bridge: bool = false
func _on_body_entered(_body: Node2D) -> void:
#_body.update_collision_layer_mask("in")
self._set_character_body_on_bridge(_body, true)
if _body is BaseCharacter:
_body.set_collision_layer_value(8, false)
_body.set_collision_mask_value(8, false)
_body.set_collision_layer_value(1, false)
_body.set_collision_mask_value(1, false)
_body.set_collision_layer_value(2, true)
_body.set_collision_mask_value(2, true)
print("entering on bridge")
func _on_body_exited(_body: Node2D) -> void:
#_body.update_collision_layer_mask("out")
self._set_character_body_on_bridge(_body, false)
func _set_character_body_on_bridge(_body: Node2D, _state: bool) -> void:
if _body is BaseCharacter:
self.character_body = _body
self.is_character_on_bridge = _state
print("on bridge: " + str(_state))
func get_character_body_on_bridge() -> bool:
return self.is_character_on_bridge
func get_body() -> Node2D:
return self.character_body
_body.set_collision_layer_value(8, true)
_body.set_collision_mask_value(8, true)
_body.set_collision_layer_value(1, true)
_body.set_collision_mask_value(1, true)
_body.set_collision_layer_value(2, false)
_body.set_collision_mask_value(2, false)
print("exiting on bridge")

View File

@ -1,39 +0,0 @@
extends TileMapLayer
class_name Bridge
@export_category("Objects")
@export var bellow_bridge_area: Area2D
@export var on_bridge_area: Area2D
func _process(_delta: float) -> void:
var character_body_bellow_bridge: Node2D = bellow_bridge_area.get_body()
var character_body_on_bridge: Node2D = on_bridge_area.get_body()
if character_body_bellow_bridge:
if bellow_bridge_area.get_character_body_bellow_bridge():
character_body_bellow_bridge.set_collision_layer_value(4, false)
character_body_bellow_bridge.set_collision_mask_value(4, false)
self.z_index = 2
else:
character_body_bellow_bridge.set_collision_layer_value(4, true)
character_body_bellow_bridge.set_collision_mask_value(4, false)
self.z_index = 0
if character_body_on_bridge:
if on_bridge_area.get_character_body_on_bridge():
character_body_on_bridge.set_collision_layer_value(8, false)
character_body_on_bridge.set_collision_mask_value(8, false)
character_body_on_bridge.set_collision_layer_value(1, false)
character_body_on_bridge.set_collision_mask_value(1, false)
character_body_on_bridge.set_collision_layer_value(2, true)
character_body_on_bridge.set_collision_mask_value(2, true)
else:
character_body_on_bridge.set_collision_layer_value(8, true)
character_body_on_bridge.set_collision_mask_value(8, true)
character_body_on_bridge.set_collision_layer_value(1, true)
character_body_on_bridge.set_collision_mask_value(1, true)
character_body_on_bridge.set_collision_layer_value(2, false)
character_body_on_bridge.set_collision_mask_value(2, false)

View File

@ -1 +0,0 @@
uid://jqtagkf51o2

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=37 format=4 uid="uid://dkfrltbqlycy0"]
[gd_scene load_steps=36 format=4 uid="uid://dkfrltbqlycy0"]
[ext_resource type="Texture2D" uid="uid://byqnrxn13bbnp" path="res://Terrain/Water/Water.png" id="1_1aeul"]
[ext_resource type="Texture2D" uid="uid://b6wic25dxw41l" path="res://Terrain/Water/Foam/Foam.png" id="2_qnvmo"]
@ -11,7 +11,6 @@
[ext_resource type="Texture2D" uid="uid://ljb2glg7ikd3" path="res://Terrain/Ground/Shadows.png" id="9_osja2"]
[ext_resource type="Texture2D" uid="uid://dvdid120sw0q3" path="res://Terrain/Bridge/Bridge_All.png" id="10_v8sh6"]
[ext_resource type="Script" uid="uid://dirg5mq4y4nk0" path="res://Interactables/on_bridge_area.gd" id="11_oe1b3"]
[ext_resource type="Script" uid="uid://jqtagkf51o2" path="res://Terrain/bridge.gd" id="11_pko0k"]
[ext_resource type="Script" uid="uid://bg2dqq8ebhkjs" path="res://Interactables/bellow_bridge_area.gd" id="13_qwqgt"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_qnvmo"]
@ -282,13 +281,10 @@ tile_set = SubResource("TileSet_osja2")
tile_map_data = PackedByteArray("AAALAAkAAAAAAAAAAAAOAAkAAAACAAAAAAAUAAoAAAACAAAAAAAUAAwAAAACAAIAAAARAAwAAAAAAAIAAAALAAsAAAAAAAIAAAALAAoAAAAAAAEAAAAMAAkAAAABAAAAAAANAAkAAAABAAAAAAAPAAoAAAABAAAAAAAQAAoAAAABAAAAAAARAAoAAAABAAAAAAASAAoAAAABAAAAAAATAAoAAAABAAAAAAASAAwAAAABAAIAAAATAAwAAAABAAIAAAAUAAsAAAACAAEAAAAMAAsAAAABAAIAAAANAAsAAAABAAIAAAAOAAsAAAABAAIAAAAPAAsAAAABAAIAAAAQAAsAAAABAAIAAAAMAAoAAAABAAEAAAANAAoAAAABAAEAAAAOAAoAAAABAAEAAAARAAsAAAABAAEAAAASAAsAAAABAAEAAAATAAsAAAABAAEAAAA=")
tile_set = SubResource("TileSet_pko0k")
[node name="Bridge" type="TileMapLayer" parent="." node_paths=PackedStringArray("bellow_bridge_area", "on_bridge_area")]
[node name="Bridge" type="TileMapLayer" parent="."]
tile_map_data = PackedByteArray("AAAWAAsAAAAAAAAAAAAXAAsAAAABAAAAAAAYAAsAAAABAAAAAAAZAAsAAAABAAAAAAAaAAsAAAABAAAAAAAbAAsAAAABAAAAAAAcAAsAAAABAAAAAAAdAAsAAAABAAAAAAAeAAsAAAABAAAAAAAfAAsAAAABAAAAAAAgAAsAAAABAAAAAAAhAAsAAAABAAAAAAAiAAsAAAABAAAAAAAjAAsAAAABAAAAAAAkAAsAAAABAAAAAAAlAAsAAAABAAAAAAAmAAsAAAABAAAAAAAnAAsAAAABAAAAAAAoAAsAAAABAAAAAAApAAsAAAACAAAAAAA=")
tile_set = SubResource("TileSet_3cg8g")
collision_visibility_mode = 1
script = ExtResource("11_pko0k")
bellow_bridge_area = NodePath("BellowBridgeArea")
on_bridge_area = NodePath("OnBridgeArea")
[node name="OnBridgeArea" type="Area2D" parent="Bridge"]
position = Vector2(1459, 730)
@ -298,7 +294,7 @@ script = ExtResource("11_oe1b3")
[node name="OnBridgeCollision" type="CollisionPolygon2D" parent="Bridge/OnBridgeArea"]
position = Vector2(-13.6208, -5.48883)
polygon = PackedVector2Array(-20, -20, 26, -20, 26, -5, 1180, -5, 1180, -20, 1230, -20, 1230, 50, 1180, 50, 1180, 26, 26, 26, 26, 50, -20, 50)
polygon = PackedVector2Array(-12, -3, 1220, -3, 1220, 26, -12, 26)
[node name="BellowBridgeArea" type="Area2D" parent="Bridge"]
collision_layer = 128