
:-object wasp9c : [bcilib].

var url = './street/street5c.wrl'.
var count = 10000.
var engine_status := false.
var sleeptime = 200.
var speed = 0.8.

main :-
	text_area(Browser),
	set_output(Browser),
	format('Loading street1 from ~w~n', [url]),
	loadURL(url),
	format('Enter the bus and touch the box to start/stop the engine.~n'),
	format('You can drive the bus for ~w seconds~n', [timelimit]),
 	delay(3000),
 	drive(bus1,count).

drive(_,0):-!.	

drive(Object,N) :- N>0, N1 is N-1,
	I is N*sleeptime//1000,
	format('time left: ~w seconds.~n', [I]),
	delay(1000),
	getSFBool(Object,engine_on,Status),
	setEngineStatus(Status,EngineStatus),
	setEngineColor(Object,EngineStatus),
	drive_move(Object,EngineStatus),
	drive(Object,N1).


setEngineStatus(false,engine_status):-!.

setEngineStatus(true,true):-
		engine_status = false,
		!,
		format('the engine is on.~n'),
		engine_status := true.

setEngineStatus(true,false):-
		engine_status = true,
		!,
		format('the engine is off.~n'),
		engine_status := false.

setEngineColor(Object, true):-
		!,
		setSFColor(Object, engineColor, 0, 1, 0).

setEngineColor(Object, false):-
		!,
		setSFColor(Object, engineColor, 1, 0, 0).



drive_move(_Object, false):-!.

drive_move(Object, true):-
	getSFVec3f(proxSensor,position,X,Y,Z),
	getSFRotation(proxSensor,orientation,X2,Y2,Z2,R2),
	setPosition(Object,X, 0.0 ,Z),
	R3 is sign(Y2)*R2 + 1.571,
	setRotation(Object,0.0,1.0,0.0,R3),
	Xdif is speed * cos(R3),
	Zdif is speed * sin(R3),
	Xnew is X + Xdif,
	Znew is Z - Zdif,
	setViewpointPosition('Viewpoint',Xnew, Y, Znew),
	setViewpointOrientation('Viewpoint', X2,Y2,Z2,R2).




:-end_object wasp9c.

