71 lines
2.3 KiB
GDScript
71 lines
2.3 KiB
GDScript
extends Node2D
|
|
|
|
var mouse_down_position = Vector2()
|
|
|
|
func _unhandled_input(event):
|
|
if event is InputEventMouseButton:
|
|
if event.button_index == MOUSE_BUTTON_LEFT:
|
|
if event.pressed:
|
|
# Record the position where the mouse was pressed down
|
|
mouse_down_position = get_global_mouse_position()
|
|
else:
|
|
# Handle mouse button release
|
|
var pos = get_global_mouse_position()
|
|
var vol = pos - mouse_down_position
|
|
spawn(mouse_down_position,vol)
|
|
|
|
func spawn(pos,vol):
|
|
var r=int($"../ScreenOverlay/HUD/HBoxContainer/Colors/Red".text)
|
|
var g=int($"../ScreenOverlay/HUD/HBoxContainer/Colors/Green".text)
|
|
var b=int($"../ScreenOverlay/HUD/HBoxContainer/Colors/Blue".text)
|
|
if r+g+b>0:
|
|
spawm_pool(pos,r,g,b)
|
|
else:
|
|
spawn_player(pos,vol)
|
|
|
|
func spawm_pool(pos,red,green,blue):
|
|
var new_pool: Pool = load("res://pool.tscn").instantiate()
|
|
new_pool.position = pos
|
|
new_pool.mana_r=red
|
|
new_pool.mana_g=green
|
|
new_pool.mana_b=blue
|
|
new_pool.get_node("CollisionShape2D2").disabled=true;
|
|
#new_pool.get_node("StaticBody2D/CollisionShape2D2").set_deferred("disabled", true)
|
|
|
|
get_tree().root.get_node("Sim/Map").call_deferred("add_child",new_pool)
|
|
|
|
func spawn_player(pos,vol):
|
|
var new_player = load("res://player.tscn").instantiate()
|
|
new_player.position = pos
|
|
|
|
new_player.apply_impulse(vol)
|
|
|
|
# Prepare the shape query parameters
|
|
var query_parameters = PhysicsShapeQueryParameters2D.new()
|
|
var collision_shape = new_player.get_node("CollisionShape2D").shape
|
|
query_parameters.set_shape(collision_shape)
|
|
query_parameters.set_transform(Transform2D(0, pos))
|
|
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:
|
|
new_player.queue_free()
|
|
collision.collider.get_parent()._on_decay_timer_timeout()
|
|
return
|
|
var marker = Sprite2D.new()
|
|
marker.position = new_player.position
|
|
marker.scale=Vector2(0.1,0.1)
|
|
marker.texture = load("res://images/crosshair.png")
|
|
add_child(marker)
|
|
new_player.queue_free()
|