public bool Move(float frameDeltaTime)
{
if (_travelNodes == null)
{
return false;
}
if (_remainingMoves > 0)
{
_adjacentSystem = null; //Left the system
float amountToMove = frameDeltaTime * _maxSpeed * Galaxy.PARSEC_SIZE_IN_PIXELS;
if (amountToMove > _remainingMoves)
{
amountToMove = _remainingMoves;
}
_remainingMoves -= amountToMove;
float xMov = (float)(Math.Cos(_travelNodes[0].Angle * (Math.PI / 180)) * amountToMove);
float yMov = (float)(Math.Sin(_travelNodes[0].Angle * (Math.PI / 180)) * amountToMove);
bool isLeftOfNode = _galaxyX <= _travelNodes[0].StarSystem.X;
bool isTopOfNode = _galaxyY <= _travelNodes[0].StarSystem.Y;
_galaxyX += xMov;
_galaxyY += yMov;
if ((_galaxyX > _travelNodes[0].StarSystem.X && isLeftOfNode) ||
(_galaxyX <= _travelNodes[0].StarSystem.X && !isLeftOfNode) ||
(_galaxyY > _travelNodes[0].StarSystem.Y && isTopOfNode) ||
(_galaxyY <= _travelNodes[0].StarSystem.Y && !isTopOfNode))
{
//TODO: Carry over excess movement to next node
//It has arrived at destination
_galaxyX = _travelNodes[0].StarSystem.X;
_galaxyY = _travelNodes[0].StarSystem.Y;
_adjacentSystem = _travelNodes[0].StarSystem;
_travelNodes.RemoveAt(0);
if (_travelNodes.Count == 0)
{
_travelNodes = null;
_remainingMoves = 0;
}
}
else
{
float x = _travelNodes[0].StarSystem.X - _galaxyX;
float y = _travelNodes[0].StarSystem.Y - _galaxyY;
_travelNodes[0].Length = (float)Math.Sqrt((x * x) + (y * y));
_travelNodes[0].Angle = (float)(Math.Atan2(y, x) * (180 / Math.PI));
}
}
return _remainingMoves > 0;
}