add 2d engine
add BaseModel.isHovered
build