Beispiel #1
0
    private static void RenderCurrentGoalPath(IGameViewport viewport, GameObject obj)
    {
        var slot = GameSystems.Anim.GetSlot(obj);

        if (slot == null || !slot.path.IsComplete)
        {
            return;
        }

        var renderer3d = Tig.ShapeRenderer3d;

        var color             = PackedLinearColorA.OfFloats(1.0f, 1.0f, 1.0f, 0.5f);
        var circleBorderColor = PackedLinearColorA.OfFloats(1.0f, 1.0f, 1.0f, 1.0f);
        var circleFillColor   = PackedLinearColorA.OfFloats(0.0f, 0.0f, 0.0f, 0.0f);

        var currentPos = obj.GetLocationFull().ToInches3D();

        for (int i = slot.path.currentNode; i + 1 < slot.path.nodeCount; i++)
        {
            var nextPos = slot.path.nodes[i].ToInches3D();
            renderer3d.DrawLineWithoutDepth(viewport, currentPos, nextPos, color);
            renderer3d.DrawFilledCircle(viewport, nextPos, 4, circleBorderColor, circleFillColor, false);
            renderer3d.DrawFilledCircle(viewport, nextPos, 4, circleBorderColor, circleFillColor, true);
            currentPos = nextPos;
        }

        // Draw the last path node
        var pathTo = slot.path.to.ToInches3D();

        renderer3d.DrawLineWithoutDepth(viewport, currentPos, pathTo, color);
        renderer3d.DrawFilledCircle(viewport, pathTo, 4, circleBorderColor, circleFillColor, false);
        renderer3d.DrawFilledCircle(viewport, pathTo, 4, circleBorderColor, circleFillColor, true);
    }
    public override void Render()
    {
        var buttonState = ForceVisible ? LgcyButtonState.Hovered : ButtonState;

        if (buttonState != _lastButtonState)
        {
            _lastButtonState = buttonState;
            if (buttonState == LgcyButtonState.Hovered)
            {
                if (float.IsNaN(_animationPhase))
                {
                    _time           = TimePoint.Now;
                    _time          -= TimeSpan.FromMilliseconds(1);
                    _animationPhase = 0;
                }
                else
                {
                    _time  = TimePoint.Now;
                    _time += TimeSpan.FromMilliseconds((int)(_animationPhase * -1000.0f));
                    _trend = 1;
                }
            }
            else if (buttonState == LgcyButtonState.Normal)
            {
                _time += TimeSpan.FromMilliseconds((int)(_animationPhase * -333.3f));
                _trend = -1;
                _time  = TimePoint.Now;
            }
        }

        if (_animationPhase >= 0.0f)
        {
            if (_trend == 1)
            {
                _animationPhase = (float)(TimePoint.Now - _time).TotalMilliseconds / 333.3f;
            }
            else
            {
                _animationPhase = (1000.0f - (float)(TimePoint.Now - _time).TotalMilliseconds)
                                  * 0.001f;
            }

            _animationPhase = Math.Clamp(_animationPhase, 0, 1);
        }

        var currentSize   = (int)(_animationPhase * 2 * _radius);
        var currentOffset = (int)((1.0f - _animationPhase) * _radius);

        _ringImage.X         = currentOffset;
        _ringImage.Y         = currentOffset;
        _ringImage.FixedSize = new Size(currentSize, currentSize);

        if (_animationPhase > 0)
        {
            _ringImage.Color = PackedLinearColorA.OfFloats(1.0f, 1.0f, 1.0f, _animationPhase);
        }

        base.Render();
    }