add socket stuff

This commit is contained in:
Mister_Nebula 2021-02-25 14:53:34 +00:00
parent d34eeda44d
commit 506f040b97
6 changed files with 61 additions and 1 deletions

View File

@ -6,5 +6,9 @@ namespace QSB.ItemSync.WorldObjects
public interface IQSBOWItem : IWorldObjectTypeSubset public interface IQSBOWItem : IWorldObjectTypeSubset
{ {
void DropItem(Vector3 position, Vector3 normal, Sector sector); void DropItem(Vector3 position, Vector3 normal, Sector sector);
ItemType GetItemType();
void SocketItem(Transform socketTransform, Sector sector);
void PlaySocketAnimation();
} }
} }

View File

@ -7,8 +7,17 @@ namespace QSB.ItemSync.WorldObjects
internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem internal class QSBOWItem<T> : WorldObject<T>, IQSBOWItem
where T : OWItem where T : OWItem
{ {
private ItemType _type
{
get => AttachedObject.GetValue<ItemType>("_type");
set => AttachedObject.SetValue("_type", value);
}
public override void Init(T attachedObject, int id) { } public override void Init(T attachedObject, int id) { }
public ItemType GetItemType()
=> _type;
public virtual void DropItem(Vector3 position, Vector3 normal, Sector sector) public virtual void DropItem(Vector3 position, Vector3 normal, Sector sector)
{ {
AttachedObject.transform.SetParent(sector.transform); AttachedObject.transform.SetParent(sector.transform);
@ -21,5 +30,10 @@ namespace QSB.ItemSync.WorldObjects
AttachedObject.SetSector(sector); AttachedObject.SetSector(sector);
AttachedObject.SetColliderActivation(true); AttachedObject.SetColliderActivation(true);
} }
public virtual void SocketItem(Transform socketTransform, Sector sector)
=> AttachedObject.SocketItem(socketTransform, sector);
public virtual void PlaySocketAnimation() { }
} }
} }

View File

@ -1,4 +1,5 @@
using QSB.WorldSync; using OWML.Utils;
using QSB.WorldSync;
using UnityEngine; using UnityEngine;
namespace QSB.ItemSync.WorldObjects namespace QSB.ItemSync.WorldObjects
@ -6,6 +7,44 @@ namespace QSB.ItemSync.WorldObjects
internal class QSBOWItemSocket<T> : WorldObject<T>, IQSBOWItemSocket internal class QSBOWItemSocket<T> : WorldObject<T>, IQSBOWItemSocket
where T : MonoBehaviour where T : MonoBehaviour
{ {
private IQSBOWItem _socketedItem
{
get => ItemManager.GetObject(AttachedObject.GetValue<OWItem>("_socketedItem"));
set => AttachedObject.SetValue("_socketedItem", (value as IWorldObject).ReturnObject());
}
private Transform _socketTransform
{
get => AttachedObject.GetValue<Transform>("_socketedTransform");
set => AttachedObject.SetValue("_socketedTransform", value);
}
private Sector _sector
{
get => AttachedObject.GetValue<Sector>("_sector");
set => AttachedObject.SetValue("_sector", value);
}
public override void Init(T attachedObject, int id) { } public override void Init(T attachedObject, int id) { }
public virtual bool AcceptsItem(IQSBOWItem item)
{
var itemType = item.GetItemType();
var acceptableType = AttachedObject.GetValue<ItemType>("_acceptableType");
return (itemType & acceptableType) == itemType;
}
public virtual bool PlaceIntoSocket(IQSBOWItem item)
{
if (!AcceptsItem(item) || _socketedItem != null)
{
return false;
}
_socketedItem = item;
_socketedItem.SocketItem(_socketTransform, _sector);
_socketedItem.PlaySocketAnimation();
AttachedObject.enabled = true;
return true;
}
} }
} }

View File

@ -6,5 +6,6 @@
string Name { get; } string Name { get; }
void OnRemoval(); void OnRemoval();
object ReturnObject();
} }
} }

View File

@ -1,4 +1,5 @@
using OWML.Common; using OWML.Common;
using QSB.ItemSync.WorldObjects;
using QSB.OrbSync.WorldObjects; using QSB.OrbSync.WorldObjects;
using QSB.TransformSync; using QSB.TransformSync;
using QSB.Utility; using QSB.Utility;

View File

@ -11,5 +11,6 @@ namespace QSB.WorldSync
public abstract void Init(T attachedObject, int id); public abstract void Init(T attachedObject, int id);
public virtual void OnRemoval() { } public virtual void OnRemoval() { }
public object ReturnObject() => AttachedObject;
} }
} }