feat(vfx): port retail effect scheduling and delivery
This commit is contained in:
parent
363e046112
commit
96ddfdf175
28 changed files with 2473 additions and 691 deletions
|
|
@ -9,6 +9,7 @@ using AcDream.Core.World;
|
|||
using DatReaderWriter;
|
||||
using DatReaderWriter.DBObjs;
|
||||
using DatReaderWriter.Enums;
|
||||
using DatReaderWriter.Types;
|
||||
|
||||
namespace AcDream.App.Rendering;
|
||||
|
||||
|
|
@ -28,6 +29,9 @@ public sealed class EquippedChildRenderController : IDisposable
|
|||
private readonly Func<ParentEvent.Parsed, bool> _acceptParent;
|
||||
|
||||
private ParentAttachmentState Relations => _liveEntities.ParentAttachments;
|
||||
|
||||
/// <summary>Raised after the attached projection is fully registered.</summary>
|
||||
public event Action<uint>? EntityReady;
|
||||
private readonly Dictionary<uint, AttachedChild> _attachedByChild = new();
|
||||
|
||||
public IEnumerable<uint> AttachedEntityIds
|
||||
|
|
@ -283,6 +287,43 @@ public sealed class EquippedChildRenderController : IDisposable
|
|||
$"equipment: attached child=0x{childGuid:X8} parent=0x{pending.ParentGuid:X8} " +
|
||||
$"location={parentLocation} placement={placement}");
|
||||
Relations.MarkProjected(childGuid);
|
||||
EntityReady?.Invoke(childGuid);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolves retail's parent Setup part index to the currently attached
|
||||
/// child local ID for DefaultScriptPartHook.
|
||||
/// </summary>
|
||||
public uint? FindChildLocalIdAtPart(uint parentLocalId, uint partIndex)
|
||||
{
|
||||
foreach (AttachedChild child in _attachedByChild.Values)
|
||||
{
|
||||
if (!_liveEntities.TryGetWorldEntity(child.ParentGuid, out WorldEntity parent)
|
||||
|| parent.Id != parentLocalId
|
||||
|| !child.ParentSetup.HoldingLocations.TryGetValue(
|
||||
child.ParentLocation,
|
||||
out LocationType? holding)
|
||||
|| holding.PartId != partIndex)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return child.Entity.Id;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>Returns the live parent whose UpdateChild path owns this child.</summary>
|
||||
public uint? FindParentLocalId(uint childLocalId)
|
||||
{
|
||||
foreach (AttachedChild child in _attachedByChild.Values)
|
||||
{
|
||||
if (child.Entity.Id != childLocalId)
|
||||
continue;
|
||||
if (_liveEntities.TryGetWorldEntity(child.ParentGuid, out WorldEntity parent))
|
||||
return parent.Id;
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void ResolveRelations(uint childGuid)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue