Merge branch 'Rycarus_ObjectConnection' into dev
This commit is contained in:
commit
c77169deba
18 changed files with 520 additions and 82 deletions
|
@ -4,17 +4,38 @@ extends CharacterBody2D
|
|||
@export var gravity = 50
|
||||
var jump_count = 1
|
||||
@export var jump_strength = 100
|
||||
@export var jump_strength_max = 300
|
||||
var is_touching_floor : bool = true
|
||||
var jump_buffer_timer : float
|
||||
var coyote_timer : float = 0.2 # 200 millisecond buffer
|
||||
var input_direction = 0 #To keep track of which direction we where moving in last frame
|
||||
var coyote_timer : float = 0.2
|
||||
var input_direction = 0
|
||||
@export var max_link_distance: float = 70.0
|
||||
var data_link: Line2D
|
||||
var target_scale
|
||||
|
||||
|
||||
@export var scale_duration: float = 0.5
|
||||
var current_selected = "none"
|
||||
var target_scale_player: Vector2 = Vector2(1, 1)
|
||||
|
||||
func _ready():
|
||||
data_link = $data_link
|
||||
|
||||
func _unhandled_input(event):
|
||||
if event.is_action_pressed("click"):
|
||||
var nearest_block = find_nearest_block()
|
||||
if nearest_block:
|
||||
if nearest_block.scale == Vector2(0.5, 0.5) and self.scale == Vector2(2.0, 2.0):
|
||||
nearest_block.scale_up()
|
||||
scale_down_player()
|
||||
elif nearest_block.scale == Vector2(1.0, 1.0) and self.scale == Vector2(1.0, 1.0):
|
||||
nearest_block.scale_down()
|
||||
scale_up_player()
|
||||
|
||||
|
||||
func get_input(delta):
|
||||
|
||||
var left = Input.is_action_pressed("player_left")
|
||||
var right = Input.is_action_pressed("player_right")
|
||||
|
||||
|
||||
if left and right:
|
||||
input_direction = 0
|
||||
elif left:
|
||||
|
@ -23,18 +44,16 @@ func get_input(delta):
|
|||
input_direction = 1
|
||||
else:
|
||||
input_direction = 0
|
||||
|
||||
# This line updates the player's velocity
|
||||
|
||||
velocity.x = input_direction * speed
|
||||
|
||||
|
||||
if is_on_floor():
|
||||
# reset the jump count
|
||||
is_touching_floor = true
|
||||
jump_count = 1
|
||||
coyote_timer = 0.2
|
||||
if jump_buffer_timer > 0:
|
||||
Jump()
|
||||
|
||||
|
||||
if not is_on_floor():
|
||||
if jump_buffer_timer > 0:
|
||||
jump_buffer_timer -= delta
|
||||
|
@ -42,43 +61,56 @@ func get_input(delta):
|
|||
coyote_timer -= delta
|
||||
else:
|
||||
jump_count = 0
|
||||
|
||||
if Input.is_action_just_pressed("player_jump"):
|
||||
|
||||
if Input.is_action_just_pressed("player_jump"):
|
||||
if jump_count > 0:
|
||||
Jump()
|
||||
else:
|
||||
jump_buffer_timer = 0.2 # set a timer to jump again once the player has reached the ground, provided the jump is is still being held down
|
||||
elif Input.is_action_pressed("player_jump"): #Fall less fast if we keep holding the button
|
||||
jump_buffer_timer = 0.2
|
||||
elif Input.is_action_pressed("player_jump"):
|
||||
velocity.y += -1 * 25
|
||||
|
||||
func _physics_process(delta):
|
||||
get_input(delta)
|
||||
velocity.y += gravity
|
||||
move_and_slide()
|
||||
|
||||
if(get_slide_collision_count() > 0):
|
||||
for i in get_slide_collision_count():
|
||||
var box = get_slide_collision(i).get_collider() as Box
|
||||
if scale.x == 2:
|
||||
if box and velocity.y >= 0:
|
||||
box.velocity.x = velocity.x*0.8
|
||||
else:
|
||||
if box and velocity.y >= 0 and box.scale.x < 2:
|
||||
box.velocity.x = velocity.x*0.8
|
||||
# print(jump_count) # Uncomment for debugging
|
||||
update_data_link()
|
||||
|
||||
func Jump():
|
||||
if scale.x == 1:
|
||||
velocity.y = -1 * jump_strength
|
||||
elif scale.x == 2:
|
||||
velocity.y = -1 * jump_strength_max
|
||||
velocity.y = -1 * jump_strength
|
||||
jump_count = 0
|
||||
is_touching_floor = false
|
||||
|
||||
|
||||
func _on_hurtbox_body_entered(body: Node2D) -> void:
|
||||
get_tree().reload_current_scene()
|
||||
|
||||
func update_data_link():
|
||||
var nearest_block = find_nearest_block()
|
||||
if nearest_block:
|
||||
data_link.visible = true
|
||||
data_link.set_point_position(0, Vector2.ZERO)
|
||||
data_link.set_point_position(1, get_transform().affine_inverse() * nearest_block.position)
|
||||
else:
|
||||
data_link.visible = false
|
||||
|
||||
func _on_area_2d_body_entered(body):
|
||||
print("Body entered")
|
||||
func find_nearest_block() -> Node2D:
|
||||
var closest_distance = max_link_distance
|
||||
var closest_block: Node2D = null
|
||||
for block in get_tree().get_nodes_in_group("scalable_blocks"):
|
||||
var distance = global_position.distance_to(block.global_position)
|
||||
if distance <= closest_distance:
|
||||
closest_distance = distance
|
||||
closest_block = block
|
||||
return closest_block
|
||||
|
||||
func start_scaling(target_node: Node2D, scale_value: Vector2):
|
||||
var tween = create_tween()
|
||||
tween.tween_property(target_node, "scale", scale_value, scale_duration)
|
||||
|
||||
func scale_up_player():
|
||||
target_scale_player = Vector2(2.0, 2.0)
|
||||
start_scaling(self, target_scale_player)
|
||||
|
||||
func scale_down_player():
|
||||
target_scale_player = Vector2(1.0, 1.0)
|
||||
start_scaling(self, target_scale_player)
|
||||
|
|
|
@ -1,28 +1,32 @@
|
|||
extends StaticBody2D
|
||||
|
||||
@export var scale_up_target: Vector2 = Vector2(3.0, 3.0)
|
||||
@export var scale_up_target: Vector2 = Vector2(1.0, 1.0)
|
||||
@export var scale_down_target: Vector2 = Vector2(0.5, 0.5)
|
||||
@export var scale_duration: float = 0.5
|
||||
@export var ui_actions: Node
|
||||
@export var small_sprite = preload("res://textures/block-orange.png")
|
||||
@export var large_sprite = preload("res://textures/block-blue.png")
|
||||
|
||||
func _ready():
|
||||
if ui_actions == null:
|
||||
ui_actions = get_parent().get_node("Path/To/UiActionsNode")
|
||||
add_to_group("scalable_blocks")
|
||||
|
||||
func _on_input_event(viewport, event, shape_idx):
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
if event.is_action_pressed("click"):
|
||||
if ui_actions.current_selected == "scale_up":
|
||||
scale_up()
|
||||
ui_actions.scale_up_player()
|
||||
elif ui_actions.current_selected == "scale_down":
|
||||
scale_down()
|
||||
ui_actions.scale_down_player()
|
||||
func _process(delta):
|
||||
change_sprite_based_on_scale()
|
||||
|
||||
func scale_up():
|
||||
var tween = create_tween()
|
||||
tween.tween_property(self, "scale", scale_up_target, scale_duration)
|
||||
change_sprite_based_on_scale()
|
||||
|
||||
func scale_down():
|
||||
var tween = create_tween()
|
||||
tween.tween_property(self, "scale", scale_down_target, scale_duration)
|
||||
change_sprite_based_on_scale()
|
||||
|
||||
func change_sprite_based_on_scale():
|
||||
var sprite = $Sprite2D
|
||||
|
||||
if scale == Vector2(0.5, 0.5):
|
||||
sprite.texture = small_sprite
|
||||
elif scale == Vector2(1.0, 1.0):
|
||||
sprite.texture = large_sprite
|
||||
|
|
|
@ -1,20 +1,19 @@
|
|||
extends Node
|
||||
|
||||
@export var player: CharacterBody2D
|
||||
|
||||
@export var player : CharacterBody2D
|
||||
@export var scale_duration: float = 0.5
|
||||
var current_selected = "none"
|
||||
@export var scale_duration: float = 0.5
|
||||
var target_scale_player: Vector2 = Vector2(1, 1)
|
||||
var target_scale_block: Vector2 = Vector2(1, 1)
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
func _on_input_event(viewport, event, shape_idx):
|
||||
if event.is_action_pressed("click"):
|
||||
if current_selected == "scale_up":
|
||||
current_selected = "scale_up"
|
||||
elif current_selected == "scale_down":
|
||||
current_selected = "scale_down"
|
||||
elif current_selected == "mirror":
|
||||
mirror()
|
||||
var nearest_block = player.find_nearest_block()
|
||||
if nearest_block and current_selected == "scale_up":
|
||||
nearest_block.scale_up()
|
||||
scale_up_player()
|
||||
elif nearest_block:
|
||||
nearest_block.scale_down()
|
||||
scale_down_player()
|
||||
|
||||
func select_up():
|
||||
current_selected = "scale_up"
|
||||
|
@ -30,11 +29,11 @@ func start_scaling(target_node: Node2D, scale_value: Vector2):
|
|||
tween.tween_property(target_node, "scale", scale_value, scale_duration)
|
||||
|
||||
func scale_up_player():
|
||||
target_scale_player = Vector2(0.5, 0.5)
|
||||
target_scale_player = Vector2(3.0, 3.0)
|
||||
start_scaling(player, target_scale_player)
|
||||
|
||||
func scale_down_player():
|
||||
target_scale_player = Vector2(2.0, 2.0)
|
||||
target_scale_player = Vector2(1.0, 1.0)
|
||||
start_scaling(player, target_scale_player)
|
||||
|
||||
func mirror():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue