Example #1
0
            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);
                    }
                }
                ;
            }
Example #2
0
 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);
 }
Example #3
0
 public void Linear(ref Float2 a, ref Float2 b, float alpha, out Float2 result)
 {
     Float2.Lerp(ref a, ref b, alpha, out result);
 }