5 * Created by Alyssa Milburn on Sat Dec 2 2006.
6 * Copyright (c) 2006 Alyssa Milburn. All rights reserved.
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
20 #include "CallButton.h"
22 // TODO: this code is a first attempt and is probably completely wrong
24 void CallButton::tick() {
28 Lift
*ourlift
= dynamic_cast<Lift
*>(lift
.get());
31 if (actv
.getInt() == 1) {
33 if (ourlift
->currentbutton
== buttonid
&& ourlift
->liftBottom() == ourlift
->callbuttony
[buttonid
]) { // has arrived at us
34 queueScript(0); // deactivate ourselves
37 if (ourlift
->liftAvailable()) { // not moving
38 if (ourlift
->currentbutton
!= buttonid
) {
40 * all active call buttons need to fight it out to work out who gets to be
41 * 'newbutton' on the lift (which should be the closest button)
43 int buttondist
= abs((int)(ourlift
->currentbutton
- buttonid
));
44 int currbuttondist
= abs((int)(ourlift
->currentbutton
- ourlift
->newbutton
));
46 // if there's no change to newbutton yet, or if we're 'nearer' than the last newbutton..
47 if (currbuttondist
== 0 || currbuttondist
> buttondist
)
48 // .. then set newbutton to point to us instead
49 ourlift
->newbutton
= buttonid
;
55 bool CallButton::fireScript(unsigned short event
, Agent
*from
, caosVar one
, caosVar two
) {
56 Lift
*ourlift
= dynamic_cast<Lift
*>(lift
.get());
61 if (ourlift
->currentbutton
== buttonid
&& ourlift
->liftAvailable()) {
62 return false; // nuh-uh
66 return Agent::fireScript(event
, from
, one
, two
);