mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2024-11-29 07:49:46 +00:00
1 line
8.8 KiB
C
1 line
8.8 KiB
C
|
//============================================================================
//----------------------------------------------------------------------------
// Input.c
//----------------------------------------------------------------------------
//============================================================================
#include <ToolUtils.h>
#include "Externs.h"
#include "MainWindow.h"
#include "RectUtils.h"
#define kNormalThrust 5
#define kHyperThrust 8
#define kHeliumLift 4
#define kEscPausePictID 1015
#define kTabPausePictID 1016
#define kSavingGameDial 1042
void LogDemoKey (char);
void DoCommandKey (void);
void DoPause (void);
void DoBatteryEngaged (gliderPtr);
void DoHeliumEngaged (gliderPtr);
Boolean QuerySaveGame (void);
demoPtr demoData;
KeyMap theKeys;
DialogPtr saveDial;
short demoIndex, batteryFrame;
Boolean isEscPauseKey, paused, batteryWasEngaged;
extern long gameFrame;
extern short otherPlayerEscaped;
extern Boolean quitting, playing, onePlayerLeft, twoPlayerGame, demoGoing;
//============================================================== Functions
//-------------------------------------------------------------- LogDemoKey
void LogDemoKey (char keyIs)
{
demoData[demoIndex].frame = gameFrame;
demoData[demoIndex].key = keyIs;
demoIndex++;
}
//-------------------------------------------------------------- DoCommandKey
void DoCommandKey (void)
{
if (BitTst(&theKeys, kQKeyMap))
{
playing = false;
paused = false;
if ((!twoPlayerGame) && (!demoGoing))
{
if (QuerySaveGame())
SaveGame2(); // New save game.
}
}
else if ((BitTst(&theKeys, kSKeyMap)) && (!twoPlayerGame))
{
RefreshScoreboard(kSavingTitleMode);
SaveGame2(); // New save game.
HideCursor();
CopyRectWorkToMain(&workSrcRect);
RefreshScoreboard(kNormalTitleMode);
}
}
//-------------------------------------------------------------- DoPause
void DoPause (void)
{
Rect bounds;
SetPort((GrafPtr)mainWindow);
QSetRect(&bounds, 0, 0, 214, 54);
CenterRectInRect(&bounds, &houseRect);
if (isEscPauseKey)
LoadScaledGraphic(kEscPausePictID, &bounds);
else
LoadScaledGraphic(kTabPausePictID, &bounds);
do
{
GetKeys(theKeys);
}
while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) ||
(!isEscPauseKey && BitTst(&theKeys, kTabKeyMap)));
paused = true;
while (paused)
{
GetKeys(theKeys);
if ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) ||
(!isEscPauseKey && BitTst(&theKeys, kTabKeyMap)))
paused = false;
else if (BitTst(&theKeys, kCommandKeyMap))
DoCommandKey();
}
CopyBits((BitMap *)*GetGWorldPixMap(workSrcMap),
GetPortBitMapForCopyBits(GetWindowPort(mainWindow)),
&bounds, &bounds, srcCopy, nil);
do
{
GetKeys(theKeys);
}
while ((isEscPauseKey && BitTst(&theKeys, kEscKeyMap)) ||
(!isEscPauseKey && BitTst(&theKeys, kTabKeyMap)));
}
//-------------------------------------------------------------- DoBatteryEngaged
void DoBatteryEngaged (gliderPtr thisGlider)
{
if (thisGlider->facing == kFaceLeft)
{
if (thisGlider->tipped)
thisGlider->hVel += kHyperThrust;
else
thisGlider->hVel -= kHyperThrust;
}
else
{
if (thisGlider->tipped)
thisGlider->hVel -= kHyperThrust;
else
thisGlider->hVel += kHyperThrust;
}
batteryTotal--;
if (batteryTotal == 0)
{
QuickBatteryRefresh(false);
PlayPrioritySound(kFizzleSound, kFizzlePriority);
}
else
{
if (!batteryWasEngaged)
batteryFrame = 0;
if (batteryFrame == 0)
PlayPrioritySound(kThrustSound, kThrustPriority);
batteryFrame++;
if (batteryFrame >= 4)
batteryFrame = 0;
batteryWasEngaged = true;
}
}
//-------------------------------------------------------------- DoHeliumEngaged
void DoHeliumEngaged (gliderPtr thisGlider)
{
thisGlider->vDesiredVel = -kHeliumLift;
batteryTotal++;
if (batteryTotal == 0)
{
QuickBatteryRefresh(false);
PlayPrioritySound(kFizzleSound, kFizzlePriority);
batteryWasEngaged = false;
}
else
{
if (!batteryWasEngaged)
batteryFrame = 0;
if (batteryFrame == 0)
PlayPrioritySound(kHissSound, kHi
|