Spawn rescued item at correct location and enable pickup
This commit is contained in:
@@ -2,14 +2,42 @@ using Chickensoft.AutoInject;
|
|||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using GameJamDungeon;
|
using GameJamDungeon;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class RescuedItems : Marker3D
|
public partial class RescuedItems : Node3D
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Dependency] public IGame Game => this.DependOn<IGame>();
|
[Dependency] public IGame Game => this.DependOn<IGame>();
|
||||||
|
|
||||||
|
[Node] public Marker3D Spawn1 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn2 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn3 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn4 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn5 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn6 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn7 { get; set; } = default!;
|
||||||
|
[Node] public Marker3D Spawn8 { get; set; } = default!;
|
||||||
|
|
||||||
|
private List<Marker3D> SpawnLocations;
|
||||||
|
|
||||||
|
public void Initialize()
|
||||||
|
{
|
||||||
|
SpawnLocations = new List<Marker3D>()
|
||||||
|
{
|
||||||
|
Spawn1,
|
||||||
|
Spawn2,
|
||||||
|
Spawn3,
|
||||||
|
Spawn4,
|
||||||
|
Spawn5,
|
||||||
|
Spawn6,
|
||||||
|
Spawn7,
|
||||||
|
Spawn8
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void SpawnRescuedItems()
|
public void SpawnRescuedItems()
|
||||||
{
|
{
|
||||||
foreach (var item in Game.RescuedItems.Items)
|
foreach (var item in Game.RescuedItems.Items)
|
||||||
@@ -17,8 +45,9 @@ public partial class RescuedItems : Marker3D
|
|||||||
var droppedScene = GD.Load<PackedScene>("res://src/items/dropped/DroppedItem.tscn");
|
var droppedScene = GD.Load<PackedScene>("res://src/items/dropped/DroppedItem.tscn");
|
||||||
var dropped = droppedScene.Instantiate<DroppedItem>();
|
var dropped = droppedScene.Instantiate<DroppedItem>();
|
||||||
dropped.Item = item;
|
dropped.Item = item;
|
||||||
dropped.GlobalPosition = GlobalPosition;
|
SpawnLocations.First().AddChild(dropped);
|
||||||
AddChild(dropped);
|
dropped.GlobalPosition = SpawnLocations.First().GlobalPosition;
|
||||||
|
SpawnLocations.Remove(SpawnLocations.First());
|
||||||
}
|
}
|
||||||
|
|
||||||
Game.RescuedItems.Items.Clear();
|
Game.RescuedItems.Items.Clear();
|
||||||
|
|||||||
@@ -2,5 +2,37 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" path="res://src/item_rescue/RescuedItems.cs" id="1_m08l5"]
|
[ext_resource type="Script" path="res://src/item_rescue/RescuedItems.cs" id="1_m08l5"]
|
||||||
|
|
||||||
[node name="Rescued Items" type="Marker3D"]
|
[node name="Rescued Items" type="Node3D"]
|
||||||
script = ExtResource("1_m08l5")
|
script = ExtResource("1_m08l5")
|
||||||
|
|
||||||
|
[node name="Spawn1" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1)
|
||||||
|
|
||||||
|
[node name="Spawn2" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0)
|
||||||
|
|
||||||
|
[node name="Spawn3" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 0)
|
||||||
|
|
||||||
|
[node name="Spawn4" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1)
|
||||||
|
|
||||||
|
[node name="Spawn5" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1)
|
||||||
|
|
||||||
|
[node name="Spawn6" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -1)
|
||||||
|
|
||||||
|
[node name="Spawn7" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -1)
|
||||||
|
|
||||||
|
[node name="Spawn8" type="Marker3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 1)
|
||||||
|
|||||||
@@ -25,14 +25,15 @@ namespace GameJamDungeon
|
|||||||
|
|
||||||
public void OnResolved()
|
public void OnResolved()
|
||||||
{
|
{
|
||||||
|
ContactMonitor = true;
|
||||||
BodyEntered += DroppedItem_BodyEntered;
|
BodyEntered += DroppedItem_BodyEntered;
|
||||||
GlobalPosition = Game.Player.GlobalPosition + Vector3.Up;
|
|
||||||
Sprite.Texture = Item.Info.Texture;
|
Sprite.Texture = Item.Info.Texture;
|
||||||
AddCollisionExceptionWith((Node)Game.Player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void Drop()
|
public async void Drop()
|
||||||
{
|
{
|
||||||
|
AddCollisionExceptionWith((Node)Game.Player);
|
||||||
|
GlobalPosition = Game.Player.GlobalPosition + Vector3.Up;
|
||||||
ApplyCentralImpulse(-Game.Player.GlobalBasis.Z.Normalized() * 5.0f);
|
ApplyCentralImpulse(-Game.Player.GlobalBasis.Z.Normalized() * 5.0f);
|
||||||
await ToSignal(GetTree().CreateTimer(1.5), "timeout");
|
await ToSignal(GetTree().CreateTimer(1.5), "timeout");
|
||||||
RemoveCollisionExceptionWith((Node)Game.Player);
|
RemoveCollisionExceptionWith((Node)Game.Player);
|
||||||
|
|||||||
Reference in New Issue
Block a user