mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-22 22:45:39 +00:00
Lots of stuff
This commit is contained in:
205
GpApp/Triggers.cpp
Normal file
205
GpApp/Triggers.cpp
Normal file
@@ -0,0 +1,205 @@
|
||||
|
||||
//============================================================================
|
||||
//----------------------------------------------------------------------------
|
||||
// Triggers.c
|
||||
//----------------------------------------------------------------------------
|
||||
//============================================================================
|
||||
|
||||
|
||||
#include "Externs.h"
|
||||
|
||||
|
||||
#define kMaxTriggers 16
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
short object, room;
|
||||
short index, timer;
|
||||
short what;
|
||||
Boolean armed;
|
||||
} trigType, *trigPtr;
|
||||
|
||||
|
||||
short FindEmptyTriggerSlot (void);
|
||||
void FireTrigger (short);
|
||||
|
||||
|
||||
trigType triggers[kMaxTriggers];
|
||||
|
||||
|
||||
//============================================================== Functions
|
||||
//-------------------------------------------------------------- ArmTrigger
|
||||
|
||||
void ArmTrigger (hotPtr who)
|
||||
{
|
||||
short where, whoLinked;
|
||||
|
||||
if (who->stillOver)
|
||||
return;
|
||||
|
||||
where = FindEmptyTriggerSlot();
|
||||
|
||||
if (where != -1)
|
||||
{
|
||||
whoLinked = who->who; // what is trigger's obj. #
|
||||
triggers[where].room = masterObjects[whoLinked].roomLink;
|
||||
triggers[where].object = masterObjects[whoLinked].objectLink;
|
||||
triggers[where].index = whoLinked;
|
||||
triggers[where].timer = masterObjects[whoLinked].theObject.data.e.delay * 3;
|
||||
triggers[where].what = masterObjects[triggers[where].object].theObject.what;
|
||||
triggers[where].armed = true;
|
||||
}
|
||||
|
||||
who->stillOver = true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FindEmptyTriggerSlot
|
||||
|
||||
short FindEmptyTriggerSlot (void)
|
||||
{
|
||||
short where, i;
|
||||
|
||||
where = -1;
|
||||
|
||||
for (i = 0; i < kMaxTriggers; i++)
|
||||
{
|
||||
if (!triggers[i].armed)
|
||||
{
|
||||
where = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (where);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- HandleTriggers
|
||||
|
||||
void HandleTriggers (void)
|
||||
{
|
||||
short i;
|
||||
|
||||
for (i = 0; i < kMaxTriggers; i++)
|
||||
{
|
||||
if (triggers[i].armed)
|
||||
{
|
||||
triggers[i].timer--;
|
||||
if (triggers[i].timer <= 0)
|
||||
{
|
||||
triggers[i].timer = 0;
|
||||
triggers[i].armed = false;
|
||||
FireTrigger(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FireTrigger
|
||||
|
||||
void FireTrigger (short index)
|
||||
{
|
||||
short triggerIs, triggeredIs;
|
||||
char wasState;
|
||||
|
||||
triggerIs = triggers[index].index;
|
||||
|
||||
if (masterObjects[triggerIs].localLink != -1)
|
||||
{
|
||||
triggeredIs = masterObjects[triggerIs].localLink;
|
||||
switch (masterObjects[triggeredIs].theObject.what)
|
||||
{
|
||||
case kGreaseRt:
|
||||
case kGreaseLf:
|
||||
if (SetObjectState(triggers[index].room, triggers[index].object,
|
||||
kForceOn, triggeredIs))
|
||||
{
|
||||
SpillGrease(masterObjects[triggeredIs].dynaNum,
|
||||
masterObjects[triggeredIs].hotNum);
|
||||
}
|
||||
break;
|
||||
|
||||
case kLightSwitch:
|
||||
case kMachineSwitch:
|
||||
case kThermostat:
|
||||
case kPowerSwitch:
|
||||
case kKnifeSwitch:
|
||||
case kInvisSwitch:
|
||||
TriggerSwitch(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kSoundTrigger:
|
||||
PlayPrioritySound(kChordSound, kChordPriority); // Change me
|
||||
break;
|
||||
|
||||
case kToaster:
|
||||
TriggerToast(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kGuitar:
|
||||
PlayPrioritySound(kChordSound, kChordPriority);
|
||||
break;
|
||||
|
||||
case kCoffee:
|
||||
PlayPrioritySound(kCoffeeSound, kCoffeePriority);
|
||||
break;
|
||||
|
||||
case kOutlet:
|
||||
TriggerOutlet(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kBalloon:
|
||||
TriggerBalloon(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kCopterLf:
|
||||
case kCopterRt:
|
||||
TriggerCopter(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kDartLf:
|
||||
case kDartRt:
|
||||
TriggerDart(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kDrip:
|
||||
TriggerDrip(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
|
||||
case kFish:
|
||||
TriggerFish(masterObjects[triggeredIs].dynaNum);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wasState = HGetState((Handle)thisHouse);
|
||||
HLock((Handle)thisHouse);
|
||||
triggeredIs = masterObjects[triggerIs].localLink;
|
||||
switch ((*thisHouse)->rooms[triggers[index].room].
|
||||
objects[triggers[index].object].what)
|
||||
{
|
||||
case kGreaseRt:
|
||||
case kGreaseLf:
|
||||
if (SetObjectState(triggers[index].room, triggers[index].object,
|
||||
kForceOn, triggeredIs))
|
||||
{
|
||||
SpillGrease(masterObjects[triggeredIs].dynaNum,
|
||||
masterObjects[triggeredIs].hotNum);
|
||||
}
|
||||
break;
|
||||
}
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- ZeroTriggers
|
||||
|
||||
void ZeroTriggers (void)
|
||||
{
|
||||
short i;
|
||||
|
||||
for (i = 0; i < kMaxTriggers; i++)
|
||||
triggers[i].armed = false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user