diff options
| author | Matthew Hoops | 2011-12-12 15:27:48 -0500 | 
|---|---|---|
| committer | Matthew Hoops | 2011-12-12 15:27:48 -0500 | 
| commit | 9c1fbbd1c2b63e4a610f39dac57366c227161908 (patch) | |
| tree | 63b84301514841ae45088e80e804e674fde953b7 | |
| parent | 00279659b22cbd5db739d5351e83a9fc2a2ae408 (diff) | |
| download | scummvm-rg350-9c1fbbd1c2b63e4a610f39dac57366c227161908.tar.gz scummvm-rg350-9c1fbbd1c2b63e4a610f39dac57366c227161908.tar.bz2 scummvm-rg350-9c1fbbd1c2b63e4a610f39dac57366c227161908.zip  | |
PEGASUS: Implement shooting Sinclair
| -rwxr-xr-x | engines/pegasus/neighborhood/caldoria/caldoria.cpp | 40 | ||||
| -rwxr-xr-x | engines/pegasus/neighborhood/caldoria/caldoria.h | 16 | 
2 files changed, 52 insertions, 4 deletions
diff --git a/engines/pegasus/neighborhood/caldoria/caldoria.cpp b/engines/pegasus/neighborhood/caldoria/caldoria.cpp index 9e8717b317..3b6fe02da7 100755 --- a/engines/pegasus/neighborhood/caldoria/caldoria.cpp +++ b/engines/pegasus/neighborhood/caldoria/caldoria.cpp @@ -157,7 +157,16 @@ void sinclairTimerExpiredFunction(FunctionPtr *, void *caldoria) {  	((Caldoria *)caldoria)->sinclairTimerExpired();  } -Caldoria::Caldoria(InputHandler* nextHandler, PegasusEngine *owner) : Neighborhood(nextHandler, owner, "Caldoria", kCaldoriaID) { +SinclairCallBack::SinclairCallBack(Caldoria *caldoria) { +	_caldoria = caldoria; +} + +void SinclairCallBack::callBack() { +	_caldoria->checkInterruptSinclair(); +} + +Caldoria::Caldoria(InputHandler* nextHandler, PegasusEngine *owner) +		: Neighborhood(nextHandler, owner, "Caldoria", kCaldoriaID), _sinclairInterrupt(this) {  	setIsItemTaken(kKeyCard);  	setIsItemTaken(kOrangeJuiceGlassEmpty);  	GameState.setTakenItemID(kOrangeJuiceGlassFull, GameState.isTakenItemID(kOrangeJuiceGlassEmpty)); @@ -166,6 +175,7 @@ Caldoria::Caldoria(InputHandler* nextHandler, PegasusEngine *owner) : Neighborho  }  Caldoria::~Caldoria() { +	_sinclairInterrupt.releaseCallBack();  }  void Caldoria::init() { @@ -174,6 +184,8 @@ void Caldoria::init() {  	//	We need this notification flag as well.  	_neighborhoodNotification.notifyMe(this, kSinclairLoopDoneFlag, kSinclairLoopDoneFlag); +	_sinclairInterrupt.initCallBack(&_navMovie, kCallBackAtTime); +  	forceStridingStop(kCaldoria55, kSouth, kAltCaldoriaSinclairDown);  	forceStridingStop(kCaldoria50, kNorth, kAltCaldoriaSinclairDown);  } @@ -1072,8 +1084,15 @@ void Caldoria::setUpSinclairLoops() {  	_navMovie.start();  } -void Caldoria::zoomToSinclair() { -	// TODO +void Caldoria::zoomToSinclair() {	 +	_utilityFuse.stopFuse(); +	_privateFlags.setFlag(kCaldoriaPrivateReadyToShootFlag, true); +	setCurrentActivation(kActivateZoomedOnSinclair); + +	ExtraTable::Entry entry; +	getExtraEntry(kCa53EastZoomToSinclair, entry); +	_sinclairInterrupt.scheduleCallBack(kTriggerTimeFwd, entry.movieStart + kSinclairInterruptionTime1, _navMovie.getScale()); +	startExtraSequence(kCa53EastZoomToSinclair, kExtraCompletedFlag, kFilterAllInput);  }  void Caldoria::receiveNotification(Notification *notification, const tNotificationFlags flags) {	 @@ -1794,7 +1813,20 @@ void Caldoria::checkInterruptSinclair() {  		_neighborhoodNotification.setNotificationFlags(kExtraCompletedFlag, kExtraCompletedFlag);  		g_AIArea->unlockAI();  	} else { -		// TODO +		uint32 currentTime = _navMovie.getTime(); + +		ExtraTable::Entry entry; +		getExtraEntry(kCa53EastZoomToSinclair, entry); + +		if (currentTime < entry.movieStart + kSinclairInterruptionTime2) +			_sinclairInterrupt.scheduleCallBack(kTriggerTimeFwd, entry.movieStart + kSinclairInterruptionTime2, +					_navMovie.getScale()); +		else if (currentTime < entry.movieStart + kSinclairInterruptionTime3) +			_sinclairInterrupt.scheduleCallBack(kTriggerTimeFwd, entry.movieStart + kSinclairInterruptionTime3, +					_navMovie.getScale()); +		else if (currentTime < entry.movieStart + kSinclairInterruptionTime4) +			_sinclairInterrupt.scheduleCallBack(kTriggerTimeFwd, entry.movieStart + kSinclairInterruptionTime4, +					_navMovie.getScale());  	}  } diff --git a/engines/pegasus/neighborhood/caldoria/caldoria.h b/engines/pegasus/neighborhood/caldoria/caldoria.h index f2e3775168..538eaafc01 100755 --- a/engines/pegasus/neighborhood/caldoria/caldoria.h +++ b/engines/pegasus/neighborhood/caldoria/caldoria.h @@ -386,7 +386,21 @@ const tDisplayElementID kCaldoriaBombTimerID = kCaldoriaBombGridID + 1;  const TimeValue kCaldoria4DBlankChoiceIn = 29730;  const TimeValue kCaldoria4DBlankChoiceOut = 33910; +class Caldoria; + +class SinclairCallBack : public TimeBaseCallBack { +public: +	SinclairCallBack(Caldoria *); +	~SinclairCallBack() {} + +protected: +	virtual void callBack(); + +	Caldoria *_caldoria; +}; +  class Caldoria : public Neighborhood { +friend class SinclairCallBack;  friend void doorBombTimerExpiredFunction(FunctionPtr *, void *);  friend void sinclairTimerExpiredFunction(FunctionPtr *, void *); @@ -500,6 +514,8 @@ protected:  	Sprite *_gunSprite; +	SinclairCallBack _sinclairInterrupt; +  	Common::String getSoundSpotsName();  	Common::String getNavMovieName();  };  | 
