As I delve into the internals of the code, one thing that I wonder about is why Cocos2D adopted CGPoint/CGSize/CGRect.
As everyone(?) knows, working with CGPoint/CGSize can be a hassle because you pretty much have to duplicate all helper functions, as it makes sense to allow both.
For example, we might write a CGPointAdd(CGPoint, CGPoint). But then we also want CGPointAddSize(CGPoint, CGSize) and of course CGSizeAddPoint(CGSize, CGPoint)
Most game engines simply use a "Vector2D" to express a point and then there is also usually a "Rect" but the whole separate "size" is missing. Which feels fairly sane.
But maybe I'm missing some hidden brilliance in using a separate (but data-wise identical) "size"?