mirror of
https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
synced 2024-08-15 00:43:45 +00:00
74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Verse;
|
|
using RimWorld;
|
|
|
|
namespace Rimworld_Animations {
|
|
public class ThingAnimationClip : BaseAnimationClip
|
|
{
|
|
public List<ThingKeyframe> keyframes;
|
|
|
|
public SimpleCurve PositionX = new SimpleCurve();
|
|
public SimpleCurve PositionZ = new SimpleCurve();
|
|
public SimpleCurve Rotation = new SimpleCurve();
|
|
|
|
|
|
public override void buildSimpleCurves() {
|
|
int duration = 0;
|
|
//getting the length of the whole clip
|
|
foreach (ThingKeyframe frame in keyframes)
|
|
{
|
|
duration += frame.tickDuration;
|
|
}
|
|
|
|
//guarantees loops don't get cut off mid-anim
|
|
this.duration = duration;
|
|
|
|
int keyframePosition = 0;
|
|
foreach (ThingKeyframe frame in keyframes)
|
|
{
|
|
|
|
if (frame.atTick.HasValue)
|
|
{
|
|
if (frame.positionX.HasValue)
|
|
PositionX.Add((float)frame.atTick / (float)duration, frame.positionX.Value, true);
|
|
|
|
if (frame.positionZ.HasValue)
|
|
PositionZ.Add((float)frame.atTick / (float)duration, frame.positionZ.Value, true);
|
|
|
|
if (frame.rotation.HasValue)
|
|
Rotation.Add((float)frame.atTick / (float)duration, frame.rotation.Value, true);
|
|
|
|
if (frame.soundEffect != null)
|
|
{
|
|
SoundEffects.Add((int)frame.atTick, frame.soundEffect);
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
if (frame.positionX.HasValue)
|
|
PositionX.Add((float)keyframePosition / (float)duration, frame.positionX.Value, true);
|
|
|
|
if (frame.positionZ.HasValue)
|
|
PositionZ.Add((float)keyframePosition / (float)duration, frame.positionZ.Value, true);
|
|
|
|
if (frame.rotation.HasValue)
|
|
Rotation.Add((float)keyframePosition / (float)duration, frame.rotation.Value, true);
|
|
|
|
if (frame.soundEffect != null)
|
|
{
|
|
SoundEffects.Add(keyframePosition, frame.soundEffect);
|
|
}
|
|
keyframePosition += frame.tickDuration;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|