44 lines
999 B
Markdown
44 lines
999 B
Markdown
|
|
````python
|
||
|
|
extends Area2D
|
||
|
|
|
||
|
|
var max_speed := 1200.0
|
||
|
|
var velocity := Vector2(0, 0)
|
||
|
|
var steering_factor := 3.0
|
||
|
|
|
||
|
|
var health := 10
|
||
|
|
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
area_entered.connect(_on_area_entered)
|
||
|
|
# This call updates the health bar to match the health variable when the
|
||
|
|
# game starts.
|
||
|
|
set_health(health)
|
||
|
|
|
||
|
|
|
||
|
|
func _process(delta: float) -> void:
|
||
|
|
var direction := Vector2(0, 0)
|
||
|
|
direction.x = Input.get_axis("move_left", "move_right")
|
||
|
|
direction.y = Input.get_axis("move_up", "move_down")
|
||
|
|
|
||
|
|
if direction.length() > 1.0:
|
||
|
|
direction = direction.normalized()
|
||
|
|
|
||
|
|
var desired_velocity := max_speed * direction
|
||
|
|
var steering := desired_velocity - velocity
|
||
|
|
velocity += steering * steering_factor * delta
|
||
|
|
position += velocity * delta
|
||
|
|
|
||
|
|
if velocity.length() > 0.0:
|
||
|
|
get_node("Sprite2D").rotation = velocity.angle()
|
||
|
|
|
||
|
|
|
||
|
|
func set_health(new_health: int) -> void:
|
||
|
|
health = new_health
|
||
|
|
get_node("UI/HealthBar").value = health
|
||
|
|
|
||
|
|
|
||
|
|
func _on_area_entered(area_that_entered: Area2D) -> void:
|
||
|
|
set_health(health + 10)
|
||
|
|
```
|
||
|
|
|