rj-action-library/Runtime/Interactions/Collecting/Collector.cs

72 lines
1.7 KiB
C#

using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
using System.Drawing;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Collector.svg")]
public partial class Collector:Node
{
[Export]
public CollectorTypeFlag collectorTypeFlag;
[Export]
public CollectableCollection[] collectables = [];
[Export]
public bool canAutoCollect = true;
[Export]
public CollectableData lastItemData;
[Export]
public ISOTimeStamp lastItemTime;
[Export]
public Action onCollected;
public bool CanCollect( Collectable collectable )
{
if ( canAutoCollect && collectable.isAutoCollectable )
{
return true;
}
return collectables.Has( c => c.collectableType == collectable.collectableData.collectableType );
}
public virtual bool Collect( Collectable collectable )
{
var canCollect = CanCollect( collectable );
if ( ! canCollect )
{
return false;
}
var collection = collectables.Find( c => c.collectableType == collectable.collectableData.collectableType );
if ( collection == null )
{
collection = new CollectableCollection();
collection.collectableType = collectable.collectableData.collectableType;
collectables = collectables.Add( collection );
}
lastItemData = collectable.collectableData;
lastItemTime = ISOTimeStamp.Now();
collection.collection = collection.collection.Add( lastItemData );
collection.timeStamps = collection.timeStamps.Add( lastItemTime );
onCollected?.Trigger();
return true;
}
}
}