diff options
| -rw-r--r-- | engines/titanic/direct_draw.cpp | 9 | ||||
| -rw-r--r-- | engines/titanic/direct_draw.h | 10 | ||||
| -rw-r--r-- | engines/titanic/simple_file.cpp | 9 | ||||
| -rw-r--r-- | engines/titanic/simple_file.h | 8 | ||||
| -rw-r--r-- | engines/titanic/video_surface.cpp | 37 | ||||
| -rw-r--r-- | engines/titanic/video_surface.h | 21 | 
6 files changed, 82 insertions, 12 deletions
diff --git a/engines/titanic/direct_draw.cpp b/engines/titanic/direct_draw.cpp index 17e13610e0..1d0ddab4fb 100644 --- a/engines/titanic/direct_draw.cpp +++ b/engines/titanic/direct_draw.cpp @@ -110,6 +110,15 @@ DirectDrawSurface *DirectDrawManager::createSurface(int w, int h, int surfaceNum  /*------------------------------------------------------------------------*/ +void *DirectDrawSurface::lock(const Common::Rect *bounds, int flags) { +	assert(w != 0 && h != 0); +	return getPixels(); +} + +void DirectDrawSurface::unlock() { +	assert(w != 0 && h != 0); +} +  void DirectDrawSurface::fill(const Common::Rect *bounds, uint32 color) {  	Common::Rect tempBounds; diff --git a/engines/titanic/direct_draw.h b/engines/titanic/direct_draw.h index bd6a77dc2d..71210f1b28 100644 --- a/engines/titanic/direct_draw.h +++ b/engines/titanic/direct_draw.h @@ -43,6 +43,16 @@ struct DDSurfaceDesc {  class DirectDrawSurface : public Graphics::Surface {  public:  	/** +	 * Lock the surface for access +	 */ +	void *lock(const Common::Rect *bounds, int flags); + +	/** +	 * Unlocks the surface at the end of direct accesses +	 */ +	void unlock(); + +	/**  	 * Fills an area of the surfae with the specified color. If no bounds are passed,  	 * then the entire surface is filled  	 */ diff --git a/engines/titanic/simple_file.cpp b/engines/titanic/simple_file.cpp index 4be8bb3d88..f2fdf4effb 100644 --- a/engines/titanic/simple_file.cpp +++ b/engines/titanic/simple_file.cpp @@ -331,4 +331,13 @@ void SimpleFile::writeClassEnd(int indent) {  	write("}\n", 2);  } +/*------------------------------------------------------------------------*/ + +StdCWadFile::StdCWadFile(const CString &name): SimpleFile() { +	if (!_file.open(name)) +		error("Could not open file - %s", name.c_str()); + +	open(&_file); +} +  } // End of namespace Titanic diff --git a/engines/titanic/simple_file.h b/engines/titanic/simple_file.h index cc68d2d54c..0a452e49cd 100644 --- a/engines/titanic/simple_file.h +++ b/engines/titanic/simple_file.h @@ -23,6 +23,7 @@  #ifndef TITANIC_SIMPLE_FILE_H  #define TITANIC_SIMPLE_FILE_H +#include "common/file.h"  #include "common/rect.h"  #include "common/savefile.h"  #include "common/stream.h" @@ -202,6 +203,13 @@ public:  	}  }; +class StdCWadFile : public SimpleFile { +private: +	Common::File _file; +public: +	StdCWadFile(const CString &name); +}; +  } // End of namespace Titanic  #endif /* TITANIC_SIMPLE_FILE_H */ diff --git a/engines/titanic/video_surface.cpp b/engines/titanic/video_surface.cpp index e649532b81..771c7779e0 100644 --- a/engines/titanic/video_surface.cpp +++ b/engines/titanic/video_surface.cpp @@ -28,7 +28,7 @@ namespace Titanic {  int CVideoSurface::_videoSurfaceCounter = 0;  CVideoSurface::CVideoSurface(CScreenManager *screenManager) : -		_screenManager(screenManager), _field2C(0), +		_screenManager(screenManager), _pixels(nullptr),  		_field34(0), _field38(0), _field3C(0), _field40(0),  		_field44(4), _field48(0), _field50(1) {  	_videoSurfaceNum = _videoSurfaceCounter++; @@ -79,6 +79,22 @@ void OSVideoSurface::loadMovie() {  	warning("TODO");  } +bool OSVideoSurface::lock() { +	if (!proc42()) +		return false; + +	++_lockCount; +	_pixels = (uint16 *)_ddSurface->lock(nullptr, 0); +	return true; +} + +void OSVideoSurface::unlock() { +	if (_pixels) +		_ddSurface->unlock(); +	_pixels = nullptr; +	--_lockCount; +} +  bool OSVideoSurface::hasSurface() {  	return _ddSurface != nullptr;  } @@ -98,11 +114,10 @@ int OSVideoSurface::getPitch() const {  	return _ddSurface->pitch;  } -void OSVideoSurface::load() { +bool OSVideoSurface::load() {  	if (!_resourceKey.scanForFile()) -		return; +		return false; -	bool result = true;  	switch (_resourceKey.fileTypeSuffix()) {  	case FILETYPE_IMAGE:  		switch (_resourceKey.imageTypeSuffix()) { @@ -126,4 +141,18 @@ void OSVideoSurface::load() {  	}  } +bool OSVideoSurface::proc42() { +	_videoSurfaceNum = _videoSurfaceCounter; + +	if (hasSurface()) { +		return true; +	} else if (_field38) { +		_field50 = 1; +		load(); +		return true; +	} else { +		return false; +	} +} +  } // End of namespace Titanic diff --git a/engines/titanic/video_surface.h b/engines/titanic/video_surface.h index 1c4bf322ab..445165c9df 100644 --- a/engines/titanic/video_surface.h +++ b/engines/titanic/video_surface.h @@ -35,13 +35,13 @@ namespace Titanic {  class CScreenManager;  class CVideoSurface : public ListItem { -private: +protected:  	static int _videoSurfaceCounter;  protected:  	CScreenManager *_screenManager;  	CResourceKey _resourceKey;  	DirectDrawSurface *_ddSurface; -	int _field2C; +	uint16 *_pixels;  	int _field34;  	bool _field38;  	int _field3C; @@ -50,7 +50,7 @@ protected:  	int _field48;  	int _videoSurfaceNum;  	int _field50; -	int _accessCtr; +	int _lockCount;  public:  	CVideoSurface(CScreenManager *screenManager); @@ -82,7 +82,7 @@ public:  	/**  	 * Lock the surface for direct access to the pixels  	 */ -	virtual void lock() = 0; +	virtual bool lock() = 0;  	/**  	 * Unlocks the surface after prior calls to lock() @@ -97,7 +97,7 @@ public:  	/**  	 * Returns the width of the surface  	 */ -	virtual int getWidth() = 0; +	virtual int getWidth() const = 0;  	/**  	 * Returns the height of the surface @@ -108,10 +108,13 @@ public:  	 * Returns the pitch of the surface in bytes  	 */  	virtual int getPitch() const = 0; +	  	/**  	 * Loads the surface data based on the currently set resource key  	 */ -	virtual void load() const = 0; +	virtual bool load() = 0; + +	virtual bool proc42() = 0;  };  class OSVideoSurface : public CVideoSurface { @@ -142,7 +145,7 @@ public:  	/**  	 * Lock the surface for direct access to the pixels  	 */ -	virtual void lock(); +	virtual bool lock();  	/**  	 * Unlocks the surface after prior calls to lock() @@ -172,7 +175,9 @@ public:  	/**  	 * Loads the surface data based on the currently set resource key  	 */ -	virtual void load(); +	virtual bool load(); + +	virtual bool proc42();  };  } // End of namespace Titanic  | 
