
:-object wasp4v : [bcilib,vectorlib].

var url = './soccer/soccer2b.wrl'.

var timelimit = 500.


main :-
	text_area(Browser),
	set_output(Browser),

	format('Load the game ...~n'),
	loadURL(url),

	format('the game will start in 5 seconds,~n'),
	format('note that the total playing time period is ~w seconds,~n', [timelimit]),
	delay(5000),
	format('the game startup,~n'),
	play_ball(me, ball).


play_ball(Agent, Ball) :-
	-- timelimit,
	timelimit > 0, !,
	format('time left: ~w seconds~n', [timelimit]),
	delay(800),
	look_at_ball(goalKeeper1,Ball),
	near_ball_then_kick(Agent, Ball),
	play_ball(Agent, Ball).

play_ball(_, _).


near_ball_then_kick(Agent, Ball):-
	getViewpointPositionEx(Agent,X,_Y,Z),
	getPosition(Ball,X1,Y1,Z1),
	Xdif is X1-X,
	Zdif is Z1-Z,
	Dist is sqrt(Xdif*Xdif + Zdif*Zdif),
	Dist < 5, !,
	X2 is Xdif*3,
	Z2 is Zdif*3,
	X3 is X2 + X1,
	Z3 is Z2 + Z1,
	setPosition(Ball,X3,Y1,Z3),
	checkBallPosition(Ball,X3,Y1,Z3).

near_ball_then_kick(_, _).



checkBallPosition(Ball, X, Y, Z):-
	getPosition(goalKeeper1,X1,_Y1,Z1),
	Xdif is X-X1,
	Zdif is Z-Z1,
	Dist is sqrt(Xdif*Xdif + Zdif*Zdif),
	Dist < 4, !,
	X2 is X - 8,
	format('The goalkeeper kicks the ball back~n'),
	setPosition(Ball,X2,Y,Z).

checkBallPosition(_,_,_,_).
	
look_at_ball(Sportman,Ball):-
	getPosition(Sportman,X,_Y,Z),
	getPosition(Ball, X1,_Y1,Z1),
	direction_vector(position(X,0,Z), position(X1,0,Z1), vector(X2,Y2,Z2)),
	look_in_direction(Sportman,vector(0,0,1),vector(X2,Y2,Z2)). 

look_in_direction(Object, InitVector,DesVector):-
	vector_cross_product(InitVector,DesVector,vector(X,Y,Z),R),
	setRotation(Object,X,Y,Z,R).



getViewpointPositionEx(_,X,Y,Z) :- getSFVec3f(proxSensor,position,X,Y,Z).
getViewpointOrientationEx(_,X,Y,Z,R):- getSFRotation(proxSensor,orientation,X,Y,Z,R).


:-end_object wasp4v.

