Glamourer/Glamourer/State/CurrentDesign.cs
Ottermandias 6a4b5fc3b2 dupidu
2022-10-02 23:43:21 +02:00

66 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Glamourer.Customization;
using Glamourer.Interop;
using Penumbra.GameData.Enums;
namespace Glamourer.State;
public unsafe class CurrentDesign : ICharacterData
{
public ref CharacterData Data
=> ref _drawData;
private CharacterData _drawData;
private CharacterData _initialData;
public CurrentDesign(Actor actor)
{
_initialData = new CharacterData();
if (!actor)
return;
_initialData.Load(actor);
var drawObject = actor.DrawObject;
if (drawObject.Valid)
_drawData.Load(drawObject);
else
_drawData = _initialData.Clone();
}
public void Update(Actor actor)
{
if (!actor)
return;
if (!_initialData.Customize.Equals(actor.Customize))
{
_initialData.Customize.Load(actor.Customize);
_drawData.Customize.Load(actor.Customize);
}
var initialEquip = _initialData.Equipment;
var currentEquip = actor.Equip;
foreach (var slot in EquipSlotExtensions.EqdpSlots)
{
var current = currentEquip[slot];
if (initialEquip[slot] != current)
{
initialEquip[slot] = current;
_drawData.Equipment[slot] = current;
}
}
if (_initialData.MainHand != actor.MainHand)
{
_initialData.MainHand = actor.MainHand;
_drawData.MainHand = actor.MainHand;
}
if (_initialData.OffHand != actor.OffHand)
{
_initialData.OffHand = actor.OffHand;
_drawData.OffHand = actor.OffHand;
}
}
}