class PhysicsObject{ float radius,mass,friction; float x,y,z; float fx,fy,fz; float vx,vy,vz; PhysicsObject next; void simulate(){ } void ballInteraction(PhysicsObject po){ } void surfaceInteraction(PhysicsObject po){ } void clothInteraction(PhysicsObject po){ } void gravityInteraction(PhysicsObject po){ } void frictionInteraction(PhysicsObject po){ } void update(){ } void visualize(){ } void add(PhysicsObject po){ if(next==null){ next = po; } else { next.add(po); } } } //################################################## //################################################## class Surface extends PhysicsObject{ Surface(float iy){ y = iy; friction = 0.8; } //------------------------------------------------ void simulate(){ PhysicsObject obj = objects; while(obj!=null){ if(obj!=this) obj.surfaceInteraction(this); obj = obj.next; } if(next!=null) next.simulate(); } } //################################################## class Gravity extends PhysicsObject{ float force; Gravity(float igrav){ force = igrav; } //------------------------------------------------ void simulate(){ PhysicsObject obj = objects; while(obj!=null){ if(obj!=this) obj.gravityInteraction(this); obj = obj.next; } if(next!=null) next.simulate(); } } //################################################## class Friction extends PhysicsObject{ Friction(float ifriction){ friction = ifriction; } //------------------------------------------------ void simulate(){ PhysicsObject obj = objects; while(obj!=null){ if(obj!=this) obj.frictionInteraction(this); obj = obj.next; } if(next!=null) next.simulate(); } } //##################################################