add hacky implementation of C1 speech/thought bubbles, unfinished
[openc2e.git] / CallButton.cpp
blobfcf8332ee7cbe719ed825a53dec23761e0b6df35
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 // TODO: hrm..
62 if (ourlift->currentbutton == buttonid && (ourlift->liftAvailable() || ourlift->liftBottom() == ourlift->callbuttony[buttonid])) {
63 return false; // nuh-uh
67 return Agent::fireScript(event, from, one, two);
70 /* vim: set noet: */