예제 #1
0
    private Animation GetStopAnimation(OrbitVisualsComponent component, ISpriteComponent sprite)
    {
        var length = component.OrbitStopLength;

        return(new Animation()
        {
            Length = TimeSpan.FromSeconds(length),
            AnimationTracks =
            {
                new AnimationTrackComponentProperty()
                {
                    ComponentType = typeof(ISpriteComponent),
                    Property = nameof(ISpriteComponent.Offset),
                    KeyFrames =
                    {
                        new AnimationTrackProperty.KeyFrame(sprite.Offset,     0f),
                        new AnimationTrackProperty.KeyFrame(Vector2.Zero,  length),
                    },
                    InterpolationMode = AnimationInterpolationMode.Linear
                },
                new AnimationTrackComponentProperty()
                {
                    ComponentType = typeof(ISpriteComponent),
                    Property = nameof(ISpriteComponent.Rotation),
                    KeyFrames =
                    {
                        new AnimationTrackProperty.KeyFrame(sprite.Rotation.Reduced(),     0f),
                        new AnimationTrackProperty.KeyFrame(Angle.Zero,                length),
                    },
                    InterpolationMode = AnimationInterpolationMode.Linear
                }
            }
        });
    }
예제 #2
0
    private void OnComponentInit(EntityUid uid, OrbitVisualsComponent component, ComponentInit args)
    {
        component.OrbitDistance =
            _robustRandom.NextFloat(0.75f * component.OrbitDistance, 1.25f * component.OrbitDistance);

        component.OrbitLength = _robustRandom.NextFloat(0.5f * component.OrbitLength, 1.5f * component.OrbitLength);

        if (TryComp <SpriteComponent>(uid, out var sprite))
        {
            sprite.EnableDirectionOverride = true;
            sprite.DirectionOverride       = Direction.South;
        }

        var animationPlayer = EntityManager.EnsureComponent <AnimationPlayerComponent>(uid);

        if (animationPlayer.HasRunningAnimation(_orbitAnimationKey))
        {
            return;
        }

        if (animationPlayer.HasRunningAnimation(_orbitStopKey))
        {
            animationPlayer.Stop(_orbitStopKey);
        }

        animationPlayer.Play(GetOrbitAnimation(component), _orbitAnimationKey);
    }
예제 #3
0
 private void OnAnimationCompleted(EntityUid uid, OrbitVisualsComponent component, AnimationCompletedEvent args)
 {
     if (args.Key == _orbitAnimationKey)
     {
         if (EntityManager.TryGetComponent(uid, out AnimationPlayerComponent? animationPlayer))
         {
             animationPlayer.Play(GetOrbitAnimation(component), _orbitAnimationKey);
         }
     }
 }
예제 #4
0
    private void OnComponentRemove(EntityUid uid, OrbitVisualsComponent component, ComponentRemove args)
    {
        if (!TryComp <ISpriteComponent>(uid, out var sprite))
        {
            return;
        }

        var animationPlayer = EntityManager.EnsureComponent <AnimationPlayerComponent>(uid);

        if (animationPlayer.HasRunningAnimation(_orbitAnimationKey))
        {
            animationPlayer.Stop(_orbitAnimationKey);
        }

        if (!animationPlayer.HasRunningAnimation(_orbitStopKey))
        {
            animationPlayer.Play(GetStopAnimation(component, sprite), _orbitStopKey);
        }
    }
예제 #5
0
    private void OnComponentInit(EntityUid uid, OrbitVisualsComponent component, ComponentInit args)
    {
        component.OrbitDistance =
            _robustRandom.NextFloat(0.75f * component.OrbitDistance, 1.25f * component.OrbitDistance);

        component.OrbitLength = _robustRandom.NextFloat(0.5f * component.OrbitLength, 1.5f * component.OrbitLength);

        var animationPlayer = EntityManager.EnsureComponent <AnimationPlayerComponent>(uid);

        if (animationPlayer.HasRunningAnimation(_orbitAnimationKey))
        {
            return;
        }

        if (animationPlayer.HasRunningAnimation(_orbitStopKey))
        {
            animationPlayer.Stop(_orbitStopKey);
        }

        animationPlayer.Play(GetOrbitAnimation(component), _orbitAnimationKey);
    }
예제 #6
0
    private Animation GetOrbitAnimation(OrbitVisualsComponent component)
    {
        var length = component.OrbitLength;

        return(new Animation()
        {
            Length = TimeSpan.FromSeconds(length),
            AnimationTracks =
            {
                new AnimationTrackComponentProperty()
                {
                    ComponentType = typeof(OrbitVisualsComponent),
                    Property = nameof(OrbitVisualsComponent.Orbit),
                    KeyFrames =
                    {
                        new AnimationTrackProperty.KeyFrame(0.0f,     0f),
                        new AnimationTrackProperty.KeyFrame(1.0f, length),
                    },
                    InterpolationMode = AnimationInterpolationMode.Linear
                }
            }
        });
    }