Invincibility Shader (simple) New Death Shader dissolving Pit Areas Invincibility fixes for spikes and flying laser cutters Vending Machine Better global and level stats tracking
54 lines
1.7 KiB
GDScript
54 lines
1.7 KiB
GDScript
extends Node2D
|
|
const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
|
|
|
|
#Array of RayCast2D
|
|
onready var trigger_rays = $FlyingLaserCutterBody/Triggers.get_children()
|
|
onready var body = $FlyingLaserCutterBody
|
|
onready var local_facing: Vector2 = Vector2.RIGHT
|
|
onready var global_facing: Vector2 = local_facing.rotated(transform.get_rotation())
|
|
onready var slide_friction = 1.5
|
|
|
|
var flyoff_triggered = false
|
|
var has_hit_player = false
|
|
var velocity = 1
|
|
var max_velocity = 200
|
|
var acceleration_force = 1200
|
|
var mass = 10
|
|
|
|
# TODO Returing Laser cutter has broken collision and infinite inertia
|
|
# Maybe keep returning paths free and crush player when in the way
|
|
|
|
func _ready() -> void:
|
|
$FlyingLaserCutterBody/Sprite/AnimationPlayer.play("default")
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
if !flyoff_triggered:
|
|
for ray in trigger_rays:
|
|
# When player has been hit on the way
|
|
if (has_hit_player && body.position.x > 0):
|
|
break
|
|
if ray.is_colliding():
|
|
var collider = ray.get_collider()
|
|
if collider.is_in_group("player"):
|
|
flyoff_triggered = true
|
|
body.set("motion/sync_to_physics", false)
|
|
break
|
|
if body.position.x > 0:
|
|
velocity=1
|
|
body.position.x += (max_velocity/3)*-1*delta
|
|
elif body.position.x == 0:
|
|
has_hit_player = false
|
|
if flyoff_triggered:
|
|
velocity = PhysicsFunc.two_step_euler(
|
|
velocity, acceleration_force, mass, delta
|
|
)
|
|
velocity = clamp(velocity, 0, max_velocity)
|
|
var collision = body.move_and_collide(velocity*global_facing*delta,true)
|
|
if collision != null:
|
|
if !collision.collider.is_in_group("player"):
|
|
body.set("motion/sync_to_physics", true)
|
|
else:
|
|
has_hit_player = true
|
|
flyoff_triggered = false
|