SUPERSLIMES
This commit is contained in:
parent
3b835b78f1
commit
8f2b42f968
3 changed files with 149 additions and 4 deletions
85
objects/enemy/super_slime.gd
Normal file
85
objects/enemy/super_slime.gd
Normal file
|
@ -0,0 +1,85 @@
|
|||
tool
|
||||
extends "res://objects/enemy/enemy.gd"
|
||||
|
||||
|
||||
export var left_boundary: float = 0.0
|
||||
export var right_boundary: float = 0.0
|
||||
export var direction: float = 1.0
|
||||
export var speed: float = 50.0
|
||||
export var jump_distance: float = 0.0
|
||||
export var jump_speed: float = 50.0
|
||||
|
||||
var _jumping: bool = false
|
||||
var _jump_direction: float = -1.0
|
||||
|
||||
onready var hitbox: Area2D = $Hitbox
|
||||
onready var sprite: AnimatedSprite = $Hitbox/Sprite
|
||||
onready var detect_player_cast: RayCast2D = $"%DetectPlayerCast"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.editor_hint:
|
||||
return
|
||||
left_boundary *= 8.0
|
||||
right_boundary *= 8.0
|
||||
jump_distance *= 8.0
|
||||
detect_player_cast.cast_to = Vector2(0.0, -jump_distance)
|
||||
speed *= Game.enemy_speed_factor
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if Engine.editor_hint:
|
||||
return
|
||||
# check for player and jump
|
||||
if detect_player_cast.is_colliding():
|
||||
_jumping = true
|
||||
# move if not jumping
|
||||
if _jumping:
|
||||
hitbox.position.y += _jump_direction * jump_speed * delta
|
||||
if hitbox.position.y >= 8.0:
|
||||
hitbox.position.y = 0.0
|
||||
_jump_direction = -1.0
|
||||
hitbox.scale.y = 1.0
|
||||
_jumping = false
|
||||
elif hitbox.position.y <= -jump_distance - 8.0:
|
||||
hitbox.position.y = -jump_distance
|
||||
_jump_direction = 1.0
|
||||
hitbox.scale.y = -1.0
|
||||
_jumping = false
|
||||
else:
|
||||
hitbox.position.x += direction * speed * delta
|
||||
if hitbox.position.x >= right_boundary:
|
||||
hitbox.position.x = right_boundary
|
||||
direction = -1.0
|
||||
sprite.flip_h = true
|
||||
elif hitbox.position.x <= -left_boundary:
|
||||
hitbox.position.x = -left_boundary
|
||||
direction = 1.0
|
||||
sprite.flip_h = false
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Engine.editor_hint and Engine.get_frames_drawn() % 10 == 0:
|
||||
update()
|
||||
|
||||
|
||||
func _draw() -> void:
|
||||
if Engine.editor_hint:
|
||||
# bottom travel zone
|
||||
draw_line(
|
||||
Vector2(-left_boundary * 8.0, 4.0),
|
||||
Vector2(right_boundary * 8.0 + 8.0, 4.0),
|
||||
Color(0.4, 0.2, 0.6, 0.75), 1.01, false
|
||||
)
|
||||
# top travel zone
|
||||
draw_line(
|
||||
Vector2(-left_boundary * 8.0, -jump_distance * 8.0 - 4.0),
|
||||
Vector2(right_boundary * 8.0 + 8.0, -jump_distance * 8.0 - 4.0),
|
||||
Color(0.4, 0.2, 0.6, 0.75), 1.01, false
|
||||
)
|
||||
# jump line
|
||||
draw_line(
|
||||
Vector2(4.0, 4.0),
|
||||
Vector2(4.0, -jump_distance * 8.0 - 4.0),
|
||||
Color(0.4, 0.2, 0.6, 0.75), 1.01, false
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue