12345678910111213141516171819202122232425262728293031323334 |
- extends Area2D
- var in_area: Array = []
- var from_player: int
- # Called from the animation.
- func explode():
- if not is_multiplayer_authority():
- # Explode only on authority.
- return
- for p in in_area:
- if p.has_method("exploded"):
- # Checks if there is wall in between bomb and the object
- var world_state: PhysicsDirectSpaceState2D = get_world_2d().direct_space_state
- var query := PhysicsRayQueryParameters2D.create(position, p.position)
- query.hit_from_inside = true
- var result: Dictionary = world_state.intersect_ray(query)
- if not result.collider is TileMap:
- # Exploded can only be called by the authority, but will also be called locally.
- p.exploded.rpc(from_player)
- func done():
- if is_multiplayer_authority():
- queue_free()
- func _on_bomb_body_enter(body):
- if not body in in_area:
- in_area.append(body)
- func _on_bomb_body_exit(body):
- in_area.erase(body)
|