Pick up thrown items
This commit is contained in:
@@ -20,23 +20,39 @@ public partial class ThrownItem : RigidBody3D
|
||||
|
||||
[Node] public Sprite2D Sprite { get; set; } = default!;
|
||||
|
||||
[Node] public Area3D Collision { get; set; } = default!;
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
BodyEntered += ThrownItem_BodyEntered;
|
||||
Collision.AreaEntered += Collision_AreaEntered;
|
||||
GlobalPosition = Player.CurrentPosition;
|
||||
Sprite.Texture = ItemThatIsThrown.GetTexture();
|
||||
AddCollisionExceptionWith((Node)Player);
|
||||
Collision.SetCollisionLayerValue(3, false);
|
||||
|
||||
}
|
||||
|
||||
private void ThrownItem_BodyEntered(Node body)
|
||||
private void Collision_AreaEntered(Area3D area)
|
||||
{
|
||||
if (body is IEnemy enemy)
|
||||
if (area.GetOwner() is IEnemy enemy)
|
||||
{
|
||||
CalculateEffect(enemy);
|
||||
QueueFree();
|
||||
}
|
||||
else if (ItemThatIsThrown is ThrowableItem)
|
||||
}
|
||||
|
||||
private void ThrownItem_BodyEntered(Node body)
|
||||
{
|
||||
if (ItemThatIsThrown is ThrowableItem)
|
||||
{
|
||||
QueueFree();
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveCollisionExceptionWith((Node)Player);
|
||||
Collision.SetCollisionLayerValue(3, true);
|
||||
}
|
||||
}
|
||||
|
||||
public void Throw(EffectService effectService)
|
||||
@@ -84,6 +100,9 @@ public partial class ThrownItem : RigidBody3D
|
||||
|
||||
private void CalculateEffect(IEnemy enemy)
|
||||
{
|
||||
if (ItemThatIsThrown.ItemTag == ItemTag.MysteryItem)
|
||||
ItemThatIsThrown = Game.RerollItem(ItemThatIsThrown, false);
|
||||
|
||||
if (ItemThatIsThrown is ThrowableItem throwableItem)
|
||||
{
|
||||
switch (throwableItem.ThrowableItemTag)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://b1twcuneob5kt"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://b1twcuneob5kt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bx1k4yff3m82m" path="res://src/items/thrown/ThrownItem.cs" id="1_wlplc"]
|
||||
[ext_resource type="Material" uid="uid://x2bv1q51mcjq" path="res://src/enemy/PixelMelt.tres" id="2_qjpqg"]
|
||||
@@ -9,6 +9,9 @@ size = Vector3(0.46632, 0.507293, 0.586082)
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_qjpqg"]
|
||||
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xxdqr"]
|
||||
radius = 0.306203
|
||||
|
||||
[node name="Hitbox" type="RigidBody3D"]
|
||||
collision_layer = 3072
|
||||
collision_mask = 2049
|
||||
@@ -55,3 +58,11 @@ unique_name_in_owner = true
|
||||
material = ExtResource("2_qjpqg")
|
||||
scale = Vector2(0.1, 0.1)
|
||||
centered = false
|
||||
|
||||
[node name="Collision" type="Area3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 4
|
||||
collision_mask = 2048
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
||||
shape = SubResource("SphereShape3D_xxdqr")
|
||||
|
||||
Reference in New Issue
Block a user