Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
GameSource/MissileAEvents.c
#include "GameAEvents.h" |
#include "ZAM.h" |
#include "WindowDispatch.h" |
#include "TankSprite.h" |
#include "MissileSprite.h" |
#include "MissileAEvents.proto.h" |
void InstallMissileEvents(gamePtr game) |
{ |
OSErr err; |
err = AEInstallEventHandler (kZAMEventClass, kFireMissileID, AEFireMissile,(long)game, false); |
if(err) { |
ErrMsgCode("\pCould not install AE handler.",err); |
ExitToShell(); |
} |
err = AEInstallEventHandler (kZAMEventClass, kMoveRemoteMissileID, AEMoveRemoteMissile,(long)game, false); |
if(err) { |
ErrMsgCode("\pCould not install AE handler.",err); |
ExitToShell(); |
} |
} |
pascal OSErr AEMoveRemoteMissile (AppleEvent *theAE, AppleEvent *reply, long rfCon) |
{ |
OSErr err = 0; |
long len; |
DescType actualType; |
gamePtr game; |
short missileIndex; |
fixPt missileLoc; |
game = (gamePtr)rfCon; |
err = AEGetParamPtr(theAE, keyMissileNum, typeShortInteger, &actualType, |
&missileIndex, sizeof(short), &len); |
if(err != noErr) { |
ErrMsgCode("\p Failed: AEMoveRemoteMissile keyDir, typeShortInteger",err); |
} |
if(err == noErr) { |
err = AEGetParamPtr(theAE, keyLocation, typefixPt, &actualType, |
&missileLoc, sizeof(short), &len); |
if(err != noErr) { |
ErrMsgCode("\p Failed: AEMoveRemoteMissile keyLocation, typefixPt",err); |
} |
} |
if(err == noErr) { |
RemoteMissileSpriteList[missileIndex]->remoteLoc = missileLoc; |
RemoteMissileSpriteList[missileIndex]->moveTask.taskFlag = true; |
} |
return err; |
} |
pascal OSErr AEFireMissile (AppleEvent *theAE, AppleEvent *reply, long rfCon) |
{ |
fixPt where; |
long len; |
DescType actualType; |
short direction; |
short missileNum; |
gamePtr game; |
OSErr err = 0; |
game = (gamePtr)rfCon; |
#ifdef CHECK_STATE |
if(err == noErr) { |
if ( game->gameState != kGameInProgress ) { |
err = paramErr; |
ErrMsgCode("\pError - missile event rcvd in wrong state",game->gameState); |
} |
} |
#endif |
if(err == noErr) { |
/* get the direction of the missile */ |
err = AEGetParamPtr(theAE, keyMissileNum, typeShortInteger, &actualType, |
&missileNum, sizeof(short), &len); |
if(err != noErr) { |
ErrMsgCode("\p Failed: AEFireMissile keyDir, typeShortInteger",err); |
} |
} |
if(err == noErr) { |
/* get the direction of the missile */ |
err = AEGetParamPtr(theAE, keyDir, typeShortInteger, &actualType, |
&direction, sizeof(short), &len); |
if(err != noErr) { |
ErrMsgCode("\p Failed: AEFireMissile keyDir, typeShortInteger",err); |
} |
} |
if(err == noErr) { |
/* get the starting point of the missile */ |
err = AEGetParamPtr(theAE, keyLocation, typefixPt, &actualType, |
&where, sizeof(fixPt), &len); |
if(err != noErr) { |
ErrMsgCode("\p Failed: AEFireMissile keyLocation, typePoint",err); |
} |
} |
if(err == noErr) { |
FireMissile( direction, where.h, where.v, true, missileNum ); |
} |
} |
void NetworkMoveMissile(short missileIndex) |
{ |
AppleEvent missileMovedEvt; |
AppleEvent reply; |
OSErr err; |
Boolean disposeNeeded = false; |
#ifdef NO_NET |
return; |
#endif |
err = AECreateAppleEvent(kZAMEventClass, kMoveRemoteMissileID, &gGame->oppAddr, |
kAnyTransactionID, gGame->gameID, &missileMovedEvt); |
if(err != noErr) { |
ErrMsgCode("\p Failure: NetworkMoveTank AECreateAppleEvent",err); |
} |
if(err == noErr) { |
disposeNeeded = true; |
AEPutParamPtr(&missileMovedEvt, keyMissileNum, typeShortInteger, |
&missileIndex, sizeof(short)); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AEPutParamPtr",err); |
} |
} |
if(err == noErr) { |
AEPutParamPtr(&missileMovedEvt, keyLocation, typefixPt, |
&MissileSpriteList[missileIndex]->loc, sizeof(fixPt)); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AEPutParamPtr",err); |
} |
} |
if(err == noErr) { |
err = AESend(&missileMovedEvt, &reply, kAENoReply + kAECanInteract, |
kAENormalPriority, |
60 * 60, nil, nil); |
if(err != noErr) { |
ErrMsgCode("\p NetworkMoveMissile: AESend missileMovedEvt",err); |
} |
} |
if(disposeNeeded) { |
AEDisposeDesc(&NetworkMoveMissile); |
} |
} |
void NetworkFireMissile(gamePtr game, short dir, Fixed h, Fixed v, short missileNum) |
{ |
OSErr err; |
AppleEvent fireMissileEvent; |
AppleEvent reply; |
Boolean disposeNeeded = false; |
fixPt where; |
#ifdef NO_NET |
return; |
#endif |
err = AECreateAppleEvent(kZAMEventClass, kFireMissileID, &game->oppAddr, |
kAnyTransactionID, game->gameID, &fireMissileEvent); |
if(err != noErr) { |
ErrMsgCode("\p Failure: FireNetworkMissile AECreateAppleEvent",err); |
} |
if(err == noErr) { |
disposeNeeded = true; |
err = AEPutParamPtr(&fireMissileEvent, keyMissileNum, typeShortInteger, |
&missileNum, sizeof(short)); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AEPutParamPtr",err); |
} |
} |
if(err == noErr) { |
err = AEPutParamPtr(&fireMissileEvent, keyDir, typeShortInteger, |
&dir, sizeof(short)); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AEPutParamPtr",err); |
} |
} |
if(err == noErr) { |
where.h = h; |
where.v = v; |
err = AEPutParamPtr(&fireMissileEvent, keyLocation, typefixPt, |
&where, sizeof(fixPt) ); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AEPutParamPtr",err); |
} |
} |
if(err == noErr) { |
err = AESend(&fireMissileEvent, &reply, kAENoReply + kAECanInteract, |
kAENormalPriority, |
60 * 60, nil, nil); |
if(err != noErr) { |
ErrMsgCode("\p Failure: AESend",err); |
} |
} |
if(disposeNeeded) |
AEDisposeDesc(&fireMissileEvent); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14