init
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5173c23cdfbb43fd80e5bb85342554b1
|
||||
timeCreated: 1774105224
|
||||
@@ -0,0 +1,38 @@
|
||||
using RPGCore.BackpackEquipment.ObjectModules.Content.Events;
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.ObjectModules.ActionObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Actions
|
||||
{
|
||||
public class DropAction : BaseAction
|
||||
{
|
||||
private readonly ItemObject _item;
|
||||
|
||||
public DropAction(ItemObject item)
|
||||
{
|
||||
_item = item;
|
||||
}
|
||||
|
||||
public override void CanDoIt()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnDoIt()
|
||||
{
|
||||
var dropEvent = new DropEvent { unit = unit, item = _item };
|
||||
unit.events.InvokeBefore(dropEvent);
|
||||
Check(!dropEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(DropAction)));
|
||||
unit.events.InvokeAfter(dropEvent);
|
||||
|
||||
unit.GetComponent<ContentModule>().Remove(_item);
|
||||
}
|
||||
|
||||
protected override void OnEndIt()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnCancelIt()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15a26990a9c14410b2131f6d8286ad18
|
||||
timeCreated: 1774104885
|
||||
@@ -0,0 +1,45 @@
|
||||
using RPGCore.BackpackEquipment.ObjectModules.Content.Events;
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.ObjectModules.ActionObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Actions
|
||||
{
|
||||
public class TakeAction : BaseAction
|
||||
{
|
||||
private readonly IContentOwner _contentOwner;
|
||||
private readonly ItemObject _item;
|
||||
private readonly int _index;
|
||||
|
||||
public TakeAction(IContentOwner contentOwner, ItemObject item, int index = -1)
|
||||
{
|
||||
_contentOwner = contentOwner;
|
||||
_item = item;
|
||||
_index = index;
|
||||
}
|
||||
|
||||
public override void CanDoIt()
|
||||
{
|
||||
_contentOwner.CanAdd(_item, _index);
|
||||
}
|
||||
|
||||
protected override void OnDoIt()
|
||||
{
|
||||
var takeEvent = new TakeEvent { unit = unit, item = _item };
|
||||
unit.events.InvokeBefore(takeEvent);
|
||||
Check(!takeEvent.isPrevented, string.Format(ActionWasPreventedMessage, nameof(TakeAction)));
|
||||
unit.events.InvokeAfter(takeEvent);
|
||||
|
||||
var content = unit.GetComponent<ContentModule>();
|
||||
content.Add(_item);
|
||||
content.TransferTo(_contentOwner, _item, _index);
|
||||
}
|
||||
|
||||
protected override void OnEndIt()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnCancelIt()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2df668c012544ff893888d9f5bcce9a
|
||||
timeCreated: 1774104779
|
||||
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using RPGCore.BackpackEquipment.Data;
|
||||
using RPGCore.BackpackEquipment.ObjectModules.Content.Events;
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.Core;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.ObjectModules.EventObjectModule.Events;
|
||||
using UnityEngine;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content
|
||||
{
|
||||
[Serializable]
|
||||
[RequireComponent(typeof(BaseObject))]
|
||||
public sealed class ContentModule : ObjectModule<BaseObject>
|
||||
{
|
||||
// TODO: tutaj jakiś domyślny owner?
|
||||
|
||||
private Dictionary<ItemObject, IContentOwner> _items = new();
|
||||
|
||||
public bool Add(ItemObject item)
|
||||
{
|
||||
if (item.data.Get<ItemObjectData>().carriedBy) return false;
|
||||
if (_items.ContainsKey(item)) return false;
|
||||
|
||||
_items.TryAdd(item, null);
|
||||
item.data.Get<ItemObjectData>().carriedBy = parent;
|
||||
parent.events.Invoke(new ContentAddEvent{obj = parent, item = item});
|
||||
item.events.Register<RemoveEvent>(OnItemRemove);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Remove(ItemObject item)
|
||||
{
|
||||
if (!_items.ContainsKey(item)) return false;
|
||||
|
||||
_items[item]?.Remove_Internal(item);
|
||||
_items.Remove(item);
|
||||
item.data.Get<ItemObjectData>().carriedBy = null;
|
||||
parent.events.Invoke(new ContentAddEvent{obj = parent, item = item});
|
||||
item.events.Unregister<RemoveEvent>(OnItemRemove);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TransferTo(IContentOwner newOwner, ItemObject item, int index = -1)
|
||||
{
|
||||
if (parent.data.Get<ItemObjectData>().carriedBy != parent) return false;
|
||||
|
||||
if (!newOwner.CanAdd(item, index)) return false;
|
||||
|
||||
_items.TryAdd(item, null);
|
||||
_items[item]?.Remove_Internal(item);
|
||||
_items[item] = newOwner;
|
||||
newOwner.Add_Internal(item, index);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnItemRemove(RemoveEvent removeEvent)
|
||||
{
|
||||
Remove(removeEvent.obj as ItemObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 79108abbb1214cdca99dde30ae550ceb
|
||||
timeCreated: 1773479273
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3913c554eb1a4addbb26fffdcd349490
|
||||
timeCreated: 1773603441
|
||||
@@ -0,0 +1,12 @@
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.ObjectModules.EventObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events
|
||||
{
|
||||
public class ContentAddEvent : BaseEvent<BaseObject>
|
||||
{
|
||||
public BaseObject obj;
|
||||
public ItemObject item;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99499df3a233439c87e15c7aff0c5f7e
|
||||
timeCreated: 1773603493
|
||||
@@ -0,0 +1,12 @@
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.ObjectModules.EventObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events
|
||||
{
|
||||
public class ContentRemoveEvent : BaseEvent<BaseObject>
|
||||
{
|
||||
public BaseObject obj;
|
||||
public ItemObject item;
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9475ae89a4184189aadc77e6efc7f86b
|
||||
timeCreated: 1773603523
|
||||
@@ -0,0 +1,12 @@
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.ObjectModules.EventObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events
|
||||
{
|
||||
public class DropEvent : BasePreventableEvent<UnitObject>
|
||||
{
|
||||
public UnitObject unit;
|
||||
public ItemObject item;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d837632056f4104b980ea605bedf43a
|
||||
timeCreated: 1774105017
|
||||
@@ -0,0 +1,12 @@
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
using RPGCore.Core.Objects;
|
||||
using RPGCore.ObjectModules.EventObjectModule;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content.Events
|
||||
{
|
||||
public class TakeEvent : BasePreventableEvent<UnitObject>
|
||||
{
|
||||
public UnitObject unit;
|
||||
public ItemObject item;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 59ccda71e50b47c1aa77c87b649fcbc6
|
||||
timeCreated: 1774104995
|
||||
@@ -0,0 +1,18 @@
|
||||
using RPGCore.BackpackEquipment.Objects;
|
||||
|
||||
namespace RPGCore.BackpackEquipment.ObjectModules.Content
|
||||
{
|
||||
public interface IContentOwner
|
||||
{
|
||||
internal bool Add_Internal(ItemObject item, int index = -1)
|
||||
{
|
||||
return CanAdd(item, index) && Add(item, index);
|
||||
}
|
||||
|
||||
internal bool Remove_Internal(ItemObject item) => Remove(item);
|
||||
|
||||
public bool CanAdd(ItemObject item, int index);
|
||||
protected bool Add(ItemObject item, int index);
|
||||
protected bool Remove(ItemObject item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78febecbf5d31be469d6b9d3c816fd4d
|
||||
Reference in New Issue
Block a user