86 lines
2.7 KiB
C#
86 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace RimWorldAnimationStudio
|
|
{
|
|
public class PawnKeyframe : Keyframe
|
|
{
|
|
public float bodyAngle;
|
|
public float headAngle;
|
|
public float headBob;
|
|
public float bodyOffsetX;
|
|
public float bodyOffsetZ;
|
|
public float headFacing = 2;
|
|
public float bodyFacing = 2;
|
|
|
|
public float genitalAngle;
|
|
public bool? quiver;
|
|
|
|
[XmlArray("addonKeyframes"), XmlArrayItem("li")] public List<AddonKeyframe> _addonKeyframes = new List<AddonKeyframe>();
|
|
|
|
[XmlIgnore] public List<AddonKeyframe> addonKeyframes = new List<AddonKeyframe>();
|
|
[XmlIgnore] public int keyframeID;
|
|
[XmlIgnore] public int actorID = -1;
|
|
|
|
public bool ShouldSerializegenitalAngle() { return genitalAngle != 0; }
|
|
public bool ShouldSerializequiver() { return quiver != null; }
|
|
|
|
public override void ValidateData()
|
|
{
|
|
soundEffect = Tags.soundDefs.Concat(CustomTags.soundDefs).Contains(soundEffect) ? soundEffect : null;
|
|
|
|
_addonKeyframes.Clear();
|
|
|
|
foreach (AddonKeyframe addonKeyframe in addonKeyframes)
|
|
{
|
|
ActorAddon addon = Workspace.Instance.GetAnimationClipThatOwnsKeyframe(keyframeID, out int clipID).GetActorAddon(addonKeyframe.addonName);
|
|
|
|
if (addon.render)
|
|
{ _addonKeyframes.Add(addonKeyframe.Copy()); }
|
|
}
|
|
}
|
|
|
|
public void OnPostLoad()
|
|
{
|
|
addonKeyframes.Clear();
|
|
|
|
foreach (AddonKeyframe addonKeyframe in _addonKeyframes)
|
|
{
|
|
addonKeyframes.Add(addonKeyframe.Copy());
|
|
}
|
|
}
|
|
|
|
public void GenerateKeyframeID(int actorID)
|
|
{
|
|
this.actorID = actorID;
|
|
int _keyframeID = UnityEngine.Random.Range(100000, 1000000);
|
|
|
|
if (Workspace.animationDef.animationStages.Any(x => x.animationClips.Any(y => y.keyframes.Any(z => z.keyframeID == _keyframeID))))
|
|
{
|
|
GenerateKeyframeID(actorID);
|
|
return;
|
|
}
|
|
|
|
keyframeID = _keyframeID;
|
|
}
|
|
|
|
public bool HasValidKeyframeID()
|
|
{ return keyframeID >= 100000 && keyframeID < 1000000; }
|
|
|
|
public KeyframeSlider GetKeyframeSlider()
|
|
{
|
|
return Selectable.allSelectablesArray.FirstOrDefault(x => x.GetComponent<KeyframeSlider>()?.keyframeID == keyframeID)?.GetComponent< KeyframeSlider>();
|
|
}
|
|
|
|
public AddonKeyframe GetAddonKeyframe(string addonName)
|
|
{
|
|
return addonKeyframes.FirstOrDefault(x => x.addonName == addonName);
|
|
}
|
|
}
|
|
}
|