From 751fe607bd200854a687efeb018d476a75561aad Mon Sep 17 00:00:00 2001 From: bog Date: Sat, 30 Sep 2023 12:46:55 +0200 Subject: [PATCH] ADD: bears can shoot at player. --- src/Actor/actor.gd | 3 +++ src/Bear/bear.gd | 18 ++++++++++++++++-- src/Molotov/molotov.gd | 3 ++- src/Sandbox/sandbox.gd | 10 ++++------ 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Actor/actor.gd b/src/Actor/actor.gd index 61898be..cfbeec2 100644 --- a/src/Actor/actor.gd +++ b/src/Actor/actor.gd @@ -25,6 +25,9 @@ func to_falling(): m_state = preload("res://Actor/Falling.gd").new() m_state.this = self +func is_dead(): + return m_state.state_name == 'Dead' + func to_dead(): m_state = preload("res://Actor/Dead.gd").new() m_state.this = self diff --git a/src/Bear/bear.gd b/src/Bear/bear.gd index 469107d..bb4a0f0 100644 --- a/src/Bear/bear.gd +++ b/src/Bear/bear.gd @@ -1,7 +1,21 @@ extends Node2D +var m_world = null +var m_target = null +var m_shoot_time = 2.0 +var m_shoot_timer = 0.0 + func _ready(): $Actor/Sprite2D.modulate = Color.RED -func _process(_delta): - pass +func _process(delta): + 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 + + diff --git a/src/Molotov/molotov.gd b/src/Molotov/molotov.gd index 387e9b8..97eeca1 100644 --- a/src/Molotov/molotov.gd +++ b/src/Molotov/molotov.gd @@ -15,11 +15,12 @@ func _ready(): func _process(_delta): pass -func throw_at(pos: Vector2, dir: Vector2): +func throw_at(pos: Vector2, dir: Vector2, dist: float): self.position = pos m_origin = pos m_dir = dir m_state = self._moving + m_dist = dist func _physics_process(delta): if (m_origin - self.position).length_squared() >= m_dist * m_dist: diff --git a/src/Sandbox/sandbox.gd b/src/Sandbox/sandbox.gd index 9a9f538..47a5de2 100644 --- a/src/Sandbox/sandbox.gd +++ b/src/Sandbox/sandbox.gd @@ -1,12 +1,10 @@ extends Node2D func _ready(): - pass + $Bear.m_target = $Player + $Bear.m_world = self 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(): $Player/Actor.to_falling() @@ -20,10 +18,10 @@ func is_outside(actor): 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() bomb.on_explode.connect(_on_bomb_explode) - bomb.throw_at(from, dir) + bomb.throw_at(from, dir, dist) add_child(bomb) func _on_bomb_explode(bomb):