# waypoints var waypoint_list[]; var heading_list=[]; var speed_list=[]; # User Settings # var MaxSpeed = 9; # meters / second var Accel = 1; # meters / second^2 append(waypoint_list,0.0); append(heading_list,0.0); append(speed_list,5); append(waypoint_list,100.0); append(heading_list,0.0); append(speed_list,9); append(waypoint_list,200.0); append(heading_list,30.0); append(speed_list,9); append(waypoint_list,300.0); append(heading_list,30.0); append(speed_list,5); append(waypoint_list,400.0); append(heading_list,30.0); append(speed_list,0); append(waypoint_list,450.0); append(heading_list,30.0); append(speed_list,0); var init = func { # control variables var time = 0; var dt = 0; var speed = 0; var distance = 0; var heading = 0; var cosh = 1; var sinh = 0; var waypoint = 0; } var run = func { ## dt = this time - last time? var dX = 0; var dY = 0; var dd = speed * dt; var new_distance = distance + dd; if (new_distance > waypoint_list[waypoint]) { # move to waypoint var ddw = new_distance - waypoint_list[waypoint]; dX = ddw * cosh; dY = ddw * sineh; dd -= ddw; #toggle waypoint waypoint++; cosh = cos(heading_list[waypoint]); sinh = sin(heading_list[waypoint]); } # move dX += dd * cosh; dY += dd * sinh; # accelerate if ( speed < speed_list[waypoint] ) { speed += Accel; } if ( speed > speed_list[waypoint] ) { speed -= Accel; } # update the properties }