84 lines
2.7 KiB
GDScript
84 lines
2.7 KiB
GDScript
extends Node2D
|
|
|
|
var spawn_position=Vector2(100,100);
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
setup_edge_collisions()
|
|
|
|
func setup_edge_collisions():
|
|
var screen_size = get_viewport_rect().size
|
|
|
|
# Create a StaticBody2D for each edge
|
|
for i in range(4):
|
|
var body = StaticBody2D.new()
|
|
body.collision_layer=4 #walls
|
|
add_child(body)
|
|
|
|
var shape = CollisionShape2D.new()
|
|
body.add_child(shape)
|
|
|
|
var rect_shape = RectangleShape2D.new()
|
|
shape.shape = rect_shape
|
|
|
|
# Adjust size and position based on the edge
|
|
match i:
|
|
0: # Top
|
|
rect_shape.extents = Vector2(screen_size.x / 2, 10)
|
|
body.position = Vector2(screen_size.x / 2, 0)
|
|
1: # Bottom
|
|
rect_shape.extents = Vector2(screen_size.x / 2, 10)
|
|
body.position = Vector2(screen_size.x / 2, screen_size.y)
|
|
2: # Left
|
|
rect_shape.extents = Vector2(10, screen_size.y / 2)
|
|
body.position = Vector2(0, screen_size.y / 2)
|
|
3: # Right
|
|
rect_shape.extents = Vector2(10, screen_size.y / 2)
|
|
body.position = Vector2(screen_size.x, screen_size.y / 2)
|
|
|
|
func _input(event):
|
|
if event.is_action_pressed("escape"):
|
|
get_tree().change_scene_to_file("res://map_select.tscn")
|
|
get_node("/root/Sim").queue_free()
|
|
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
|
|
spawn_position=event.position
|
|
spawn()
|
|
$Timer.stop()
|
|
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_RIGHT:
|
|
spawn_position=event.position
|
|
$Timer.start()
|
|
|
|
func _on_timer_timeout():
|
|
spawn()
|
|
|
|
func spawn():
|
|
var new_player = load("res://player.tscn").instantiate()
|
|
new_player.get_node("Body2D").position = spawn_position
|
|
|
|
new_player.get_node("Body2D").apply_impulse(Vector2.from_angle(randf_range(0, 2 * PI)) * 100)
|
|
|
|
# Prepare the shape query parameters
|
|
var query_parameters = PhysicsShapeQueryParameters2D.new()
|
|
var collision_shape = new_player.get_node("Body2D/CollisionShape2D").shape
|
|
query_parameters.set_shape(collision_shape)
|
|
query_parameters.set_transform(Transform2D(0, spawn_position))
|
|
query_parameters.set_collision_mask(1)
|
|
|
|
# Get the Physics2DDirectSpaceState for collision checking
|
|
var space_state = get_world_2d().direct_space_state
|
|
|
|
# Check for collision
|
|
var collision_results = space_state.intersect_shape(query_parameters)
|
|
if collision_results.size() == 0:
|
|
# No collision, safe to add child
|
|
add_child(new_player)
|
|
else:
|
|
for collision in collision_results:
|
|
#print
|
|
if collision.collider.get_parent() is Pool:
|
|
collision.collider.get_parent()._on_decay_timer_timeout()
|
|
return
|
|
var marker = load("res://crosshair.tscn").instantiate()
|
|
marker.position = new_player.get_node("Body2D").position
|
|
add_child(marker)
|