diff --git a/Body2D.gd b/Body2D.gd deleted file mode 100644 index d3fcfea..0000000 --- a/Body2D.gd +++ /dev/null @@ -1,20 +0,0 @@ -extends RigidBody2D - -func _integrate_forces(state: PhysicsDirectBodyState2D): - var contact_count = state.get_contact_count() - for i in range(contact_count): - #print("bb") - var collider_object = state.get_contact_collider_object(i) - if collider_object and collider_object.get_parent() is Player: - handle_player_collision(collider_object.get_parent()) - if collider_object and collider_object.get_parent() is Pool: - handle_pool_collision(collider_object.get_parent()) - -func handle_player_collision(player: Player): - if $"..".is_carrying() and player.is_carrying(): - $"..".doubledrop(player) - $"..".drop() - player.drop() - -func handle_pool_collision(pool: Pool): - $"..".exchange_with(pool) diff --git a/Map.gd b/Map.gd index 38c806b..8ceb359 100644 --- a/Map.gd +++ b/Map.gd @@ -29,20 +29,20 @@ func spawm_pool(pos,red,green,blue): new_pool.mana_r=red new_pool.mana_g=green new_pool.mana_b=blue - new_pool.get_node("StaticBody2D/CollisionShape2D2").disabled=true; + 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.get_node("Body2D").position = pos + new_player.position = pos - new_player.get_node("Body2D").apply_impulse(vol) + new_player.apply_impulse(vol) # Prepare the shape query parameters var query_parameters = PhysicsShapeQueryParameters2D.new() - var collision_shape = new_player.get_node("Body2D/CollisionShape2D").shape + 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) @@ -63,7 +63,7 @@ func spawn_player(pos,vol): collision.collider.get_parent()._on_decay_timer_timeout() return var marker = Sprite2D.new() - marker.position = new_player.get_node("Body2D").position + marker.position = new_player.position marker.scale=Vector2(0.1,0.1) marker.texture = load("res://images/crosshair.png") add_child(marker) diff --git a/Player.gd b/Player.gd index 4842982..d75eb20 100644 --- a/Player.gd +++ b/Player.gd @@ -1,15 +1,33 @@ class_name Player -extends Node2D +extends RigidBody2D + +func _integrate_forces(state: PhysicsDirectBodyState2D): + var contact_count = state.get_contact_count() + for i in range(contact_count): + var collider_object = state.get_contact_collider_object(i) + if collider_object and collider_object is Player: + handle_player_collision(collider_object) + if collider_object and collider_object is Pool: + handle_pool_collision(collider_object) + +func handle_player_collision(player: Player): + if is_carrying() and player.is_carrying(): + doubledrop(player) + drop() + player.drop() + +func handle_pool_collision(pool: Pool): + exchange_with(pool) var carrying_r=0 var carrying_g=0 var carrying_b=0 func _process(_delta): - if $Body2D/CollisionShape2D.disabled: + if $CollisionShape2D.disabled: # Prepare the shape query parameters var query_parameters = PhysicsShapeQueryParameters2D.new() - var collision_shape = $Body2D/CollisionShape2D.shape + var collision_shape = $CollisionShape2D.shape query_parameters.set_shape(collision_shape) query_parameters.set_transform(Transform2D(0, position)) query_parameters.set_collision_mask(2) #2=pools @@ -20,7 +38,7 @@ func _process(_delta): # Check for collision var collision_results = space_state.intersect_shape(query_parameters) if collision_results.size() == 0: - $Body2D/CollisionShape2D.disabled=false + $CollisionShape2D.disabled=false #func _physics_process(delta): # if Input.is_action_pressed('move_up'): @@ -33,25 +51,21 @@ func _process(_delta): # velocity.x += 1 # if Input.is_action_just_pressed('take'): # drop() -# -# var collision_info = move_and_collide(velocity * delta) -# if collision_info: -# velocity = velocity.bounce(collision_info.get_normal()) -# var collider=collision_info.get_collider(); -# if collider.get_parent() is Pool: -# exchange_with(collider.get_parent()) -# collider.get_parent().update() -# if collider.get_parent() is Player: -# drop() -# update() func drop(): if not is_carrying(): return - #if Pool.spawn($Body2D.position,carrying_r,carrying_g,carrying_b): - #carrying_r=0 - #carrying_g=0 - #carrying_b=0 + var new_pool: Pool = load("res://pool.tscn").instantiate() + new_pool.position = position + new_pool.mana_r=carrying_r + new_pool.mana_g=carrying_g + new_pool.mana_b=carrying_b + new_pool.get_node("CollisionShape2D2").disabled=true; + carrying_r=0 + carrying_g=0 + carrying_b=0 + get_tree().root.get_node("Sim/Map").call_deferred("add_child",new_pool) + update() func doubledrop(player: Player): if not is_carrying() or not player.is_carrying(): diff --git a/Pool.gd b/Pool.gd index b0df456..0cb1741 100644 --- a/Pool.gd +++ b/Pool.gd @@ -1,6 +1,6 @@ @tool class_name Pool -extends Node2D +extends StaticBody2D @export var mana_r: int = 10 @export var mana_g: int = 10 @@ -12,10 +12,10 @@ func _ready(): # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): - if $StaticBody2D/CollisionShape2D2.disabled: + if $CollisionShape2D2.disabled: # Prepare the shape query parameters var query_parameters = PhysicsShapeQueryParameters2D.new() - var collision_shape = $StaticBody2D/CollisionShape2D2.shape + var collision_shape = $CollisionShape2D2.shape query_parameters.set_shape(collision_shape) query_parameters.set_transform(Transform2D(0, position)) query_parameters.set_collision_mask(1) #1=players @@ -26,7 +26,7 @@ func _process(_delta): # Check for collision var collision_results = space_state.intersect_shape(query_parameters) if collision_results.size() == 0: - $StaticBody2D/CollisionShape2D2.disabled=false + $CollisionShape2D2.disabled=false update() pass diff --git a/player.tscn b/player.tscn index 5a9614c..4b5ef82 100644 --- a/player.tscn +++ b/player.tscn @@ -1,26 +1,22 @@ -[gd_scene load_steps=6 format=3 uid="uid://bu6pswk806qv6"] +[gd_scene load_steps=5 format=3 uid="uid://bu6pswk806qv6"] [ext_resource type="Script" path="res://Player.gd" id="1_kr26t"] [ext_resource type="PhysicsMaterial" uid="uid://6vo1o6je0duv" path="res://physics/no_friction.tres" id="2_5k2ia"] [ext_resource type="Texture2D" uid="uid://clyn507dro67" path="res://images/player.png" id="2_cxs7h"] -[ext_resource type="Script" path="res://Body2D.gd" id="3_rse87"] [sub_resource type="CircleShape2D" id="CircleShape2D_yt706"] -[node name="Player" type="Node2D"] -script = ExtResource("1_kr26t") - -[node name="Body2D" type="RigidBody2D" parent="."] +[node name="Player" type="RigidBody2D" groups=["Persist"]] collision_mask = 7 physics_material_override = ExtResource("2_5k2ia") max_contacts_reported = 10 contact_monitor = true -script = ExtResource("3_rse87") +script = ExtResource("1_kr26t") -[node name="Mono-polygon" type="Sprite2D" parent="Body2D"] +[node name="Mono-polygon" type="Sprite2D" parent="."] scale = Vector2(0.1, 0.1) texture = ExtResource("2_cxs7h") -[node name="CollisionShape2D" type="CollisionShape2D" parent="Body2D"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] scale = Vector2(0.8, 0.8) shape = SubResource("CircleShape2D_yt706") diff --git a/pool.tscn b/pool.tscn index 9beb1a0..ac9b6ce 100644 --- a/pool.tscn +++ b/pool.tscn @@ -5,19 +5,14 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_fmfn8"] -[node name="Pool" type="Node2D"] -modulate = Color(0.3, 1, 1, 1) -scale = Vector2(0.151658, 0.151658) -script = ExtResource("1_tvic3") -mana_r = 3 - -[node name="StaticBody2D" type="StaticBody2D" parent="."] +[node name="StaticBody2D" type="StaticBody2D"] collision_layer = 2 collision_mask = 3 +script = ExtResource("1_tvic3") -[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"] +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] scale = Vector2(8.5, 8.5) shape = SubResource("CircleShape2D_fmfn8") -[node name="Icon" type="Sprite2D" parent="StaticBody2D"] +[node name="Icon" type="Sprite2D" parent="."] texture = ExtResource("2_45evg")