Esempio n. 1
0
        private Quaternion OrientCamera(MonitorDisplay md, Camera cam)
        {
            Quaternion newCamRot;
            var        radAngle = (cam.fieldOfView + bezelCorrection) * Mathf.Deg2Rad;
            var        radHFOV  = (float)(2f * Math.Atan(Mathf.Tan(radAngle / 2) * cam.aspect));
            var        hFOV     = (Mathf.Rad2Deg * radHFOV);

            //float hFOV = md.assCam.fieldOfView;

            switch (md.monitorPosition)
            {
            case MonitorPosition.center:
                newCamRot = Quaternion.identity;
                break;

            case MonitorPosition.left:
                newCamRot = Quaternion.Euler(Vector3.up * (-hFOV - bezelCorrection));
                break;

            case MonitorPosition.right:
                newCamRot = Quaternion.Euler(Vector3.up * (hFOV + bezelCorrection));
                break;

            default:
                newCamRot = Quaternion.identity;
                break;
            }

            return(newCamRot);
        }
Esempio n. 2
0
        private Camera CreateCam(MonitorDisplay md)
        {
            Camera monCam = Instantiate(Camera.main);

            monCam.tag = "";
            monCam.transform.SetParent(Camera.main.transform.parent);
            monCam.transform.position      = Camera.main.transform.position;
            monCam.transform.localRotation = OrientCamera(md, monCam);
            monCam.targetDisplay           = md.displayIndex;
            return(monCam);
        }
Esempio n. 3
0
        public Vector4 GetBarBackgroundColor(MonitorDisplay display, DisplayTimer timer)
        {
            if (!timer.IsComplete)
            {
                return(display.BarBackgroundColor);
            }
            if (!display.PulseReady)
            {
                return(timer.FinishedColor);
            }
            var s = (float)Math.Abs((Math.Abs((timer.TimerRemaining - display.CacheAge.TotalSeconds) / (2.5f - display.PulseSpeed)) - (float)Math.Floor(Math.Abs((timer.TimerRemaining - display.CacheAge.TotalSeconds) / (2.5f - display.PulseSpeed))) - 0.5f) / 2) * display.PulseIntensity;

            if (timer.FinishedColor.W < 0.75)
            {
                return(timer.FinishedColor + new Vector4(0, 0, 0, s));
            }
            return(timer.FinishedColor - new Vector4(0, 0, 0, s));
        }
Esempio n. 4
0
        private void CreateCameras()
        {
            int numDisplays = Display.displays.Length;

            for (int i = 0; i < numDisplays; i++)
            {
                if (i == leftMonitorIndex || i == rightMonitorIndex)
                {
                    MonitorDisplay md = new MonitorDisplay();
                    md.displayIndex    = i;
                    md.display         = Display.displays[i];
                    md.monitorPosition = i == rightMonitorIndex ? MonitorPosition.right : MonitorPosition.left;
                    md.useDisplay      = true;
                    md.renderScale     = 0.5f;
                    md.assCam          = CreateCam(md);
                    Display.displays[i].Activate();
                    activatedDisplays.Add(md);
                }
            }
        }
Esempio n. 5
0
        public void DrawDisplaysTab()
        {
            ImGui.BeginChild("###displaysScroll", ImGui.GetWindowSize() - (ImGui.GetStyle().WindowPadding * 2) - new Vector2(0, ImGui.GetCursorPosY()));
            if (ImGui.Button("Add New Display"))
            {
                var guid = Guid.NewGuid();
                MonitorDisplays.Add(guid, new MonitorDisplay {
                    Guid = guid, Name = $"Display {MonitorDisplays.Count + 1}"
                });
                Save();
            }

            if (MonitorDisplays.Count == 0)
            {
                ImGui.Text("Add a display to get started.");
            }

            Guid?          deletedMonitor = null;
            MonitorDisplay copiedDisplay  = null;

            foreach (var m in MonitorDisplays.Values)
            {
                if (ImGui.CollapsingHeader($"{(m.Enabled ? "":"[Disabled] ")}{m.Name}###configDisplay{m.Guid}"))
                {
                    m.DrawConfigEditor(this, plugin, ref deletedMonitor, ref copiedDisplay);
                }
            }

            if (deletedMonitor.HasValue)
            {
                MonitorDisplays.Remove(deletedMonitor.Value);
                Save();
            }

            if (copiedDisplay != null && !MonitorDisplays.ContainsKey(copiedDisplay.Guid))
            {
                MonitorDisplays.Add(copiedDisplay.Guid, copiedDisplay);
            }
            ImGui.EndChild();
        }
Esempio n. 6
0
 public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display) {
     var actionBar = pluginInterface.Framework.Gui.GetUiObjectByName("_ActionBar", 1);
     if (actionBar == IntPtr.Zero) return false;
     return Marshal.ReadByte(actionBar, 0x23F) == 0;
 }
Esempio n. 7
0
 public override ushort GetIconID(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display) {
     return 5; //60840;
 }
 public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return((pluginInterface.ClientState.LocalPlayer.ClassJob.Id == 2 || pluginInterface.ClientState.LocalPlayer.ClassJob.Id == 20) &&
            pluginInterface.ClientState.LocalPlayer.Level >= 15 &&
            pluginInterface.ClientState.LocalPlayer.StatusEffects.All(s => s.EffectId != 103 && s.EffectId != 104 && s.EffectId != 105));
 }
Esempio n. 9
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display) {
     return "热键栏未锁定";
 }
Esempio n. 10
0
 public virtual bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return(false);
 }
Esempio n. 11
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return("Summon Pet");
 }
Esempio n. 12
0
        private void DrawDisplayIcons(MonitorDisplay display, List <DisplayTimer> timerList)
        {
            if (display.DirectionBtT)
            {
                ImGui.SetCursorPosY(ImGui.GetWindowHeight() - (display.RowSize + ImGui.GetStyle().WindowPadding.Y));
            }

            if (display.DirectionRtL)
            {
                ImGui.SetCursorPosX(ImGui.GetWindowWidth() - (display.RowSize + ImGui.GetStyle().WindowPadding.X));
            }

            var sPosX = ImGui.GetCursorPosX();
            var sPosY = ImGui.GetCursorPosY();

            ImGui.SetWindowFontScale(display.TextScale);
            foreach (var timer in timerList)
            {
                var cPosX    = ImGui.GetCursorPosX();
                var cPosY    = ImGui.GetCursorPosY();
                var fraction = (float)(timer.TimerCurrent + display.CacheAge.TotalSeconds) / timer.TimerMax;

                if (display.LimitDisplayTime && timer.TimerMax > display.LimitDisplayTimeSeconds)
                {
                    fraction = (float)(display.LimitDisplayTimeSeconds - timer.TimerRemaining + display.CacheAge.TotalSeconds) / display.LimitDisplayTimeSeconds;
                }

                if (display.FillToComplete && fraction < 1)
                {
                    fraction = 1 - fraction;
                }

                ImGui.BeginGroup();

                var drawList = ImGui.GetWindowDrawList();

                var barTopLeft     = ImGui.GetCursorScreenPos();
                var barBottomRight = ImGui.GetCursorScreenPos() + new Vector2(display.RowSize);

                var barSize = barBottomRight - barTopLeft;
                var hovered = false;

                if (display.AllowClicking && timer.ClickAction != null)
                {
                    // Check Mouse Position
                    var mouse = ImGui.GetMousePos();
                    var pos1  = ImGui.GetCursorScreenPos();
                    var pos2  = ImGui.GetCursorScreenPos() + barSize;

                    if (mouse.X > pos1.X && mouse.X < pos2.X && mouse.Y > pos1.Y && mouse.Y < pos2.Y)
                    {
                        display.IsClickableHovered = true;
                        hovered = true;
                        ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
                    }
                }

                var barFractionCompleteSize   = new Vector2(0, barSize.Y * (1 - fraction));
                var barFractionIncompleteSize = new Vector2(0, barSize.Y * fraction);

                DrawBar(barTopLeft, barSize, 1 - fraction, display.IconDisplayFillDirection, GetBarBackgroundColor(display, timer), timer.ProgressColor);

                if (hovered)
                {
                    drawList.AddRect(barTopLeft, barBottomRight, 0xFF0000FF);
                    drawList.AddRect(barTopLeft + Vector2.One, barBottomRight - Vector2.One, 0xFF0000FF);
                }


                if (display.ShowActionIcon && timer.IconId > 0)
                {
                    var iconSize = new Vector2(display.RowSize * display.ActionIconScale);


                    var icon = IconManager.GetIconTexture(timer.IconId);

                    if (icon != null)
                    {
                        iconSize *= new Vector2((float)icon.Width / Math.Max(icon.Width, icon.Height), (float)icon.Height / Math.Max(icon.Width, icon.Height));

                        ImGui.SetCursorPosY(cPosY + barSize.Y / 2 - iconSize.X / 2);
                        ImGui.SetCursorPosX(cPosX + barSize.X / 2 - iconSize.X / 2);

                        ImGui.Image(icon.ImGuiHandle, iconSize);
                    }
                }

                if (timer.AllowCountdown && display.ShowCountdown && (!timer.IsComplete || display.ShowCountdownReady))
                {
                    var countdownText = Math.Abs(timer.TimerRemaining - display.CacheAge.TotalSeconds).ToString("F1");
                    var countdownSize = ImGui.CalcTextSize(countdownText);
                    ImGui.SetCursorPosY(cPosY + (display.RowSize / 2f) - (countdownSize.Y / 2));
                    ImGui.SetCursorPosX(cPosX + (display.RowSize / 2f) - (countdownSize.X / 2));

                    // ImGui.TextColored(display.TextColor, countdownText);
                    TextShadowed(countdownText, display.TextColor, new Vector4(0, 0, 0, 1), 2);
                }

                ImGui.EndGroup();
                if (timer.ClickAction != null)
                {
                    if (hovered && ImGui.GetIO().MouseDown[0])
                    {
                        timer.ClickAction?.Invoke(this, timer.ClickParam);
                    }
                }


                var newX = cPosX;
                var newY = cPosY;
                if (display.IconVerticalStack)
                {
                    if (display.DirectionBtT)
                    {
                        newY = cPosY - display.RowSize - display.BarSpacing;
                        if (newY < 0 + ImGui.GetStyle().WindowPadding.Y)
                        {
                            newY = sPosY;
                            if (display.DirectionRtL)
                            {
                                newX = cPosX - display.RowSize - display.BarSpacing;
                            }
                            else
                            {
                                newX = cPosX + display.RowSize + display.BarSpacing;
                            }
                        }
                    }
                    else
                    {
                        newY = cPosY + display.RowSize + display.BarSpacing;
                        newX = cPosX;
                        if (newY > ImGui.GetWindowHeight() - display.RowSize - ImGui.GetStyle().WindowPadding.Y)
                        {
                            newY = sPosY;
                            if (display.DirectionRtL)
                            {
                                newX = cPosX - display.RowSize - display.BarSpacing;
                            }
                            else
                            {
                                newX = cPosX + display.RowSize + display.BarSpacing;
                            }
                        }
                    }
                }
                else
                {
                    if (display.DirectionRtL)
                    {
                        newX = cPosX - display.RowSize - display.BarSpacing;
                        if (newX < 0 + ImGui.GetStyle().WindowPadding.X)
                        {
                            newX = sPosX;
                            if (display.DirectionBtT)
                            {
                                newY = cPosY - display.RowSize - display.BarSpacing;
                            }
                            else
                            {
                                newY = cPosY + display.RowSize + display.BarSpacing;
                            }
                        }
                    }
                    else
                    {
                        newX = cPosX + display.RowSize + display.BarSpacing;
                        newY = cPosY;
                        if (newX > ImGui.GetWindowWidth() - display.RowSize - ImGui.GetStyle().WindowPadding.X)
                        {
                            newX = sPosX;
                            if (display.DirectionBtT)
                            {
                                newY = cPosY - display.RowSize - display.BarSpacing;
                            }
                            else
                            {
                                newY = cPosY + display.RowSize + display.BarSpacing;
                            }
                        }
                    }
                }



                ImGui.SetCursorPosY(newY);
                ImGui.SetCursorPosX(newX);
            }
        }
Esempio n. 13
0
 public override ushort GetIconID(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     try {
         return(pluginInterface.Data.Excel.GetSheet <Action>().GetRow(18322).Icon);
     } catch {
         return(0);
     }
 }
Esempio n. 14
0
        public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
        {
            if (!_isSetup)
            {
                try {
                    _retainerContainer = (RetainerContainer *)pluginInterface.TargetModuleScanner.GetStaticAddressFromSig("48 8B E9 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 4E");
                    _retainers         = (Retainer *)_retainerContainer->Retainers;
                } catch (Exception ex) {
                    PluginLog.LogError(ex, "Failed to find retainer static address");
                }

                _isSetup = true;
                return(false);
            }

            if (_retainers == null || _retainerContainer == null)
            {
                return(false);
            }
            if (_retainerContainer->Ready == 0)
            {
                return(true);
            }
            count = 0;
            var timeNow = DateTime.UtcNow.Ticks / 10000000L - 62135596800L;

            for (var i = 0; i < _retainerContainer->RetainerCount; i++)
            {
                var retainer = _retainers[i];
                if (retainer.RetainerID == 0 || retainer.Available == 0 || retainer.ClassJob == 0)
                {
                    continue;
                }
                if (retainer.VentureComplete < timeNow)
                {
                    count++;
                }
            }

            return(count > 0);
        }
Esempio n. 15
0
        private void DrawDisplayHorizontal(MonitorDisplay display, List <DisplayTimer> timerList)
        {
            if (display.DirectionBtT)
            {
                ImGui.SetCursorPosY(ImGui.GetWindowHeight() - (display.RowSize + ImGui.GetStyle().WindowPadding.Y));
            }
            ImGui.SetWindowFontScale(display.TextScale);
            var barSize = new Vector2(ImGui.GetWindowWidth() - ImGui.GetStyle().WindowPadding.X * 2, display.RowSize);

            foreach (var timer in timerList)
            {
                var barTopLeft     = ImGui.GetCursorScreenPos();
                var barBottomRight = ImGui.GetCursorScreenPos() + barSize;

                ImGui.BeginGroup();

                var hovered = false;

                if (display.AllowClicking && timer.ClickAction != null)
                {
                    // Check Mouse Position
                    var mouse = ImGui.GetMousePos();
                    var pos1  = ImGui.GetCursorScreenPos();
                    var pos2  = ImGui.GetCursorScreenPos() + barSize;

                    if (mouse.X > pos1.X && mouse.X < pos2.X && mouse.Y > pos1.Y && mouse.Y < pos2.Y)
                    {
                        display.IsClickableHovered = true;
                        hovered = true;
                        ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
                    }
                }
                var cPosY = ImGui.GetCursorPosY();

                var fraction = (float)(timer.TimerCurrent + display.CacheAge.TotalSeconds) / timer.TimerMax;

                if (display.LimitDisplayTime && timer.TimerMax > display.LimitDisplayTimeSeconds)
                {
                    fraction = (float)(display.LimitDisplayTimeSeconds - timer.TimerRemaining + display.CacheAge.TotalSeconds) / display.LimitDisplayTimeSeconds;
                }

                if (display.FillToComplete && fraction < 1)
                {
                    fraction = 1 - fraction;
                }

                DrawBar(ImGui.GetCursorScreenPos(), barSize, 1 - fraction, display.ReverseFill ? FillDirection.FromRight : FillDirection.FromLeft, GetBarBackgroundColor(display, timer), timer.ProgressColor);

                var iconSize = new Vector2(display.RowSize) * display.ActionIconScale;

                if (display.ShowActionIcon)
                {
                    var x = ImGui.GetCursorPosX();
                    if (timer.IconId > 0)
                    {
                        var icon = IconManager.GetIconTexture(timer.IconId);
                        if (icon != null)
                        {
                            var iconRatio = new Vector2((float)icon.Width / Math.Max(icon.Width, icon.Height), (float)icon.Height / Math.Max(icon.Width, icon.Height));

                            var displayedIconSize = iconSize * iconRatio;

                            ImGui.SetCursorPosY(cPosY + (display.RowSize / 2f) - (displayedIconSize.Y / 2));
                            if (display.ReverseSideIcon)
                            {
                                ImGui.SetCursorPosX(ImGui.GetWindowWidth() - (display.RowSize / 2f) - (displayedIconSize.X / 2) - ImGui.GetStyle().WindowPadding.X);
                            }
                            else
                            {
                                ImGui.SetCursorPosX(ImGui.GetCursorPosX() + (display.RowSize / 2f) - (displayedIconSize.X / 2));
                            }


                            ImGui.Image(icon.ImGuiHandle, displayedIconSize);
                        }
                    }
                    ImGui.SameLine();
                    ImGui.SetCursorPosX(x + (display.RowSize / 2f) + (iconSize.X / 2) + ImGui.GetStyle().ItemSpacing.X);
                }

                if (timer.AllowCountdown && display.ShowCountdown && (!timer.IsComplete || display.ShowCountdownReady))
                {
                    var time          = Math.Abs(timer.TimerRemaining - display.CacheAge.TotalSeconds);
                    var countdownText = time.ToString(time >= 100 ? "F0" : "F1");
                    var countdownSize = ImGui.CalcTextSize(countdownText);

                    ImGui.SetCursorPosY(cPosY + (display.RowSize / 2f - countdownSize.Y / 2f));

                    if (display.ReverseCountdownSide)
                    {
                        ImGui.SetCursorPosX(ImGui.GetStyle().WindowPadding.X + display.RowSize / 2f - countdownSize.X / 2);
                    }
                    else
                    {
                        ImGui.SetCursorPosX(ImGui.GetWindowWidth() - ImGui.GetStyle().WindowPadding.X - display.RowSize / 2f - countdownSize.X * 0.6f);
                    }

                    if (display.ShowActionIcon && display.ReverseSideIcon != display.ReverseCountdownSide)
                    {
                        TextShadowed(countdownText, display.TextColor, new Vector4(0, 0, 0, 0.5f), 2);
                    }
                    else
                    {
                        ImGui.TextColored(display.TextColor, countdownText);
                    }
                }

                if (display.ShowSkillName)
                {
                    var name = timer.Name;
                    if (display.ShowStatusEffectTarget && !string.IsNullOrEmpty(timer.TargetName))
                    {
                        name += $" on {timer.TargetName}";
                    }
                    var size = ImGui.CalcTextSize(name);
                    if (display.SkillNameRight)
                    {
                        ImGui.SetCursorPosX(
                            ImGui.GetWindowWidth() -
                            size.X -
                            ImGui.GetStyle().WindowPadding.X -
                            ImGui.GetStyle().FramePadding.X -
                            ((display.ShowActionIcon && display.ReverseSideIcon) || (display.ShowCountdown && !display.ReverseCountdownSide) ? (iconSize.X + ImGui.GetStyle().ItemSpacing.X) : 0)
                            );
                    }
                    else
                    {
                        ImGui.SetCursorPosX(
                            ImGui.GetStyle().WindowPadding.X +
                            ImGui.GetStyle().FramePadding.X +
                            ((display.ShowActionIcon && !display.ReverseSideIcon) || (display.ShowCountdown && display.ReverseCountdownSide) ? (iconSize.X + ImGui.GetStyle().ItemSpacing.X) : 0)
                            );
                    }

                    ImGui.SetCursorPosY(cPosY + (display.RowSize / 2f - size.Y / 2f));
                    ImGui.TextColored(display.TextColor, name);
                }

                if (hovered)
                {
                    var drawList = ImGui.GetWindowDrawList();
                    drawList.AddRect(barTopLeft, barBottomRight, 0xFF0000FF);
                    drawList.AddRect(barTopLeft + Vector2.One, barBottomRight - Vector2.One, 0xFF0000FF);
                }

                ImGui.EndGroup();
                if (ImGui.IsItemClicked(0))
                {
                    timer.ClickAction?.Invoke(this, timer.ClickParam);
                }

                if (display.DirectionBtT)
                {
                    ImGui.SetCursorPosY(cPosY - display.RowSize - display.BarSpacing);
                }
                else
                {
                    ImGui.SetCursorPosY(cPosY + display.RowSize + display.BarSpacing);
                }

                if (ImGui.GetCursorPosY() + display.RowSize > ImGui.GetWindowHeight())
                {
                    return;
                }
            }
        }
Esempio n. 16
0
        public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
        {
            if (_retainers == null || _retainerContainer == null)
            {
                return("Error");
            }
            if (_retainerContainer->Ready == 0)
            {
                return("Retainer List Unloaded");
            }

            return($"{count} Inactive Retainer{(count>1?"s":"")}");
        }
Esempio n. 17
0
        public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
        {
            try {
                if (pluginInterface.ClientState.LocalPlayer.ClassJob.GameData.Role != 1)
                {
                    return(false);
                }
                // Check have stance
                if (pluginInterface.ClientState.LocalPlayer.StatusEffects.Any(s => tankStatusEffectIDs.Contains((uint)s.EffectId)))
                {
                    return(false);
                }
                // Check other tanks have stance


                foreach (var a in pluginInterface.ClientState.Actors)
                {
                    if (!(a is PlayerCharacter pc))
                    {
                        continue;
                    }
                    if (pc.ClassJob.GameData.Role != 1 || pc.ActorId == pluginInterface.ClientState.LocalPlayer.ActorId)
                    {
                        continue;
                    }
                    if (pc.StatusEffects.Any(s => tankStatusEffectIDs.Contains((uint)s.EffectId)))
                    {
                        return(false);
                    }
                }
                return(true);
            } catch {
                return(false);
            }
        }
Esempio n. 18
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return("Apply Fists");
 }
Esempio n. 19
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return("Aetherial Mimicry");
 }
Esempio n. 20
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return("Lock Hotbar");
 }
Esempio n. 21
0
 public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return(pluginInterface.ClientState.LocalPlayer.ClassJob.Id == 36 &&
            pluginInterface.ClientState.LocalPlayer.StatusEffects.All(s => s.EffectId != 2124 && s.EffectId != 2125 && s.EffectId != 2126));
 }
Esempio n. 22
0
 public override ushort GetIconID(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     try {
         var action = pluginInterface.Data.Excel.GetSheet <Action>().GetRow(petIcons[pluginInterface.ClientState.LocalPlayer.ClassJob.Id]);
         return(action.Icon);
     } catch {
         return(0);
     }
 }
Esempio n. 23
0
 public virtual string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return("General Reminder");
 }
Esempio n. 24
0
 public override string GetText(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     try {
         var action = pluginInterface.Data.Excel.GetSheet <Action>().GetRow(TankStanceActions[pluginInterface.ClientState.LocalPlayer.ClassJob.Id]);
         return($"盾姿未开启: {action.Name}");
     } catch {
         return("盾姿未开启");
     }
 }
Esempio n. 25
0
 public virtual ushort GetIconID(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return(0);
 }
Esempio n. 26
0
 public virtual bool HasClickHandle(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     return(false);
 }
Esempio n. 27
0
 public override bool ShouldShow(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     if (!petJobs.Contains(pluginInterface.ClientState.LocalPlayer.ClassJob.Id))
     {
         return(false);
     }
     if (pluginInterface.ClientState.LocalPlayer.ClassJob.Id == 28 && plugin.ActorsWithStatus.ContainsKey(791) && plugin.ActorsWithStatus[791].Contains(pluginInterface.ClientState.LocalPlayer))
     {
         return(false);
     }
     if (pluginInterface.ClientState.Actors.Any(a => a.ObjectKind == ObjectKind.BattleNpc && a is BattleNpc bNpc && bNpc.OwnerId == pluginInterface.ClientState.LocalPlayer.ActorId))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 28
0
 public override ushort GetIconID(DalamudPluginInterface pluginInterface, RemindMe plugin, MonitorDisplay display)
 {
     try {
         return(pluginInterface.Data.Excel.GetSheet <Action>().GetRow(pluginInterface.ClientState.LocalPlayer.Level >= 40 ? 63U : 60U).Icon);
     } catch {
         return(0);
     }
 }
Esempio n. 29
0
        private List <DisplayTimer> GetTimerList(MonitorDisplay display)
        {
            var timerList = new List <DisplayTimer>();

            if (InPvP)
            {
                return(timerList);
            }
            try {
                if (display.Cooldowns.Count > 0)
                {
                    foreach (var cd in display.Cooldowns.Where(cd => {
                        if (cd.ClassJob != PluginInterface.ClientState.LocalPlayer.ClassJob.Id)
                        {
                            return(false);
                        }
                        var action = ActionManager.GetAction(cd.ActionId, true);
                        if (action == null || !action.ClassJobCategory.Value.HasClass(PluginInterface.ClientState.LocalPlayer.ClassJob.Id))
                        {
                            return(false);
                        }
                        if (action.ClassJobLevel > PluginInterface.ClientState.LocalPlayer.Level)
                        {
                            return(false);
                        }
                        if (action.ClassJob.Row == 36 && !BlueMagicSpellbook.Contains(action.RowId))
                        {
                            return(false);
                        }
                        var cooldown = ActionManager.GetActionCooldown(action);
                        if (display.OnlyShowReady && cooldown.IsOnCooldown)
                        {
                            return(false);
                        }
                        if (display.OnlyShowCooldown && !cooldown.IsOnCooldown)
                        {
                            return(false);
                        }
                        if (display.LimitDisplayTime && cooldown.Countdown > display.LimitDisplayTimeSeconds)
                        {
                            return(false);
                        }
                        if (display.LimitDisplayReadyTime && cooldown.CompleteFor > display.LimitDisplayReadyTimeSeconds)
                        {
                            return(false);
                        }
                        if (actionSpecialChecks.ContainsKey(action.RowId))
                        {
                            if (!actionSpecialChecks[action.RowId](display, cd, PluginInterface))
                            {
                                return(false);
                            }
                        }
                        return(true);
                    }))
                    {
                        var action = ActionManager.GetAction(cd.ActionId);

                        if (action != null)
                        {
                            var cooldown = ActionManager.GetActionCooldown(action);
                            timerList.Add(new DisplayTimer {
                                TimerMax      = cooldown.CooldownTotal,
                                TimerCurrent  = cooldown.CooldownElapsed + cooldown.CompleteFor,
                                FinishedColor = display.AbilityReadyColor,
                                ProgressColor = display.AbilityCooldownColor,
                                IconId        = IconManager.GetActionIconId(action),
                                Name          = action.Name
                            });
                        }
                    }
                }
            } catch (Exception ex) {
                PluginLog.LogError("Error parsing cooldowns.");
                PluginLog.Log(ex.ToString());
            }

            try {
                if (display.StatusMonitors.Count > 0)
                {
                    var localPlayerAsList = new List <Actor>()
                    {
                        PluginInterface.ClientState.LocalPlayer
                    };

                    foreach (var sd in display.StatusMonitors.Where(sm => sm.ClassJob == PluginInterface.ClientState.LocalPlayer.ClassJob.Id))
                    {
                        foreach (var sid in sd.StatusIDs)
                        {
                            var status = PluginInterface.Data.Excel.GetSheet <Status>().GetRow(sid);
                            if (status == null)
                            {
                                continue;
                            }

                            if (!ActorsWithStatus.ContainsKey(status.RowId))
                            {
                                continue;
                            }

                            foreach (var a in sd.SelfOnly ? localPlayerAsList : ActorsWithStatus[status.RowId])
                            {
                                if (a != null)
                                {
                                    foreach (var se in a.StatusEffects)
                                    {
                                        if (sd.IsRaid == false && se.OwnerId != PluginInterface.ClientState.LocalPlayer.ActorId)
                                        {
                                            continue;
                                        }
                                        if (sd.LimitedZone > 0 && sd.LimitedZone != PluginInterface.ClientState.TerritoryType)
                                        {
                                            continue;
                                        }
                                        if (display.LimitDisplayTime && se.Duration > display.LimitDisplayTimeSeconds)
                                        {
                                            continue;
                                        }
                                        if (se.EffectId == (short)status.RowId)
                                        {
                                            var t = new DisplayTimer {
                                                TimerMax       = sd.MaxDuration,
                                                TimerCurrent   = sd.MaxDuration <= 0 ? (1 + generalStopwatch.ElapsedMilliseconds / 1000f) : (sd.MaxDuration - se.Duration),
                                                FinishedColor  = display.AbilityReadyColor,
                                                ProgressColor  = display.StatusEffectColor,
                                                IconId         = (ushort)(status.Icon + (sd.Stacking ? se.StackCount - 1 : 0)),
                                                Name           = status.Name,
                                                AllowCountdown = sd.MaxDuration > 0,
                                                StackCount     = sd.Stacking ? se.StackCount : -1,
                                            };

                                            if (!sd.SelfOnly)
                                            {
                                                t.TargetName     = a.Name;
                                                t.TargetNameOnly = display.StatusOnlyShowTargetName;
                                                t.ClickAction    = sd.ClickHandler;
                                                t.ClickParam     = a;
                                            }

                                            timerList.Add(t);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                PluginLog.LogError("Error parsing statuses.");
                PluginLog.Log(ex.ToString());
            }

            timerList.Sort((a, b) => {
                var diff = a.TimerRemaining - b.TimerRemaining;
                if (Math.Abs(diff) < 0.1)
                {
                    return(string.CompareOrdinal(a.Name, b.Name));                      // Equal
                }
                if (diff < 0)
                {
                    return(-1);
                }
                return(1);
            });

            foreach (var reminder in display.GeneralReminders)
            {
                if (reminder.ShouldShow(PluginInterface, this, display))
                {
                    timerList.Insert(0, new DisplayTimer {
                        TimerMax       = 1,
                        TimerCurrent   = 1 + generalStopwatch.ElapsedMilliseconds / 1000f,
                        FinishedColor  = display.AbilityReadyColor,
                        ProgressColor  = display.StatusEffectColor,
                        IconId         = reminder.GetIconID(PluginInterface, this, display),
                        Name           = reminder.GetText(PluginInterface, this, display),
                        AllowCountdown = false
                    });
                }
            }

            return(timerList);
        }
        private void DrawDisplayVertical(MonitorDisplay display, List <DisplayTimer> timerList)
        {
            if (display.DirectionRtL)
            {
                ImGui.SetCursorPosX(ImGui.GetWindowWidth() - (display.RowSize + ImGui.GetStyle().WindowPadding.X));
            }
            ImGui.SetWindowFontScale(display.TextScale);

            var barSize = new Vector2(display.RowSize, ImGui.GetWindowHeight() - ImGui.GetStyle().WindowPadding.Y * 2);

            foreach (var timer in timerList)
            {
                var cPosX    = ImGui.GetCursorPosX();
                var cPosY    = ImGui.GetCursorPosY();
                var fraction = (float)(timer.TimerCurrent + display.CacheAge.TotalSeconds) / timer.TimerMax;

                if (display.LimitDisplayTime && timer.TimerMax > display.LimitDisplayTimeSeconds)
                {
                    fraction = (float)(display.LimitDisplayTimeSeconds - timer.TimerRemaining + display.CacheAge.TotalSeconds) / display.LimitDisplayTimeSeconds;
                }

                if (display.FillToComplete && fraction < 1)
                {
                    fraction = 1 - fraction;
                }

                ImGui.BeginGroup();

                var drawList = ImGui.GetWindowDrawList();

                var barTopLeft     = ImGui.GetCursorScreenPos();
                var barBottomRight = ImGui.GetCursorScreenPos() + barSize;

                var hovered = false;
                if (display.AllowClicking && timer.ClickAction != null)
                {
                    // Check Mouse Position
                    var mouse = ImGui.GetMousePos();
                    var pos1  = ImGui.GetCursorScreenPos();
                    var pos2  = ImGui.GetCursorScreenPos() + barSize;

                    if (mouse.X > pos1.X && mouse.X < pos2.X && mouse.Y > pos1.Y && mouse.Y < pos2.Y)
                    {
                        display.IsClickableHovered = true;
                        hovered = true;
                        ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
                    }
                }

                DrawBar(barTopLeft, barSize, 1 - fraction, display.ReverseFill ? FillDirection.FromTop : FillDirection.FromBottom, GetBarBackgroundColor(display, timer), timer.ProgressColor);
                var iconSize = new Vector2(display.RowSize) * display.ActionIconScale;
                if (display.ShowActionIcon)
                {
                    if (timer.IconId > 0)
                    {
                        var icon = IconManager.GetIconTexture(timer.IconId);
                        if (icon != null)
                        {
                            iconSize *= new Vector2((float)icon.Width / Math.Max(icon.Width, icon.Height), (float)icon.Height / Math.Max(icon.Width, icon.Height));

                            if (display.ReverseSideIcon)
                            {
                                ImGui.SetCursorPosY(cPosY + (barSize.X - iconSize.X) / 2);
                            }
                            else
                            {
                                ImGui.SetCursorPosY(cPosY + barSize.Y - iconSize.Y - (barSize.X - iconSize.X) / 2);
                            }
                            ImGui.SetCursorPosX(cPosX + (display.RowSize / 2f) - (iconSize.X / 2));

                            ImGui.Image(icon.ImGuiHandle, iconSize);
                        }
                    }
                }

                if (timer.AllowCountdown && display.ShowCountdown && (!timer.IsComplete || display.ShowCountdownReady))
                {
                    var countdownValue = Math.Abs(timer.TimerRemaining - display.CacheAge.TotalSeconds);
                    var countdownText  = countdownValue.ToString(countdownValue >= 100 ? "F0" : "F1");
                    var countdownSize  = ImGui.CalcTextSize(countdownText);
                    if (display.ReverseCountdownSide)
                    {
                        ImGui.SetCursorPosY(cPosY + barSize.Y - (display.RowSize / 2f) - countdownSize.Y / 2);
                    }
                    else
                    {
                        ImGui.SetCursorPosY(cPosY + (display.RowSize / 2f) - countdownSize.Y / 2);
                    }

                    ImGui.SetCursorPosX(cPosX + (display.RowSize / 2f) - (countdownSize.X / 2));
                    if (display.ShowActionIcon && display.ReverseCountdownSide != display.ReverseSideIcon)
                    {
                        TextShadowed(countdownText, display.TextColor, new Vector4(0, 0, 0, 0.5f), 2);
                    }
                    else
                    {
                        ImGui.TextColored(display.TextColor, countdownText);
                    }
                }

                if (display.ShowSkillName)
                {
                    var size = ImGui.CalcTextSize(timer.Name);
                    ImGui.SetCursorPosX(cPosX + display.RowSize / 2f - size.Y / 2);
                    ImGui.SetCursorPosY(ImGui.GetWindowHeight() - (display.RowSize + (size.X * display.TextScale) + ImGui.GetStyle().ItemSpacing.X));
                    AddTextVertical(timer.Name, ImGui.GetColorU32(display.TextColor), display.TextScale);
                }

                if (hovered)
                {
                    drawList.AddRect(barTopLeft, barBottomRight, 0xFF0000FF);
                    drawList.AddRect(barTopLeft + Vector2.One, barBottomRight - Vector2.One, 0xFF0000FF);
                }


                ImGui.EndGroup();
                if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
                {
                    timer.ClickAction?.Invoke(this, timer.ClickParam);
                }

                ImGui.SameLine();
                if (display.DirectionRtL)
                {
                    ImGui.SetCursorPosX(cPosX - display.RowSize - display.BarSpacing);
                }
                else
                {
                    ImGui.SetCursorPosX(cPosX + display.RowSize + display.BarSpacing);
                }

                if (ImGui.GetCursorPosX() + display.RowSize > ImGui.GetWindowWidth())
                {
                    return;
                }
            }
        }