示例#1
0
        private void DrawTargetInfo(BattleChara actor, Vector2 cursorPos, float castScale, float offsetX, string actionName,
                                    string interruptedText, bool drawCast, bool castInterrupted, bool castInterruptible, bool isRight)
        {
            var hpScale = (float)actor.CurrentHp / actor.MaxHp * 100f;

            DrawBar(cursorPos, offsetX, hpScale / 100f,
                    _pluginConfiguration.HpColorAlpha, isRight);

            var actorName = $"{actor.Name}\n({hpScale:F2})%";

            var actorNameSize = TextExtension.CalcTextSize(actorName,
                                                           _pluginConfiguration.FontScale * _pluginConfiguration.Scale);

            TextExtension.DrawOutlineText(
                new Vector2(isRight ? cursorPos.X + _pluginConfiguration.BarImage.Width * _pluginConfiguration.Scale + offsetX + actorNameSize.Y : cursorPos.X - offsetX - actorNameSize.Y,
                            cursorPos.Y + _pluginConfiguration.BarBackgroundImage.Height / 2f * _pluginConfiguration.Scale -
                            actorNameSize.X / 2f),
                _pluginConfiguration.CastTextColorAlpha, _pluginConfiguration.CastTextOutlineColorAlpha,
                actorName, _pluginConfiguration.FontScale * _pluginConfiguration.Scale, 2, true, isRight);

            if (!drawCast)
            {
                return;
            }

            var castStringSize =
                TextExtension.CalcTextSize(actionName, _pluginConfiguration.FontScale * _pluginConfiguration.Scale);

            TextExtension.DrawOutlineText(
                new Vector2(isRight ? cursorPos.X + _pluginConfiguration.BarImage.Width * _pluginConfiguration.Scale + offsetX + actorNameSize.Y + castStringSize.Y: cursorPos.X - offsetX - actorNameSize.Y - castStringSize.Y,
                            cursorPos.Y + _pluginConfiguration.BarBackgroundImage.Height / 2f * _pluginConfiguration.Scale -
                            castStringSize.X / 2f),
                _pluginConfiguration.CastTextColorAlpha, _pluginConfiguration.CastTextOutlineColorAlpha,
                actionName, _pluginConfiguration.FontScale * _pluginConfiguration.Scale, 2, true, isRight);

            if (castInterrupted)
            {
                var castInterruptedStringSize = TextExtension.CalcTextSize(interruptedText,
                                                                           _pluginConfiguration.FontScale * _pluginConfiguration.Scale);

                TextExtension.DrawOutlineText(
                    new Vector2(isRight ? cursorPos.X + _pluginConfiguration.BarImage.Width * _pluginConfiguration.Scale + offsetX + actorNameSize.Y + castStringSize.Y + castInterruptedStringSize.Y : cursorPos.X - offsetX - actorNameSize.Y - castStringSize.Y - castInterruptedStringSize.Y,
                                cursorPos.Y + _pluginConfiguration.BarBackgroundImage.Height / 2f * _pluginConfiguration.Scale -
                                castInterruptedStringSize.X / 2f),
                    _pluginConfiguration.CastTextColorAlpha, _pluginConfiguration.CastTextOutlineColorAlpha,
                    interruptedText, _pluginConfiguration.FontScale * _pluginConfiguration.Scale, 2, true, isRight);
            }

            DrawCastBar(cursorPos, offsetX, castScale,
                        castInterrupted ? _pluginConfiguration.CastInterruptColorAlpha :
                        castInterruptible?_pluginConfiguration.CastInterruptColorAlpha: _pluginConfiguration.CastColorAlpha,
                        isRight, true);
        }
示例#2
0
        public static Character?Convert(GameObject?actor)
        {
            if (actor == null)
            {
                return(null);
            }

            return(actor switch
            {
                PlayerCharacter p => p,
                BattleChara b => b,
                _ => actor.ObjectKind switch
                {
                    ObjectKind.BattleNpc => Character(actor.Address),
                    ObjectKind.Companion => Character(actor.Address),
                    ObjectKind.Retainer => Character(actor.Address),
                    ObjectKind.EventNpc => Character(actor.Address),
                    _ => null,
                },
            });