public void Draw(XnaRenderer renderer) { Tile[] parts = _body.ToArray(); for (int i = 0; i < parts.Length; i++) { Texture texture; float angle = 0; Tile part = parts[i]; if (i == parts.Length - 1) { texture = _headAnimation.CurrentTexture; angle = Compass.GetAngle(MoveDirection); } else if (i == 0) { texture = _tailTexture; CardinalDirection directionOfLast = Compass.GetDirection(parts[i + 1].Position - parts[i].Position); angle = Compass.GetAngle(directionOfLast); } else { CardinalDirection directionOfNext = Compass.GetDirection(parts[i - 1].Position - parts[i].Position); CardinalDirection directionOfLast = Compass.GetDirection(parts[i + 1].Position - parts[i].Position); if (Compass.GetOppositeDirection(directionOfLast) == directionOfNext) { texture = _bodyNsTexture; if (directionOfNext == CardinalDirection.East || directionOfNext == CardinalDirection.West) { angle = MathHelper.PiOver2; } } else { texture = _bodyNeTexture; if (directionOfLast == CardinalDirection.North && directionOfNext == CardinalDirection.West) { angle = MathHelper.PiOver2 * 3; } if (directionOfLast == CardinalDirection.East && directionOfNext == CardinalDirection.South) { angle = MathHelper.PiOver2; } if (directionOfLast == CardinalDirection.South && directionOfNext == CardinalDirection.East) { angle = MathHelper.PiOver2; } if (directionOfLast == CardinalDirection.South && directionOfNext == CardinalDirection.West) { angle = MathHelper.Pi; } if (directionOfLast == CardinalDirection.West && directionOfNext == CardinalDirection.South) { angle = MathHelper.Pi; } if (directionOfLast == CardinalDirection.West && directionOfNext == CardinalDirection.North) { angle = MathHelper.PiOver2 * 3; } } } renderer.DrawSprite(texture, new Vector2(part.Position.X + 0.5f, part.Position.Y + 0.5f), new Vector2(1f, 1f), angle, Color.Green, 1f); } }