| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -18,6 +18,12 @@ func _ready(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for player in get_node("/root/Level/Players").get_children(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							player.connect("body_entered", self, "player_collided", [player]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func _exit_tree(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						# We delete in pairs | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if other: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							maker_node.placement.placed.remove(index - 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							other.queue_free() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func init(maker): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var maker_portals = maker.placement.placed | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -29,33 +35,29 @@ func init(maker): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var color = color_set[int(second)] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var mat = SpatialMaterial.new() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						color.a = 0.5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						mat.flags_transparent = true | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						# color.a = 0.5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						# mat.flags_transparent = true | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						mat.albedo_color = color | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						get_node("MeshInstance").set_surface_material(0, mat) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						.init(maker) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func place(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						.place() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var second = index % 2 != 0 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if second: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							# Our responsibility to complete the pairing | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							other = maker_node.placement.placed[index - 1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							other.other = self | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func player_collided(with, player): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if with == self: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							portal(player) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func find_other(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var maker_portals = maker_node.placement.placed | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var count = maker_portals.size() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						# If index is odd, we're the second (1, 3...), if even, first (0, 4...) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var second = index % 2 != 0 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						var delta = -1 if second else 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if index + delta < count: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							other = maker_portals[index + delta] # Second-to-last: we're already included | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return other | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return null | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					func portal(player): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if player.player_info.is_right_team == maker_node.player_info.is_right_team: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if find_other(): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								var spawn_distance = 2 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if other: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								var spawn_distance = 1.75 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								# Find a sane place to spawn | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								# -Z is in the direction of the portal | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								# X is enough away from the portal to avoid infinite loop | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |