ADD: bears can shoot at player.

main
bog 2023-09-30 12:46:55 +02:00
parent 92f660e43e
commit 751fe607bd
4 changed files with 25 additions and 9 deletions

View File

@ -25,6 +25,9 @@ func to_falling():
m_state = preload("res://Actor/Falling.gd").new() m_state = preload("res://Actor/Falling.gd").new()
m_state.this = self m_state.this = self
func is_dead():
return m_state.state_name == 'Dead'
func to_dead(): func to_dead():
m_state = preload("res://Actor/Dead.gd").new() m_state = preload("res://Actor/Dead.gd").new()
m_state.this = self m_state.this = self

View File

@ -1,7 +1,21 @@
extends Node2D extends Node2D
var m_world = null
var m_target = null
var m_shoot_time = 2.0
var m_shoot_timer = 0.0
func _ready(): func _ready():
$Actor/Sprite2D.modulate = Color.RED $Actor/Sprite2D.modulate = Color.RED
func _process(_delta): func _process(delta):
pass if m_target and $Actor.is_normal() and not m_target.get_node('Actor').is_dead():
if m_shoot_timer >= m_shoot_time:
var to_target = m_target.get_node('Actor').global_position - $Actor.global_position
var dir = to_target.normalized()
var dist = to_target.length()
m_world.throw_bomb($Actor.global_position, dir, dist)
m_shoot_timer = 0.0
m_shoot_timer += delta

View File

@ -15,11 +15,12 @@ func _ready():
func _process(_delta): func _process(_delta):
pass pass
func throw_at(pos: Vector2, dir: Vector2): func throw_at(pos: Vector2, dir: Vector2, dist: float):
self.position = pos self.position = pos
m_origin = pos m_origin = pos
m_dir = dir m_dir = dir
m_state = self._moving m_state = self._moving
m_dist = dist
func _physics_process(delta): func _physics_process(delta):
if (m_origin - self.position).length_squared() >= m_dist * m_dist: if (m_origin - self.position).length_squared() >= m_dist * m_dist:

View File

@ -1,12 +1,10 @@
extends Node2D extends Node2D
func _ready(): func _ready():
pass $Bear.m_target = $Player
$Bear.m_world = self
func _process(_delta): func _process(_delta):
if Input.is_action_just_pressed("ui_accept"):
throw_bomb(Vector2(512, 256), Vector2(0, 1))
if is_outside($Player/Actor) and $Player/Actor.is_normal(): if is_outside($Player/Actor) and $Player/Actor.is_normal():
$Player/Actor.to_falling() $Player/Actor.to_falling()
@ -20,10 +18,10 @@ func is_outside(actor):
return tile.get_custom_data('is_void') return tile.get_custom_data('is_void')
func throw_bomb(from: Vector2, dir: Vector2): func throw_bomb(from: Vector2, dir: Vector2, dist: float):
var bomb = preload("res://Molotov/molotov.tscn").instantiate() var bomb = preload("res://Molotov/molotov.tscn").instantiate()
bomb.on_explode.connect(_on_bomb_explode) bomb.on_explode.connect(_on_bomb_explode)
bomb.throw_at(from, dir) bomb.throw_at(from, dir, dist)
add_child(bomb) add_child(bomb)
func _on_bomb_explode(bomb): func _on_bomb_explode(bomb):