Structure improvement and new features

Wave improvement
OO improvements with the use of abstraction
Lighting added