working force push with raycast

This commit is contained in:
GabriellePipo committed 2025-01-13 19:30:20 -05:00
1 parent 14f739c428
commit 6f55d9442c
5 files changed
+93 -27

No files matched your search

+1 -2
View File
@@ -8,10 +8,9 @@ func _ready():
timer.wait_time = 1
timer.one_shot = false
timer.connect("timeout", secondCounter)
timer.start()
# timer.start()
func secondCounter():
print("one second")
countdown -=1
if countdown <=0:
print("you lose")
+43 -10
View File
@@ -3,31 +3,64 @@ extends CharacterBody2D
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
@export var PUSH_FORCE = 90
@export var BUMP_FORCE = 90
# Shove attack
@onready var right_ray: RayCast2D = $RightRay
@onready var left_ray: RayCast2D = $LeftRay
var faceleft = false
var pushTarget
var pushRightEnabled = false
var pushLeftEnabled = false
@export var PUSH_FORCE = 700
# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
func _physics_process(delta):
# Add the gravity.
if not is_on_floor():
velocity.y += gravity * delta
# Handle jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
if Input.is_action_just_pressed("jump") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var direction = Input.get_axis("ui_left", "ui_right")
# shove attack
if Input.is_action_just_pressed("shove"):
if pushRightEnabled && faceleft == false:
pushTarget.apply_central_impulse(Vector2(1,0) * PUSH_FORCE * 2)
if pushLeftEnabled && faceleft:
pushTarget.apply_central_impulse(Vector2(-1,0) * PUSH_FORCE * 2)
var direction = Input.get_axis("left", "right")
if direction:
velocity.x = direction * SPEED
if direction<0:
faceleft = true
if direction>0:
faceleft = false
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
move_and_slide()
if right_ray.is_colliding():
if not faceleft:
var collider = right_ray.get_collider()
if collider is RigidBody2D:
pushTarget = collider
pushRightEnabled = true
else:
pushRightEnabled = false
if left_ray.is_colliding():
if faceleft:
var collider = left_ray.get_collider()
if collider is RigidBody2D:
pushTarget = collider
pushLeftEnabled = true
else:
pushLeftEnabled = false
for i in get_slide_collision_count():
var c = get_slide_collision(i)
if c.get_collider() is RigidBody2D:
c.get_collider().apply_central_impulse(-c.get_normal() * PUSH_FORCE)
c.get_collider().apply_central_impulse(-c.get_normal() * BUMP_FORCE)