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(); }