72 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|