Skip to content

Commit

Permalink
[fix] position
Browse files Browse the repository at this point in the history
  • Loading branch information
Garume committed Dec 16, 2024
1 parent 160b890 commit a4f8e84
Showing 1 changed file with 84 additions and 82 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
Expand Down Expand Up @@ -37,7 +38,7 @@ public enum Direction

public enum FirstBaitType
{
GoToSecondOrFirstTower,
GoToSecondOrThirdTower,
GoToOppositeFirstTower
}

Expand Down Expand Up @@ -87,7 +88,7 @@ public enum TowerType
private State _state = State.None;

public override HashSet<uint>? ValidTerritories => [1238];
public override Metadata? Metadata => new(2, "Garume");
public override Metadata? Metadata => new(3, "Garume");

public Config C => Controller.GetConfig<Config>();

Expand Down Expand Up @@ -128,7 +129,7 @@ public override void OnSetup()
overlayVOffset = 3f,
overlayText = "<< Next >>"
});

Controller.TryRegisterElement("TankAOE", new Element(0)
{
radius = 5f,
Expand Down Expand Up @@ -201,12 +202,12 @@ public void HidePredictTower()
{
if (Controller.TryGetElementByName("PredictTower", out var predictTower)) predictTower.Enabled = false;
}

public void SetAoe(Vector3 position)
{
SetElementPosition("TankAOE", position);
}

public void HideAoe()
{
if (Controller.TryGetElementByName("TankAOE", out var aoe)) aoe.Enabled = false;
Expand All @@ -222,83 +223,78 @@ public override void OnUpdate()

Controller.GetRegisteredElements().Where(x => x.Key is "Bait" or "Tower").Each(e =>
e.Value.color = GradientColor.Get(C.BaitColor1, C.BaitColor2).ToUint());


if (_state == State.FirstTower)
{
if (C.ShowAOE)
{
Vector3 aoePosition;
if (_firstAttack == AttackType.Light)
{
aoePosition = FakeParty.Get().Select(x => x.Position)
.MaxBy(x => Vector3.Distance(x, new Vector3(100, 0, 100)));
}
else
{
aoePosition = FakeParty.Get().Select(x => x.Position)
.MinBy(x => Vector3.Distance(x, new Vector3(100, 0, 100)));
}

SetAoe(aoePosition);
}

var firstTower = _towers[0];
if (C.MoveType == MoveType.FirstBait)
{
switch (C.FirstBaitType)
{
case FirstBaitType.GoToSecondOrFirstTower:
case FirstBaitType.GoToSecondOrThirdTower:
{
var tankDirection = (int)firstTower.Direction + (_firstAttack == AttackType.Light ? -120 : 120);
var tankDirection = firstTower.RealAngle + (_firstAttack == AttackType.Light ? -120 : 120);
if (tankDirection >= 360) tankDirection -= 360;
if (tankDirection < 0) tankDirection += 360;
var position = new Vector3(100, 0, 92f);
_firstBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
position);
SetBaitPosition(_firstBaitPosition);

tankDirection = (int)ReverseDirection(firstTower.Direction);
tankDirection = firstTower.OppositeRealAngle;
position = new Vector3(100, 0, 100 - (_firstAttack == AttackType.Light ? 2f : 14f));
_secondBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
position);
SetPredictBaitPosition(_secondBaitPosition);
break;
}
case FirstBaitType.GoToOppositeFirstTower:
{
var tankDirection = ReverseDirection(firstTower.Direction);
var tankDirection = firstTower.OppositeRealAngle;
var position = new Vector3(100, 0, 92f);
_firstBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), ((int)tankDirection).DegreesToRadians(),
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
position);
SetBaitPosition(_firstBaitPosition);

position = new Vector3(100, 0, 100 - (_firstAttack == AttackType.Light ? 2f : 14f));
_secondBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), ((int)tankDirection).DegreesToRadians(),
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
position);
SetPredictBaitPosition(_secondBaitPosition);
break;
}
}
}

if (C.MoveType == MoveType.SecondBait)
{
switch (C.SecondBaitType)
{
case SecondBaitType.GoToFirstTower:
{
var tankDirection = (int)firstTower.Direction;
var tankDirection = firstTower.RealAngle;

var position = new Vector3(100, 0, 100f - (_firstAttack == AttackType.Light ? 14f : 2f));
_firstBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
position);
SetBaitPosition(_firstBaitPosition);

tankDirection = (int)firstTower.Direction + (_firstAttack == AttackType.Light ? -60 : 60);
tankDirection += _firstAttack == AttackType.Light ? -60 : 60;
position = new Vector3(100, 0, 92f);
_secondBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
Expand All @@ -308,13 +304,14 @@ public override void OnUpdate()
}
case SecondBaitType.GoToSafe:
{
var tankDirection = (int)firstTower.Direction + (_firstAttack == AttackType.Light ? -60 : 60);
var tankDirection = firstTower.RealAngle + (_firstAttack == AttackType.Light ? -60 : 60);
if (tankDirection >= 360) tankDirection -= 360;
if (tankDirection < 0) tankDirection += 360;

var radius = new Vector3(100, 0, 100 - (_firstAttack == AttackType.Light ? 14f : 2f));
_firstBaitPosition =
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(), radius);
MathHelper.RotateWorldPoint(new Vector3(100, 0, 100), tankDirection.DegreesToRadians(),
radius);
SetBaitPosition(_firstBaitPosition);

var position = new Vector3(100, 0, 92f);
Expand All @@ -324,7 +321,6 @@ public override void OnUpdate()
break;
}
}
}

if (C.MoveType == MoveType.Tower)
switch (C.TowerType)
Expand Down Expand Up @@ -407,19 +403,15 @@ public override void OnUpdate()
{
Vector3 aoePosition;
if (_firstAttack == AttackType.Light)
{
aoePosition = FakeParty.Get().Select(x => x.Position)
.MinBy(x => Vector3.Distance(x, new Vector3(100, 0, 100)));
}
else
{
aoePosition = FakeParty.Get().Select(x => x.Position)
.MaxBy(x => Vector3.Distance(x, new Vector3(100, 0, 100)));
}

SetAoe(aoePosition);
}

if (C.MoveType == MoveType.FirstBait)
{
SetBaitPosition(_secondBaitPosition);
Expand Down Expand Up @@ -514,54 +506,40 @@ public override void OnUpdate()
HideTower();
HidePredictTower();

switch (C.TowerType)
if (C.TowerType == TowerType.Third)
{
case TowerType.Third:
SetTowerPosition(_towers[2].Position.ToVector3(0));
break;
case TowerType.Left:
{
if (_towers.TryGetFirst(x => x.IsLeft == true, out var tower)) ShowTowerIfThird(tower);

break;
}
case TowerType.Right:
{
if (_towers.TryGetFirst(x => x.IsLeft == false, out var tower))
ShowTowerIfThird(tower);

break;
}
case TowerType.LeftWhenSecondCleave:
{
if (_towers.TryGetFirst(x => x.IsLeft == true, out var tower))
ShowTowerIfThird(tower);

break;
}
case TowerType.RightWhenSecondCleave:
{
if (_towers.TryGetFirst(x => x.IsLeft == false, out var tower))
ShowTowerIfThird(tower);

break;
}
case TowerType.FirstSafe:
{
var isLeft = _firstAttack == AttackType.Dark;
if (_towers.TryGetFirst(x => x.IsLeft == isLeft, out var tower))
ShowTowerIfThird(tower);

break;
}
case TowerType.SecondSafe:
{
var isLeft = _firstAttack == AttackType.Light;
if (_towers.TryGetFirst(x => x.IsLeft == isLeft, out var tower))
ShowTowerIfThird(tower);

break;
}
SetTowerPosition(_towers[2].Position.ToVector3(0));
}
else if (C.TowerType == TowerType.Left)
{
if (_towers.TryGetFirst(x => x.IsLeft == true, out var tower)) ShowTowerIfThird(tower);
}
else if (C.TowerType == TowerType.Right)
{
if (_towers.TryGetFirst(x => x.IsLeft == false, out var tower))
ShowTowerIfThird(tower);
}
else if (C.TowerType == TowerType.LeftWhenSecondCleave)
{
if (_towers.TryGetFirst(x => x.IsLeft == true, out var tower))
ShowTowerIfThird(tower);
}
else if (C.TowerType == TowerType.RightWhenSecondCleave)
{
if (_towers.TryGetFirst(x => x.IsLeft == false, out var tower))
ShowTowerIfThird(tower);
}
else if (C.TowerType == TowerType.FirstSafe)
{
var isLeft = _firstAttack == AttackType.Dark;
if (_towers.TryGetFirst(x => x.IsLeft == isLeft, out var tower))
ShowTowerIfThird(tower);
}
else if (C.TowerType == TowerType.SecondSafe)
{
var isLeft = _firstAttack == AttackType.Light;
if (_towers.TryGetFirst(x => x.IsLeft == isLeft, out var tower))
ShowTowerIfThird(tower);
}
}
}
Expand Down Expand Up @@ -644,15 +622,13 @@ public override void OnActionEffectEvent(ActionEffectSet set)
if (set.Action is null) return;

if (set.Action.Value.RowId == 40320)
{
_state = _state switch
{
State.FirstTower => State.SecondTower,
State.SecondTower => State.ThirdTower,
State.ThirdTower => State.End,
_ => _state
};
}
}

public override void OnSettingsDraw()
Expand Down Expand Up @@ -687,7 +663,7 @@ public override void OnSettingsDraw()
for (var i = 0; i < _towers.Count; i++)
{
var tower = _towers[i];
ImGui.Text($"Tower {i + 1}: {tower.Position} {tower.Direction} {tower.IsLeft}");
ImGui.Text($"Tower {i + 1}: {tower.Position} {tower.Direction} {tower.RealAngle} {tower.IsLeft}");
}

ImGui.Text($"Angle Difference: {_towers[0].AngleDifference(_towers[1])}");
Expand All @@ -710,6 +686,32 @@ private float NormalizeAngle
}
}

public int RealAngle
{
get
{
var center = new Vector2(100, 100);
var angle = Math.Atan2(Position.Y - center.Y, Position.X - center.X) * 180 / Math.PI;
angle += 90;
if (angle < 0) angle += 360;
angle %= 360;
return (int)angle;
}
}

public int OppositeRealAngle
{
get
{
var center = new Vector2(100, 100);
var angle = Math.Atan2(center.Y - Position.Y, center.X - Position.X) * 180 / Math.PI;
angle += 90;
if (angle < 0) angle += 360;
angle %= 360;
return (int)angle;
}
}

public float AngleDifference(TowerData other)
{
var angle = NormalizeAngle;
Expand All @@ -729,8 +731,8 @@ public class Config : IEzConfig

public Vector4 PredictColor = EColor.RedBright;
public SecondBaitType SecondBaitType = SecondBaitType.GoToSafe;
public bool ShowAOE = true;
public bool ShowPredict = true;
public TowerType TowerType = TowerType.First;
public bool ShowAOE = true;
public TowerType TowerType = TowerType.First;
}
}

0 comments on commit a4f8e84

Please sign in to comment.