using System.Collections.Generic; using System.Linq; using System.Xml; using System.Xml.Serialization; using UnityEngine; namespace RimWorldAnimationStudio { public class AnimationDef { public string defName = "Undefined"; public string label = "Undefined"; public bool sounds = false; [XmlArray("sexTypes"), XmlArrayItem("li")] public List sexTypes = new List(); [XmlArray("interactionDefTypes"), XmlArrayItem("li")] public List interactionDefTypes = new List(); [XmlArray("actors"), XmlArrayItem("li")] public List actors = new List(); [XmlArray("animationStages"), XmlArrayItem("li")] public List animationStages = new List(); [XmlIgnore] public int animationTimeTicks = 0; public void Initialize() { animationTimeTicks = 0; foreach (AnimationStage stage in animationStages) { stage.Initialize(); animationTimeTicks += stage.playTimeTicks; } } public void RunPreSaveOperations() { // Stage edits for (int i = 0; i < animationStages.Count; i++) { AnimationStage stage = animationStages[i]; // Sort keyframes by atTick foreach (PawnAnimationClip clip in stage.animationClips) { clip.keyframes = clip.keyframes.OrderBy(x => x.atTick).ToList(); } // Check if looping int stageWindowSize = animationStages[i].stageWindowSize > 0 ? animationStages[i].stageWindowSize : animationStages[i].animationClips.Select(x => x.duration).Max(); int cycles = Mathf.CeilToInt(animationStages[i].playTimeTicks / stageWindowSize); Debug.Log(animationStages[i].playTimeTicks); Debug.Log(animationStages[i].stageWindowSize); Debug.Log(cycles); stage.isLooping = cycles > 1; } // Body part list edit foreach (Actor actor in actors) { actor.isFucking = actor.requiredGenitals.Contains("Any appendage"); if (actor.isFucking == true) { actor.requiredGenitals.Remove("Any appendage"); } actor.isFucked= actor.requiredGenitals.Contains("Any orifice"); if (actor.isFucked == true) { actor.requiredGenitals.Remove("Any orifice"); } } } public void RunPostLoadOperations() { foreach (Actor actor in actors) { if (actor.isFucking == true) { actor.requiredGenitals.Add("Any appendage"); } if (actor.isFucked == true) { actor.requiredGenitals.Add("Any orifice"); } } } } }