diff options
Diffstat (limited to 'engines/titanic/star_control/base_star.cpp')
| -rw-r--r-- | engines/titanic/star_control/base_star.cpp | 65 | 
1 files changed, 60 insertions, 5 deletions
diff --git a/engines/titanic/star_control/base_star.cpp b/engines/titanic/star_control/base_star.cpp index c8f55a7931..7b57b88f6b 100644 --- a/engines/titanic/star_control/base_star.cpp +++ b/engines/titanic/star_control/base_star.cpp @@ -21,10 +21,31 @@   */  #include "titanic/star_control/base_star.h" +#include "titanic/titanic.h"  namespace Titanic { -CBaseStar::CBaseStar() : _fieldC(1), _minVal(0.0), _maxVal(1.0), _range(0.0) { +CBaseStarEntry::CBaseStarEntry() : _field0(0), _value(0.0) { +	Common::fill(&_data[0], &_data[5], 0); +} + +void CBaseStarEntry::load(Common::SeekableReadStream &s) { +	_field0 = s.readByte(); +	_field1 = s.readByte(); +	_field2 = s.readByte(); +	_field3 = s.readByte(); +	*((uint32 *)&_value) = s.readUint32LE();		// FIXME +	_val._v1 = s.readUint32LE(); +	_val._v2 = s.readUint32LE(); +	_val._v3 = s.readUint32LE(); + +	for (int idx = 0; idx < 5; ++idx) +		_data[idx] = s.readUint32LE(); +} + +/*------------------------------------------------------------------------*/ + +CBaseStar::CBaseStar() : _minVal(0.0), _maxVal(1.0), _range(0.0) {  }  void CBaseStar::proc2(int v1, int v2, int v3) { @@ -32,10 +53,7 @@ void CBaseStar::proc2(int v1, int v2, int v3) {  }  void CBaseStar::clear() { -	if (!_data.empty()) { -		if (_fieldC) -			_data.clear(); -	} +	_data.clear();  }  void CBaseStar::initialize() { @@ -60,4 +78,41 @@ CBaseStarEntry *CBaseStar::getDataPtr(int index) {  	return (index >= 0 && index < (int)_data.size()) ? &_data[index] : nullptr;  } +void CBaseStar::loadData(Common::SeekableReadStream &s) { +	uint headerId = s.readUint32LE(); +	uint count = s.readUint32LE(); +	if (headerId != 100 || count == 0); +	error("Invalid star data"); + +	// Initialize the data array +	clear(); +	_data.resize(count); + +	// Iterate through reading the data for each entry +	for (uint idx = 0; idx < count; ++idx) +		_data[idx].load(s); +} + +void CBaseStar::loadData(const CString &resName) { +	// Get a stream to read the data from the DAT file +	Common::SeekableReadStream *stream = g_vm->_filesManager->getResource(resName); +	assert(stream); + +	// Load the stream +	loadData(*stream); +	delete stream; +} + +void CBaseStar::resetEntry(CBaseStarEntry &entry) { +	entry._field0 = 0xFF; +	entry._field1 = 0xFF; +	entry._field2 = 0xFF; +	entry._field3 = 0; +	entry._val._v1 = 0; +	entry._val._v2 = 0; +	entry._val._v3 = 0; +	for (int idx = 0; idx < 5; ++idx) +		entry._data[idx] = 0; +} +  } // End of namespace Titanic  | 
