implement basic animation (not finish yet)