1 /// Some default stacks.
\r
3 .entity verbs_attack;
\r
6 /// This global gets set to the verb in question each time the stack manager calls verb_call
\r
9 /// Execure this verb
\r
11 /// Return the value of this verb. Return VS_CALL_REMOVE to delete it.
\r
13 /// This verb is beeing removed NOW (not sent when verb_call returns VS_CALL_REMOVE)
\r
14 #define VCM_REMOVE 2
\r
17 .float(float message) verb_call;
\r
19 /// Points to this verb's stack.
\r
22 /// Static value of this verb
\r
23 .float verb_static_value;
\r
25 /// verb_call returns this when a verb in not doable
\r
26 #define VS_CALL_NO 0
\r
27 /// verb_call(VCM_DO) returns this when a verb is executing
\r
28 #define VS_CALL_YES_DOING -1
\r
29 /// verb_call(VCM_DO) returns this when a verb did execure and is done
\r
30 #define VS_CALL_YES_DONE -2
\r
31 /// verb_call(VCM_DO) returns this when a verb should be deleted by the stack manager
\r
32 #define VS_CALL_REMOVE -3
\r
35 Push a new verb onto the specified stack. Set vrb_life to make it time-limited.
\r
37 entity verbstack_push(entity stack, float(float eval) vrb_call, float val_static, float vrb_life,entity verb_owner)
\r
48 vrb.owner = verb_owner;
\r
49 vrb.verbstack = stack;
\r
50 vrb.verb_call = vrb_call;
\r
51 vrb.verb_static_value = val_static;
\r
55 vrb.think = SUB_Remove;
\r
56 vrb.nextthink = time + vrb_life;
\r
63 Find the best verb in this stack and execurte it.
\r
64 ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL or VCM_DO
\r
66 float verbstack_pop(entity stack)
\r
68 entity vrb, bestverb, oldself;
\r
69 float value, bestvalue;
\r
73 vrb = findchainentity(verbstack,stack);
\r
79 value = verb.verb_call(VCM_EVAL);
\r
83 if(value == VS_CALL_REMOVE)
\r
88 if(value > bestvalue)
\r
100 value = verb.verb_call(VCM_DO);
\r
102 if(value == VS_CALL_REMOVE)
\r
111 float verbstack_popfifo(entity stack)
\r
117 verb = findentity(stack,verbstack,stack);
\r
123 ret = verb.verb_call(VCM_DO);
\r
125 if(ret == VS_CALL_REMOVE)
\r
134 Find the best verb in this stack and return it.
\r
135 ALso remove any verbs returning VS_CALL_REMOVE on VCM_EVAL.
\r
137 entity verbstack_pull(entity stack)
\r
140 entity bestverb, oldself;
\r
141 float value, bestvalue;
\r
145 vrb = findchainentity(verbstack,stack);
\r
152 value = verb.verb_call(VCM_EVAL);
\r
156 if(value == VS_CALL_REMOVE)
\r
161 if(value > bestvalue)
\r
174 entity verbstack_pullfifo(entity stack)
\r
176 return findentity(stack,verbstack,stack);
\r
180 Delete every verb on this stack, signaling them with VCM_REMOVE first.
\r
182 void verbstack_flush(entity stack)
\r
184 entity vrb, oldself;
\r
188 vrb = findchainentity(verbstack,stack);
\r
195 verb.verb_call(VCM_REMOVE);
\r