reimplementation of vec2?