Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // PowerCircle.cs "$Revision: 2591 $" "$Date: 2019-09-23 13:20:14 +0300 (ma, 23 syys 2019) $"
- // Files:
- // plugins/JarJar/PowerCircle https://pastebin.com/dDQGn1An
- // plugins/User/Runes https://pastebin.com/vSfQm5x6
- using System.Globalization;
- using System.Linq;
- using SharpDX;
- using SharpDX.Direct2D1;
- using Turbo.Plugins.Default;
- using Turbo.Plugins.User;
- namespace Turbo.Plugins.JarJar
- {
- public class PowerCircle : BasePlugin, IInGameWorldPainter
- {
- public bool IsCrusader { get; set; } = true;
- public bool IsNecromancer { get; set; } = true;
- public bool IsWitchDoctor { get; set; } = true;
- public bool IsWizard { get; set; } = true;
- public bool ShowMouseDistancePlayer { get; set; } = false;
- public string MouseLabelFormat { get; set; } = "{0:0}";
- public float MouseDistOffsetX { get; set; } = 2f;
- public float MouseDistOffsetY { get; set; } = 1f;
- public WorldDecoratorCollection MouseDistDecorator { get; set; }
- public WorldDecoratorCollection PowerDecoratorMain { get; set; }
- public WorldDecoratorCollection PowerDecoratorExtra { get; set; }
- public WorldDecoratorCollection MouseCircleDecorator { get; set; }
- public WorldDecoratorCollection SlowTimeDecorator { get; set; }
- public WorldDecoratorCollection MeteorDecoratorPending { get; set; }
- public WorldDecoratorCollection MeteorDecoratorActive { get; set; }
- public WorldDecoratorCollection MeteorDecoratorTimed { get; set; }
- public PowerCircle() { Enabled = true; }
- public override void Load(IController hud)
- {
- base.Load(hud);
- var font = Color.Black;
- MouseDistDecorator = new WorldDecoratorCollection(
- new GroundLabelDecorator(Hud)
- {
- BackgroundBrush = Hud.Render.CreateBrush(255, 255, 255, 64, 0),
- TextFont = Hud.Render.CreateFont("tahoma", 9f, 255, font.R, font.G, font.B, false, false, false),
- }
- );
- PowerDecoratorMain = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, 192, 96, 0, 1.5f, DashStyle.Dash), // Kind of orange
- Radius = -1f,
- }
- );
- PowerDecoratorExtra = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, 255, 0, 128, 1.5f, DashStyle.Dash), // Kind of purple
- Radius = -1f,
- }
- );
- var color = Color.Yellow;
- MouseCircleDecorator = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, color.R, color.G, color.B, 2f, DashStyle.DashDot),
- Radius = -1f,
- }
- );
- color = Color.Crimson;
- var minimapColor = Color.Cyan;
- font = Color.MediumSpringGreen;
- SlowTimeDecorator = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(100, color.R, color.G, color.B, 4f, DashStyle.Solid),
- Radius = 20f,
- },
- new GroundLabelDecorator(Hud)
- {
- CountDownFrom = 15,
- TextFont = Hud.Render.CreateFont("tahoma", 9, 255, font.R, font.G, font.B, true, false, 128, 0, 0, 0, true),
- },
- new GroundTimerDecorator(Hud)
- {
- CountDownFrom = 15,
- BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
- BackgroundBrushFill = Hud.Render.CreateBrush(100, color.R, color.G, color.B, 0),
- Radius = 20f,
- },
- new MapShapeDecorator(Hud) // Minimnap
- {
- ShapePainter = new CircleShapePainter(Hud),
- Brush = Hud.Render.CreateBrush(255, minimapColor.R, minimapColor.G, minimapColor.B, 2.5f, DashStyle.Solid),
- Radius = 12f,
- }
- );
- color = Color.Orange;
- MeteorDecoratorPending = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, color.R, color.G, color.B, 4f, DashStyle.Dash),
- Radius = 12f,
- }
- );
- color = Color.Crimson;
- MeteorDecoratorActive = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, color.R, color.G, color.B, 4f, DashStyle.Solid),
- Radius = 12f,
- }
- );
- color = Color.Orange;
- MeteorDecoratorTimed = new WorldDecoratorCollection(
- new GroundCircleDecorator(Hud)
- {
- Brush = Hud.Render.CreateBrush(255, color.R, color.G, color.B, 4f, DashStyle.Solid),
- Radius = 12f,
- },
- new GroundLabelDecorator(Hud)
- {
- CountDownFrom = 3,
- TextFont = Hud.Render.CreateFont("tahoma", 9, 255, font.R, font.G, font.B, true, false, 128, 0, 0, 0, true),
- },
- new GroundTimerDecorator(Hud)
- {
- CountDownFrom = 3,
- BackgroundBrushEmpty = Hud.Render.CreateBrush(128, 0, 0, 0, 0),
- BackgroundBrushFill = Hud.Render.CreateBrush(100, color.R, color.G, color.B, 0),
- Radius = 20f,
- }
- );
- }
- public void PaintWorld(WorldLayer layer)
- {
- if (Hud.Render.UiHidden)
- return;
- if ((Hud.Game.MapMode == MapMode.WaypointMap) || (Hud.Game.MapMode == MapMode.ActMap) || (Hud.Game.MapMode == MapMode.Map))
- return;
- if (Hud.Inventory.InventoryMainUiElement.Visible)
- return;
- if (Hud.Game.Me.IsDead || Hud.Game.Me.AnimationState == AcdAnimationState.CastingPortal)
- return;
- switch (Hud.Game.Me.HeroClassDefinition.HeroClass)
- {
- case HeroClass.Crusader:
- if (IsCrusader) Crusader(layer);
- break;
- case HeroClass.Necromancer:
- if (IsNecromancer) Necromancer(layer);
- break;
- case HeroClass.WitchDoctor:
- if (IsWitchDoctor) WitchDoctor(layer);
- break;
- case HeroClass.Wizard:
- if (IsWizard) Wizard(layer);
- break;
- }
- if (ShowMouseDistancePlayer && layer == WorldLayer.Ground)
- {
- var mouseCoord = Hud.Window.CreateScreenCoordinate(Hud.Window.CursorX, Hud.Window.CursorY).ToWorldCoordinate();
- var distance = mouseCoord.XYDistanceTo(Hud.Game.Me.FloorCoordinate);
- var label = string.Format(CultureInfo.InvariantCulture, MouseLabelFormat, distance);
- MouseDistDecorator.Paint(layer, null, mouseCoord.Offset(MouseDistOffsetX, MouseDistOffsetY, 0f), label);
- }
- }
- private void Crusader(WorldLayer layer)
- {
- var skill = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Crusader_Provoke);
- if (skill != null)
- {
- paint(layer, PowerDecoratorMain, 15f);
- }
- else
- {
- // Mostly same radius as Provoke.
- skill = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Crusader_Condemn);
- if (skill != null)
- {
- switch (skill.Rune)
- {
- case Runes.Crusader.Condemn.Vacuum:
- case Runes.Crusader.Condemn.ShatteringExplosion:
- paint(layer, PowerDecoratorMain, 20f);
- break;
- default:
- paint(layer, PowerDecoratorMain, 15f);
- break;
- }
- }
- }
- skill = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Crusader_SweepAttack);
- if (skill != null)
- {
- switch (skill.Rune)
- {
- case Runes.Crusader.SweepAttack.GatheringSweep:
- paint(layer, PowerDecoratorExtra, 28f);
- break;
- default:
- paint(layer, PowerDecoratorExtra, 18f);
- break;
- }
- }
- }
- private void Necromancer(WorldLayer layer)
- {
- // Frailty and Devour has same 15 yd base radius extended by 50% of pickup range.
- // - Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Necromancer_Passive_FrailtyPassiveEffect.Sno)
- if (Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Necromancer_Frailty)?.Rune == Runes.Necromancer.Frailty.AuraOfFrailty ||
- Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Necromancer_Devour)?.Rune == Runes.Necromancer.Devour.DevouringAura)
- {
- var helperRadius = 15f + (Hud.Game.Me.Stats.PickupRange / 2f);
- paint(layer, PowerDecoratorMain, helperRadius);
- }
- if (Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Necromancer_BoneArmor) != null)
- {
- paint(layer, PowerDecoratorExtra, 30f);
- }
- }
- private void WitchDoctor(WorldLayer layer)
- {
- if (Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.WitchDoctor_SoulHarvest) != null)
- {
- paint(layer, PowerDecoratorMain, 18f);
- }
- }
- private string prevText = string.Empty;
- private readonly ActorSnoEnum[] wizardMeteors = new ActorSnoEnum[]
- {
- // All possible candidates, not checked.
- ActorSnoEnum._temp_wizard_meteor_impact,
- ActorSnoEnum._temp_wizard_meteor_pending,
- ActorSnoEnum._temp_wizard_meteor_afterburn,
- ActorSnoEnum._temp_wizard_meteor_pending_rune,
- ActorSnoEnum._temp_wizard_meteor_impact_rune,
- ActorSnoEnum._temp_wizard_meteor_pending_frost_rune,
- ActorSnoEnum._temp_wizard_meteor_impact_frost_rune,
- ActorSnoEnum._temp_wizard_meteor_afterburn_frost_rune,
- ActorSnoEnum._wizard_meteor_impact_adddamage,
- ActorSnoEnum._wizard_meteor_pending_adddamage,
- ActorSnoEnum._wizard_meteor_impact_cost,
- ActorSnoEnum._wizard_meteor_pending_cost,
- ActorSnoEnum._wizard_meteor_sphereholes,
- ActorSnoEnum._wizard_meteor_afterburn_cost,
- ActorSnoEnum._wizard_meteor_firering_geo_cost,
- ActorSnoEnum._temp_wizard_meteor_pending_longer,
- ActorSnoEnum._temp_wizard_meteor_impact_longer,
- ActorSnoEnum._temp_wizard_meteor_afterburn_longer,
- };
- private readonly ActorSnoEnum[] pendingMeteor = new ActorSnoEnum[]
- {
- // Hand picked
- ActorSnoEnum._temp_wizard_meteor_pending,
- ActorSnoEnum._temp_wizard_meteor_pending_longer,
- ActorSnoEnum._wizard_meteor_pending_cost,
- ActorSnoEnum._temp_wizard_meteor_pending_frost_rune,
- ActorSnoEnum._temp_wizard_meteor_pending_rune,
- ActorSnoEnum._wizard_meteor_pending_adddamage,
- };
- private readonly ActorSnoEnum[] timedMeteor = new ActorSnoEnum[]
- {
- // Hand picked
- ActorSnoEnum._temp_wizard_meteor_afterburn,
- ActorSnoEnum._temp_wizard_meteor_impact_longer,
- ActorSnoEnum._temp_wizard_meteor_afterburn_longer,
- ActorSnoEnum._wizard_meteor_impact_cost,
- ActorSnoEnum._wizard_meteor_afterburn_cost,
- ActorSnoEnum._temp_wizard_meteor_afterburn_frost_rune,
- };
- private void Wizard(WorldLayer layer)
- {
- var meteor = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Wizard_Meteor);
- var slowTime = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Wizard_SlowTime);
- if (meteor != null || slowTime != null)
- {
- var radius = meteor != null ? 12f : 15f;
- var mouseCoord = Hud.Window.CreateScreenCoordinate(Hud.Window.CursorX, Hud.Window.CursorY).ToWorldCoordinate();
- paint(layer, MouseCircleDecorator, radius, mouseCoord);
- var text = string.Empty;
- var actors = Hud.Game.Actors; // Select all actors created by any player.
- foreach (var actor in actors)
- {
- if (meteor != null)
- {
- if (wizardMeteors.Any(x => x == actor.SnoActor.Sno))
- {
- //text = string.Format("actor {0,6} {1,40} d={2,2:0}", (uint)actor.SnoActor.Sno, actor.SnoActor.Sno, (Hud.Game.CurrentGameTick - actor.CreatedAtInGameTick) / 60.0);
- switch (meteor.Rune)
- {
- case Runes.Wizard.Meteor.MeteorShower:
- radius = 8f;
- break;
- case Runes.Wizard.Meteor.MoltenImpact:
- radius = 20f;
- break;
- default:
- radius = 12f;
- break;
- }
- if (pendingMeteor.Any(x => x == actor.SnoActor.Sno))
- {
- paint(layer, MeteorDecoratorPending, radius, actor.FloorCoordinate);
- }
- else if (timedMeteor.Any(x => x == actor.SnoActor.Sno))
- {
- paint(layer, MeteorDecoratorTimed, radius, actor.FloorCoordinate, actor);
- }
- else
- {
- paint(layer, MeteorDecoratorActive, radius, actor.FloorCoordinate);
- }
- }
- }
- if (slowTime != null)
- {
- switch (actor.SnoActor.Sno)
- {
- case ActorSnoEnum._wizard_slowtime_proxy: // No rune
- case ActorSnoEnum._wizard_slowtimerune_damage_proxy: // 0 Time warp
- case ActorSnoEnum._wizard_slowtimerune_linger_proxy: // 1 Point of no return
- case ActorSnoEnum._wizard_slowtimerune_small_proxy: // 2 Time shell
- case ActorSnoEnum._wizard_slowtimerune_cost_proxy: // 3 Exhaustion
- case ActorSnoEnum._wizard_slowtimerune_attackspeed_proxy: // 4 Stretch time
- SlowTimeDecorator.Paint(layer, actor, actor.FloorCoordinate, null);
- break;
- }
- }
- }
- if (text != string.Empty)
- {
- if (prevText != text)
- {
- prevText = text;
- Hud.Debug(text);
- }
- }
- }
- }
- private void paint(WorldLayer layer, WorldDecoratorCollection decoratorCollection, float radius, IWorldCoordinate coord = null, IActor actor = null)
- {
- var decorator = decoratorCollection.Decorators[0] as GroundCircleDecorator;
- if (decorator.Radius != radius)
- {
- decorator.Radius = radius;
- }
- decoratorCollection.Paint(layer, actor, coord ?? Hud.Game.Me.FloorCoordinate, null);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement