test
This commit is contained in:
parent
aee3a7f22c
commit
152c74fa15
5 changed files with 122 additions and 26 deletions
|
|
@ -32,6 +32,11 @@ public class CombatManager
|
|||
private long _lastOrbitMs;
|
||||
private int _nextOrbitMs = OrbitStepMinMs;
|
||||
|
||||
// Chase — walks toward a screen position instead of orbiting
|
||||
private volatile int _chaseX = -1;
|
||||
private volatile int _chaseY = -1;
|
||||
private readonly HashSet<int> _chaseKeys = new();
|
||||
|
||||
// Smoothed mouse position — lerps toward target to avoid jitter
|
||||
private double _smoothX = 1280;
|
||||
private double _smoothY = 720;
|
||||
|
|
@ -39,6 +44,18 @@ public class CombatManager
|
|||
|
||||
public bool IsHolding => _holding;
|
||||
|
||||
public void SetChaseTarget(int screenX, int screenY)
|
||||
{
|
||||
_chaseX = screenX;
|
||||
_chaseY = screenY;
|
||||
}
|
||||
|
||||
public void ClearChaseTarget()
|
||||
{
|
||||
_chaseX = -1;
|
||||
_chaseY = -1;
|
||||
}
|
||||
|
||||
public CombatManager(IGameController game, HudReader hudReader, FlaskManager flasks)
|
||||
{
|
||||
_game = game;
|
||||
|
|
@ -52,7 +69,16 @@ public class CombatManager
|
|||
public async Task Tick(int x, int y, int jitter = 30)
|
||||
{
|
||||
await _flasks.Tick();
|
||||
await UpdateOrbit();
|
||||
|
||||
if (_chaseX >= 0)
|
||||
{
|
||||
await UpdateChase();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_chaseKeys.Count > 0) await ReleaseChaseKeys();
|
||||
await UpdateOrbit();
|
||||
}
|
||||
|
||||
// Lerp smoothed position toward target
|
||||
_smoothX += (x - _smoothX) * SmoothFactor;
|
||||
|
|
@ -106,6 +132,55 @@ public class CombatManager
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Walk toward chase target using held WASD keys. Replaces orbit when active.
|
||||
/// </summary>
|
||||
private async Task UpdateChase()
|
||||
{
|
||||
// Release orbit key when entering chase mode
|
||||
if (_orbitIndex >= 0)
|
||||
{
|
||||
await _game.KeyUp(OrbitKeys[_orbitIndex]);
|
||||
_orbitIndex = -1;
|
||||
}
|
||||
|
||||
const int screenCx = 1280, screenCy = 720;
|
||||
var cx = _chaseX;
|
||||
var cy = _chaseY;
|
||||
var dx = cx - screenCx;
|
||||
var dy = cy - screenCy;
|
||||
var dist = Math.Sqrt(dx * dx + dy * dy);
|
||||
|
||||
var wanted = new HashSet<int>();
|
||||
if (dist > 100)
|
||||
{
|
||||
var dirX = dx / dist;
|
||||
var dirY = dy / dist;
|
||||
if (dirY < -0.3) wanted.Add(InputSender.VK.W);
|
||||
if (dirY > 0.3) wanted.Add(InputSender.VK.S);
|
||||
if (dirX < -0.3) wanted.Add(InputSender.VK.A);
|
||||
if (dirX > 0.3) wanted.Add(InputSender.VK.D);
|
||||
}
|
||||
|
||||
foreach (var k in _chaseKeys.Except(wanted).ToList())
|
||||
{
|
||||
await _game.KeyUp(k);
|
||||
_chaseKeys.Remove(k);
|
||||
}
|
||||
foreach (var k in wanted.Except(_chaseKeys).ToList())
|
||||
{
|
||||
await _game.KeyDown(k);
|
||||
_chaseKeys.Add(k);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReleaseChaseKeys()
|
||||
{
|
||||
foreach (var k in _chaseKeys)
|
||||
await _game.KeyUp(k);
|
||||
_chaseKeys.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cycle WASD directions to orbit in a small circle while attacking.
|
||||
/// </summary>
|
||||
|
|
@ -150,6 +225,9 @@ public class CombatManager
|
|||
_smoothX = 1280;
|
||||
_smoothY = 720;
|
||||
await ReleaseOrbit();
|
||||
await ReleaseChaseKeys();
|
||||
_chaseX = -1;
|
||||
_chaseY = -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -164,5 +242,8 @@ public class CombatManager
|
|||
_holding = false;
|
||||
}
|
||||
await ReleaseOrbit();
|
||||
await ReleaseChaseKeys();
|
||||
_chaseX = -1;
|
||||
_chaseY = -1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue