Пример #1
0
 public Pointers(
     TargetSystem *targetSystem,
     float *playerViewTriangleRotation,
     AtkUnitBase *currentSourceBase,
     AtkComponentNode *currentMapIconsRootComponentNode,
     AtkImageNode *weatherIconNode,
     nint naviMapTextureD3D11ShaderResourceView
     )
 {
     TargetSystem    = targetSystem;
     WeatherIconNode = weatherIconNode;
     NaviMapTextureD3D11ShaderResourceView = naviMapTextureD3D11ShaderResourceView;
     CurrentMapIconsRootComponentNode      = currentMapIconsRootComponentNode;
     CurrentSourceBase          = currentSourceBase;
     PlayerViewTriangleRotation = playerViewTriangleRotation;
 }
Пример #2
0
    private static unsafe void DrawDistanceToTarget(
        bool prioritizeMouseOverTarget,
        TargetSystem *targetSystem,
        float scale,
        uint colour,
        Vector2 pMin,
        string prefix,
        string suffix
        )
    {
        var drawList = ImGui.GetWindowDrawList();
        var current  = prioritizeMouseOverTarget && targetSystem->MouseOverTarget != null
            ? targetSystem->MouseOverTarget
            : targetSystem->GetCurrentTarget();

        if (current is null)
        {
            return;
        }
        var distanceFromPlayer = *current switch {
            { ObjectKind : var o } when
                (ObjectKind) o is ObjectKind.Pc or ObjectKind.BattleNpc or ObjectKind.EventNpc
            => current->YalmDistanceFromPlayerX,
            _ => byte.MaxValue
        };

        if (distanceFromPlayer == byte.MaxValue)
        {
            return;
        }
        var text = $"{prefix}{distanceFromPlayer + 1}{suffix}";
        var font = UiBuilder.DefaultFont;
        var distanceToTargetScale = font.FontSize * scale;

        // NOTE: Manually unrolled loop
        // Imitates a black border around text
        // A quick'n'dirty solution to be used sparingly
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(-1, +1)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(0, +1)
                         , 0xFF000000
                         , text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(+1, +1)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(-1, 0)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(+1, 0)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(-1, -1)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(0, -1)
                         , 0xFF000000,
                         text);
        drawList.AddText(font,
                         distanceToTargetScale,
                         pMin + new Vector2(+1, -1)
                         , 0xFF000000,
                         text);
        drawList.AddText(font, distanceToTargetScale, pMin, colour, text);
    }