mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
83 lines
3.4 KiB
C#
83 lines
3.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
using UnityEngine;
|
|
|
|
namespace RimWorldAnimationStudio
|
|
{
|
|
public class Actor
|
|
{
|
|
[XmlArray("defNames"), XmlArrayItem("li")] public List<string> defNames = new List<string>();
|
|
[XmlArray("bodyDefTypes"), XmlArrayItem("li")] public List<string> bodyDefTypes = new List<string>();
|
|
[XmlArray("requiredGender"), XmlArrayItem("li")] public List<string> requiredGender = new List<string>();
|
|
[XmlArray("requiredGenitals"), XmlArrayItem("li")] public List<string> requiredGenitals = new List<string>();
|
|
[XmlArray("raceOffsets"), XmlArrayItem("li")] public List<AlienRaceOffset> raceOffsets = new List<AlienRaceOffset>();
|
|
[XmlArray("blacklistedRaces"), XmlArrayItem("li")] public List<string> blacklistedRaces = new List<string>();
|
|
[XmlArray("tags"), XmlArrayItem("li")] public List<string> tags;
|
|
|
|
[XmlIgnore] public ActorGender gender;
|
|
[XmlIgnore] private AlienRaceDef alienRaceDef;
|
|
|
|
public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset();
|
|
public bool initiator = false;
|
|
public bool controlGenitalAngle;
|
|
public bool isFucking;
|
|
public bool isFucked;
|
|
|
|
public bool ShouldSerializedefNames() { return defNames.NotNullOrEmpty(); }
|
|
public bool ShouldSerializebodyDefTypes() { return bodyDefTypes.NotNullOrEmpty(); }
|
|
public bool ShouldSerializerequiredGender() { return requiredGender.NotNullOrEmpty(); }
|
|
public bool ShouldSerializerequiredGenitals() { return requiredGenitals.NotNullOrEmpty(); }
|
|
public bool ShouldSerializeraceOffsets() { return raceOffsets.NotNullOrEmpty(); }
|
|
public bool ShouldSerializeblacklistedRaces() { return blacklistedRaces.NotNullOrEmpty(); }
|
|
public bool ShouldSerializetags() { return tags.NotNullOrEmpty(); }
|
|
|
|
public bool ShouldSerializecontrolGenitalAngle() { return controlGenitalAngle; }
|
|
public bool ShouldSerializeisFucking() { return isFucking; }
|
|
public bool ShouldSerializeisFucked() { return isFucked; }
|
|
|
|
public AlienRaceDef GetAlienRaceDef()
|
|
{
|
|
if (alienRaceDef == null)
|
|
{ alienRaceDef = AlienRaceDefs.GetNamed("Human"); }
|
|
|
|
return alienRaceDef;
|
|
}
|
|
|
|
public void SetAlienRaceDef(string alienRaceDefName)
|
|
{
|
|
AlienRaceDef alienRaceDef = AlienRaceDefs.GetNamed(alienRaceDefName);
|
|
|
|
if (alienRaceDef != null)
|
|
{ this.alienRaceDef = alienRaceDef; }
|
|
}
|
|
|
|
public void ValidateData()
|
|
{
|
|
bodyDefTypes = bodyDefTypes.Intersect(Tags.bodyDefTypes.Concat(CustomTags.bodyDefTypes))?.ToList();
|
|
requiredGenitals = requiredGenitals.Intersect(Tags.bodyParts.Concat(CustomTags.bodyParts))?.ToList();
|
|
}
|
|
|
|
public bool MakeNew()
|
|
{
|
|
if (Workspace.animationDef == null)
|
|
{ Debug.LogWarning("Cannot make new actor - there is no AnimationDef"); return false; }
|
|
|
|
Workspace.animationDef.actors.Add(this);
|
|
|
|
foreach (AnimationStage stage in Workspace.animationDef.animationStages)
|
|
{
|
|
PawnAnimationClip clip = new PawnAnimationClip();
|
|
|
|
if (clip.MakeNew())
|
|
{
|
|
stage.animationClips.Add(clip);
|
|
stage.Initialize();
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|