:- object avatar : [bcilib].

var url = 'world.wrl'.
var name = 'humanoid'.

main :-
  %sleep(2500), % logoshow
  format('Loading avatar from ~w~n', [url]),
  loadURL(url),
  sleep(2000),
  
  new(belief, BeliefBase),
  BeliefBase <- new_attr(belief),
  BeliefBase <- new_attr(box),
  BeliefBase <- add_attr(box, position(5,0.5,0)),
  BeliefBase <- new_attr(cylinder),
  BeliefBase <- add_attr(cylinder, position(1,0.5,-4)),
  BeliefBase <- new_attr(sphere),
  BeliefBase <- add_attr(sphere, position(-4,0.5,4)),

     
  new(listener(script, queue, BeliefBase, cap_queue),_),
  new(perception(name, BeliefBase),_),
  new(capabilities(cap_queue, action_queue, BeliefBase),_),
  new(action(name, action_queue),_).
  
:- end_object avatar.

:- object listener : [jsilib].

var capabilities.

listener(Node, Queue, BeliefBase, CapQueue) :-
  capabilities := CapQueue, 
  get_window(Window),
  call(Window, display, ['ready.'], _),
  run(Node, Queue, BeliefBase).

run(Node, Queue, BeliefBase) :-
  repeat,
    get_queue(Node, Queue, Tag),
    read_args(Tag, Node, Queue, Term),
    format('Action is ~w~n',[Term]),
    proces_event(Term, BeliefBase),
  Term = quit,
  !.

read_args(walk, Node, Queue, Term) :-
  !,
  get_queue(Node, Queue, X),
  get_queue(Node, Queue, Z),
  Term =.. [walk, X, Z].

read_args(grab, Node, Queue, Term) :-
  !,
  get_queue(Node, Queue, Object),
  Term =.. [grab, Object].
  
read_args(beliefs, _,_, beliefs).
  
proces_event(walk(X,Z), BeliefBase) :-
  BeliefBase <- add_attr(belief, destination(X,Z)),
  set_queue(capabilities, walk).

proces_event(grab(Object), _) :-
  set_queue(capabilities, grab(Object)).

proces_event(beliefs, BeliefBase) :-
  BeliefBase <- show_attr(belief).

:- end_object listener.
