105 lines
3.5 KiB
GDScript
105 lines
3.5 KiB
GDScript
extends KinematicBody2D
|
|
|
|
var velocity = Vector2.ZERO
|
|
var is_moving = false
|
|
var is_holding_shard = true
|
|
var has_respawned = false
|
|
var first_lead = true
|
|
onready var death_particles = $DeathSplatter
|
|
onready var sprite = $Sprite
|
|
onready var anims = $AnimationPlayer
|
|
onready var raycast = $RayCast2D
|
|
onready var respawn_raycast = $RespawnRaycast
|
|
onready var shard_position = $Position2D
|
|
onready var start_position = position
|
|
onready var blink_timer = $BlinkTimer
|
|
onready var text_anim = $TextAnim
|
|
onready var cop_detector = $CopDetector
|
|
const shard = preload("res://objects/collectibles/shard.tscn")
|
|
const BloodSpray := preload("res://objects/environment/blood/blood_spray.tscn")
|
|
#DIALOGUE
|
|
const here_take_this = preload("res://audio/sounds/msx_here_take_this.wav")
|
|
const come_here = preload("res://audio/sounds/msx_come_here.ogg")
|
|
const help_me = preload("res://audio/sounds/msx_help_me_get_outta_here.ogg")
|
|
const fuck = preload("res://audio/sounds/msx_fuck.ogg")
|
|
const fucking_cop = preload("res://audio/sounds/msx_fucking_cop.ogg")
|
|
const goddammit = preload("res://audio/sounds/msx_goddammit.ogg")
|
|
const motherfucker = preload("res://audio/sounds/msx_motherfucker.ogg")
|
|
const shit = preload("res://audio/sounds/msx_shit.ogg")
|
|
|
|
func _ready():
|
|
raycast.add_exception($Hitbox)
|
|
blink_timer.start(rand_range(5.0,7.0))
|
|
|
|
func _physics_process(delta):
|
|
if is_moving: velocity.x = -50
|
|
#Stop when see something
|
|
if raycast.is_colliding():
|
|
#stop behind sg
|
|
velocity.x = 0
|
|
if respawn_raycast.is_colliding():
|
|
#start moving again after respawning when seeing sg
|
|
if raycast.get_collider() != null:
|
|
if raycast.get_collider().is_in_group("player_hitbox"):
|
|
if first_lead == true:
|
|
Audio.play_sound(help_me,Audio.ac_voice)
|
|
text_anim.play("help me")
|
|
first_lead = false
|
|
is_moving = true
|
|
velocity.y += 128 * delta
|
|
velocity = move_and_slide_with_snap(velocity, Vector2.DOWN, Vector2.UP, true)
|
|
#Anims
|
|
if velocity.x == 0:
|
|
if !anims.get_current_animation() == "give" && !anims.get_current_animation() == "respawn" && !anims.get_current_animation() == "blink" && !anims.get_current_animation() == "come here" && !anims.get_current_animation() == "help me": anims.play("idle")
|
|
else:
|
|
anims.play("walk")
|
|
#Stop at the end of path and give shard
|
|
if position.x <= 80:
|
|
is_moving = false
|
|
velocity.x = 0
|
|
if is_holding_shard:
|
|
anims.play("give")
|
|
#Cop detector
|
|
if cop_detector.is_colliding():
|
|
print(cop_detector.get_collider())
|
|
|
|
func spawn_shard():
|
|
Audio.play_sound(here_take_this,Audio.ac_voice)
|
|
var ShardInstance = shard.instance()
|
|
ShardInstance.global_position = Vector2(shard_position.global_position.x,shard_position.global_position.y)
|
|
ShardInstance.number = 1
|
|
get_owner().add_child(ShardInstance)
|
|
is_holding_shard = false
|
|
|
|
func switch_action():
|
|
Audio.play_sound(come_here,Audio.ac_voice)
|
|
anims.play("come here")
|
|
|
|
func spray_blood():
|
|
for i in 16:
|
|
var spray = BloodSpray.instance()
|
|
spray.pause_mode = PAUSE_MODE_PROCESS
|
|
Physics2DServer.set_active(true)
|
|
spray.global_position = global_position
|
|
spray.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
|
|
spray.stains_player = false
|
|
get_parent().add_child(spray)
|
|
|
|
func die():
|
|
#Create particles
|
|
remove_child(death_particles)
|
|
get_parent().add_child(death_particles)
|
|
death_particles.global_position = global_position
|
|
death_particles.emitting = true
|
|
spray_blood()
|
|
Audio.play_sound(Audio.a_msx_die,Audio.ac_die)
|
|
is_moving = false
|
|
velocity.x = 0
|
|
position = start_position
|
|
anims.play("respawn")
|
|
has_respawned = true
|
|
|
|
|
|
func _on_BlinkTimer_timeout():
|
|
anims.play("blink")
|
|
blink_timer.start(rand_range(5.0,7.0))
|