Lift/CallButton: some dumb fixes
[openc2e.git] / CallButton.cpp
blob9e206c8b3c5fc4610e66a1cc5858ced0891fd1a6
1 /*
2 * CallButton.cpp
3 * openc2e
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() {
25 SimpleAgent::tick();
26 if (paused) return;
28 Lift *ourlift = dynamic_cast<Lift *>(lift.get());
29 assert(ourlift);
31 if (actv.getInt() == 1) {
32 // TODO: hrm..
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());
57 assert(ourlift);
59 switch (event) {
60 case 1:
61 if (ourlift->currentbutton == buttonid && ourlift->liftAvailable()) {
62 return false; // nuh-uh
66 return Agent::fireScript(event, from, one, two);
69 /* vim: set noet: */