19
23
25
26get_sensing_objects(Objects, S0):-
27 setof(O,member(perceptq(O,_),S0),Objects).
28
29get_sensing_objects(Sense, Agents, S0):-
30 get_objects((has_sense(Sense);inherit(memorize,t)), Agents, S0).
31
32get_live_agents(LiveAgents, S0):-
33 get_some_agents( \+ state(_Spatial, powered, f), LiveAgents, S0).
34
35get_some_agents(Precond, LiveAgents, S0):-
36 dmust((
37 get_objects(
38 (inherit(character,t),Precond), LiveAgents, S0),
39 LiveAgents = [_|_])).
40
41
42
43is_prop_public(_,P) :-
44 \+ \+
45 member(P, [
46 name(_),
47 desc(_),
48 fragile(_),emitting(_Light),
49 50
51 can_be(Spatial, eat, _),
52 can_be(Spatial, move, _),
53 can_be(Spatial, open, _), state(Spatial, open, _),
54 can_be(Spatial, lock, t), state(Spatial, locked, _),
55 inherit(shiny,t)]).
56is_prop_public(_,Prop):- is_prop_nonpublic(Prop),!,fail.
57
58is_prop_public(_,_):-!.
59
60
61is_prop_nonpublic(has_sense(_)).
62is_prop_nonpublic(_):- !, fail.
63
64has_sensory(Spatial, Sense, Agent, State) :-
65 sensory_model_problem_solution(Sense, Spatial, TooDark, EmittingLight),
66 get_open_traverse(_Open, Sense, _Traverse, Spatial, OpenTraverse),
67 related(Spatial, OpenTraverse, Agent, Here, State),
68 getprop(Here, TooDark, State) ,
69 \+ related_with_prop(Spatial, OpenTraverse, _Obj, Here, EmittingLight, State), !, fail.
70has_sensory(_Spatial, _Sense, _Agent, _State) .
71
72
73can_sense(_Spatial, _See, Star, _Agent, _State) :- Star == '*', !.
74can_sense(Spatial, Sense, Thing, Agent, State) :-
75 get_open_traverse(_Open, Sense, _Traverse, Spatial, OpenTraverse),
76 has_sensory(Spatial, Sense, Agent, State),
77 related(Spatial, OpenTraverse, Agent, Here, State),
78 (Thing=Here; related(Spatial, OpenTraverse, Thing, Here, State)).
79can_sense(Spatial, Sense, Thing, Agent, _State):- dbug(pretending_can_sense(Spatial, Sense, Thing, Agent)),!.
80
81
84:- nop(ensure_loaded('adv_events')). 86
88queue_percept(Agent, Event, S0, S2) :-
89 dmust((select(perceptq(Agent, Queue), S0, S1),
90 append(Queue, [Event], NewQueue),
91 append([perceptq(Agent, NewQueue)], S1, S2))).
92
93queue_event(Event, S0, S2) :-
94 each_sensing_agent(_All, queue_percept(Event), S0, S2).
95
96
98queue_local_percept(Agent, Spatial, Event, Places, S0, S1) :-
99 ignore(current_spatial(Spatial)),
100 member(Where, Places),
101 get_open_traverse(look, Spatial, OpenTraverse),
102 related(Spatial, OpenTraverse, Agent, Where, S0),
103 queue_percept(Agent, Event, S0, S1),!.
104queue_local_percept(_Agent, _Spatial, _Event, _Places, S0, S0).
105
112
113queue_local_event(Spatial, Event, Places, S0, S2) :-
114 each_sensing_agent(_All, queue_local_percept(Spatial, Event, Places), S0, S2).
115
116
117
126
127
128current_spatial(spatial).
129
130
131is_sense(X):- sensory_model(X, _).
132
133sensory_model(see, spatial).
134sensory_model(hear, spatial).
135sensory_model(taste, spatial).
136sensory_model(smell, spatial).
137sensory_model(feel, spatial).
138
139action_model(_, spatial).
140
141sensory_verb(see, look).
142sensory_verb(hear, listen).
143sensory_verb(taste, taste).
144sensory_verb(smell, smell).
145sensory_verb(feel, touch).
146
147
148action_sensory(Action, Sense):-
149 compound(Action),
150 Action=..[_Verb, Sensory|_],
151 is_sense(Sensory), !,
152 Sense=Sensory.
153action_sensory(Action, Sense):-
154 compound(Action),
155 Action=..[Verb|_],
156 verb_sensory(Verb, Sense).
157action_sensory(Action, Sense):- verb_sensory(Action, Sense) *-> true; Sense=see.
158
159
160 161
163verb_sensory(goto, Sense):- is_sense(Sense).
164verb_sensory(examine, Sense):- is_sense(Sense).
165verb_sensory(wait, Sense):- is_sense(Sense).
166verb_sensory(print_, Sense):- is_sense(Sense).
167verb_sensory(Verb, Sense):- sensory_verb(Sense, Verb).
168verb_sensory(look, see).
169verb_sensory(say, hear).
170verb_sensory(eat, taste).
171verb_sensory(feel, touch).
172verb_sensory(goto, see).
173verb_sensory(Verb, Sense):- nonvar(Verb), is_sense(Verb), Sense=Verb.
174verb_sensory(Verb, Sense):- subsetof(Verb, Verb2), Verb\=Verb2,
175 verb_sensory(Verb2, Sense), \+ is_sense(Verb).
176verb_sensory(Verb, Sense):- verb_alias(Verb, Verb2), Verb\=Verb2,
177 verb_sensory(Verb2, Sense), \+ is_sense(Verb).
178
179
180
182sensory_model_problem_solution(Sense, Spatial, state(Spatial, Dark, t), emitting(Light)):-
183 problem_solution(Dark, Sense, Light), sensory_model(Sense, Spatial).
184
185problem_solution(dark, see, light).
186problem_solution(stinky, smell, pure).
187problem_solution(noisy, hear, quiet).
188
189
190
193:- nop(ensure_loaded('adv_agent_percepts')). 195
196
198process_percept_auto(Agent, [Same|_], _Stamp, Mem0, Mem0) :- was_own_self(Agent, Same).
199process_percept_auto(Agent, emoted(_Spatial, _Say, Speaker, Agent, Words), _Stamp, Mem0, Mem1) :-
200 consider_text(Speaker, Agent, Words, Mem0, Mem1).
201process_percept_auto(Agent, emoted(_Spatial, _Say, Speaker, (*), WordsIn), _Stamp, Mem0, Mem1) :-
202 addressing_whom(WordsIn, Whom, Words),
203 Whom == Agent,
204 consider_text(Speaker, Agent, Words, Mem0, Mem1).
205process_percept_auto(Agent, Percept, _Stamp, Mem0, Mem0) :-
206 Percept =.. [Functor|_],
207 member(Functor, [talk, say]),
208 bugout('~w: Ignoring ~p~n', [Agent, Percept], autonomous).
209process_percept_auto(Agent, sense_props(see, Object, PropList), _Stamp, Mem0, Mem2) :-
210 bugout('~w: ~p~n', [Agent, sense_props(see, Object, PropList)], autonomous),
211 (member(shiny, PropList),member(inherit(shiny,t), PropList)),
212 member(model(Spatial, ModelData), Mem0),
213 \+ related(Spatial, descended, Object, Agent, ModelData), 214 add_todo_all([take(Spatial, Object), print_('My shiny precious!')], Mem0, Mem2).
215
216process_percept_auto(_Agent,
217 sense(Sense, [you_are(Spatial, _How, _Here), exits_are(_Exits), here_are(Objects)]),
218 _Stamp, Mem0, Mem2) :-
219 member(model(Spatial, ModelData), Mem0),
220 findall(examine(Sense, Obj),
221 ( member(Obj, Objects),
222 \+ member(props(Obj, _, _), ModelData)),
223 ExamineNewObjects),
224 add_todo_all(ExamineNewObjects, Mem0, Mem2).
225process_percept_auto(_Agent, _Percept, _Stamp, Mem0, Mem0).
226
227
229was_own_self(Agent, emote(_Spatial, _, Agent, _, _)):- fail.
230
233process_percept_player(Agent, Percept, _Stamp, Mem0, Mem0) :-
234 percept2txt(Agent, Percept, Text),
235 player_format('~N~w~n', [Text]),!,
236 redraw_prompt(Agent).
237process_percept_player(Agent, Percept, _Stamp, Mem0, Mem0) :-
238 player_format('~N~q~n', [Agent:Percept]),
239 dmust(redraw_prompt(Agent)),!.
240
242is_player(Agent):- \+ is_non_player(Agent).
243is_non_player(Agent):- Agent == 'floyd~1'.
244
245
246process_percept(Agent, Percept, Stamp, Mem0, Mem1) :-
247 once(is_player(Agent)),
248 once(notrace(process_percept_player(Agent, Percept, Stamp, Mem0, Mem1))),
249 \+ thought(inherit(autonomous,t), Mem1),!.
250
251process_percept(Agent, [LogicalPercept|_IgnoredList], Stamp, Mem0, Mem1) :-
252 thought(inherit(autonomous,t), Mem0),
253 nop((ignore(((IgnoredList\==[], dbug(ignored_process_percept_auto(Agent,IgnoredList))))))),
254 process_percept_auto(Agent, LogicalPercept, Stamp, Mem0, Mem1).
255
256process_percept(Agent, Percept, Stamp, Mem0, Mem0):-
257 bugout('~q FAILED!~n', [process_percept(Agent, Percept, Stamp)], general), !.
258
259process_percept_main(Agent, Percept, Stamp, Mem0, Mem3) :-
260 dmust((
261 forget(model(Spatial, Model0), Mem0, Mem1),
262 Percept = [LogicalPercept|IgnoredList],
263 nop(ignore(((IgnoredList\==[], dbug(ignored_model_update(Agent,IgnoredList)))))),
264 update_model(Spatial, Agent, LogicalPercept, Stamp, Mem1, Model0, Model1),
265 memorize(model(Spatial, Model1), Mem1, Mem2),
266 process_percept(Agent, Percept, Stamp, Mem2, Mem3))).
267process_percept_main(_Agent, Percept, _Stamp, Mem0, Mem0) :-
268 bugout('process_percept_main(~w) FAILED!~n', [Percept], general), !.
269
270
271
272process_percept_list(_Agent, [], _Stamp, Mem0, Mem0).
274process_percept_list(_Agent, _, _Stamp, Mem, Mem) :-
275 thought(inherit(no_perceptq), Mem),
276 !.
277process_percept_list(Agent, [Percept|Tail], Stamp, Mem0, Mem4) :-
278 279 280 process_percept_main(Agent, Percept, Stamp, Mem0, Mem1),
281 process_percept_list(Agent, Tail, Stamp, Mem1, Mem4).
282process_percept_list(Agent, List, Stamp, Mem0, Mem0) :-
283 bugout('process_percept_list FAILED!~n'(Agent, List, Stamp), general)