public void Update(float dt) { var movementRemains = _unit.Speed * dt; while (movementRemains > 0) { if (_position == _nextPosition || _progress >= 1) { _position = _nextPosition; _nextPosition = CellTowards(_position, _destination); if (_nextPosition != _position) { _grid[_unit] = _nextPosition; _progress = 0; } else // if we haven't reached destination, it's unreachable { _destination = _position; break; } } if (_progress < 1) { var drain = Math.Min(movementRemains, 1 - _progress); _progress += drain; movementRemains -= drain; _unit.Position = Float2.Lerp(new Float2(_position), new Float2(_nextPosition), _progress); } } ; }
public void Bezier(ref Float2 p0, ref Float2 p1, ref Float2 p2, ref Float2 p3, float alpha, out Float2 result) { Float2.Lerp(ref p0, ref p1, alpha, out var p01); Float2.Lerp(ref p1, ref p2, alpha, out var p12); Float2.Lerp(ref p2, ref p3, alpha, out var p23); Float2.Lerp(ref p01, ref p12, alpha, out var p012); Float2.Lerp(ref p12, ref p23, alpha, out var p123); Float2.Lerp(ref p012, ref p123, alpha, out result); }
public void Linear(ref Float2 a, ref Float2 b, float alpha, out Float2 result) { Float2.Lerp(ref a, ref b, alpha, out result); }