Adds growth value to fruit to allow for more rapid growth of the snake
							parent
							
								
									7de5b50884
								
							
						
					
					
						commit
						fefd1aa015
					
				| 
						 | 
				
			
			@ -16,3 +16,19 @@ shape = SubResource("RectangleShape2D_hf2pu")
 | 
			
		|||
 | 
			
		||||
[node name="Sprite2D" type="Sprite2D" parent="."]
 | 
			
		||||
texture = SubResource("PlaceholderTexture2D_kum7e")
 | 
			
		||||
 | 
			
		||||
[node name="Label" type="Label" parent="."]
 | 
			
		||||
anchors_preset = 8
 | 
			
		||||
anchor_left = 0.5
 | 
			
		||||
anchor_top = 0.5
 | 
			
		||||
anchor_right = 0.5
 | 
			
		||||
anchor_bottom = 0.5
 | 
			
		||||
offset_left = -20.0
 | 
			
		||||
offset_top = -11.5
 | 
			
		||||
offset_right = 20.0
 | 
			
		||||
offset_bottom = 11.5
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
text = "1"
 | 
			
		||||
horizontal_alignment = 1
 | 
			
		||||
vertical_alignment = 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,13 @@ const TILE_SIZE = 20
 | 
			
		|||
 | 
			
		||||
var all_positions : Array[Vector2] = []
 | 
			
		||||
 | 
			
		||||
const possible_growth_amounts = [1,1,1,3,3,5,10]
 | 
			
		||||
 | 
			
		||||
var growth_amount : int = 1
 | 
			
		||||
 | 
			
		||||
@onready
 | 
			
		||||
var label : Label = $Label
 | 
			
		||||
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	var level : Area2D = get_tree().get_first_node_in_group("Level")
 | 
			
		||||
	var x_bounds : Vector2 = level.position.x * Vector2.ONE + Vector2(-TILE_SIZE, TILE_SIZE) * level.scale.x / 2
 | 
			
		||||
| 
						 | 
				
			
			@ -31,3 +38,5 @@ func respawn() -> void:
 | 
			
		|||
	var chosen_position = possible_positions.pick_random()
 | 
			
		||||
	
 | 
			
		||||
	position = chosen_position
 | 
			
		||||
	growth_amount = possible_growth_amounts.pick_random()
 | 
			
		||||
	label.text = str(growth_amount)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ var timer_ref : Timer = $"../Timer"
 | 
			
		|||
 | 
			
		||||
var next_part : SnakePart = null
 | 
			
		||||
var skip_next_move_propagation : bool = false
 | 
			
		||||
var queued_growth : int = 0
 | 
			
		||||
 | 
			
		||||
signal do_movement(new_dir)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +70,8 @@ func process_movement(new_direction : Vector2) -> void:
 | 
			
		|||
	# The head needs to check if we are about to collide with something
 | 
			
		||||
	if part_type == PartTypes.HEAD:
 | 
			
		||||
		check_movement()
 | 
			
		||||
		if queued_growth:
 | 
			
		||||
			extend()
 | 
			
		||||
	
 | 
			
		||||
	# Update the position of this part
 | 
			
		||||
	position = (position + current_direction * TILE_SIZE).snapped(Vector2.ONE * TILE_SIZE)
 | 
			
		||||
| 
						 | 
				
			
			@ -106,11 +109,13 @@ func check_movement() -> void:
 | 
			
		|||
		match object_in_path.part_type:
 | 
			
		||||
			PartTypes.BODY:
 | 
			
		||||
				lose_game()
 | 
			
		||||
			PartTypes.DEAD:
 | 
			
		||||
				lose_game()
 | 
			
		||||
			PartTypes.TAIL:
 | 
			
		||||
				ouroboros()
 | 
			
		||||
	if object_in_path is Fruit:
 | 
			
		||||
		queued_growth += object_in_path.growth_amount
 | 
			
		||||
		object_in_path.respawn()
 | 
			
		||||
		extend()
 | 
			
		||||
 | 
			
		||||
func extend() -> void:
 | 
			
		||||
	# Remove old connection to previous next part
 | 
			
		||||
| 
						 | 
				
			
			@ -134,6 +139,9 @@ func extend() -> void:
 | 
			
		|||
	# Mark the next movement to not propagate the movement down the chain
 | 
			
		||||
	skip_next_move_propagation = true
 | 
			
		||||
	
 | 
			
		||||
	# Mark the growth step as done
 | 
			
		||||
	queued_growth -= 1
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
func lose_game() -> void:
 | 
			
		||||
	# You lose!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue