diff options
author | Eugene Sandulenko | 2013-11-06 23:41:57 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2013-11-06 23:46:03 +0200 |
commit | 627769a2f5d9ec0bbcf6ce9f9200a173bfea84bf (patch) | |
tree | eec44c1e878cda7dd87f0770fbfcbeed4c83d183 /engines/fullpipe | |
parent | e36f24ad691f4b61ee3cf7c01819edf4b70f80d1 (diff) | |
download | scummvm-rg350-627769a2f5d9ec0bbcf6ce9f9200a173bfea84bf.tar.gz scummvm-rg350-627769a2f5d9ec0bbcf6ce9f9200a173bfea84bf.tar.bz2 scummvm-rg350-627769a2f5d9ec0bbcf6ce9f9200a173bfea84bf.zip |
FULLPIPE: Implement another Movement class copy constructor.
Diffstat (limited to 'engines/fullpipe')
-rw-r--r-- | engines/fullpipe/statics.cpp | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 0599125269..e281b9bbfb 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -1201,8 +1201,86 @@ Movement::Movement(Movement *src, StaticANIObject *ani) { updateCurrDynamicPhase(); } -Movement::Movement(Movement *src, int *flag1, int flag2, StaticANIObject *ani) { - warning("STUB: Movement(src, %p, %d, ani)", (void *)flag1, flag2); +Movement::Movement(Movement *src, int *oldIdxs, int newSize, StaticANIObject *ani) : GameObject(src) { + _lastFrameSpecialFlag = 0; + _updateFlag1 = 1; + _staticsObj1 = 0; + _staticsObj2 = 0; + _mx = 0; + _my = 0; + _m2x = 0; + _m2y = 0; + + _field_78 = 0; + _framePosOffsets = 0; + _field_84 = 0; + _currDynamicPhase = 0; + _field_8C = 0; + _currDynamicPhaseIndex = 0; + _field_94 = 0; + + _field_50 = src->_field_50; + _flipFlag = src->_flipFlag; + _currMovement = 0; + _mx = src->_mx; + _my = src->_my; + _m2x = src->_m2x; + _m2y = src->_m2y; + + if (newSize != -1) { + if (newSize >= src->_dynamicPhases.size() + 1) + newSize = src->_dynamicPhases.size() + 1; + } else { + newSize = src->_dynamicPhases.size(); + } + + _framePosOffsets = (Common::Point **)calloc(newSize, sizeof(Common::Point *)); + + for (int i = 0; i < newSize; i++) + _framePosOffsets[i] = new Common::Point(); + + if (oldIdxs) { + for (int i = 0; i < newSize - 1; i++, oldIdxs++) { + if (oldIdxs[i] == -1) { + _dynamicPhases.push_back(src->_staticsObj1); + + _framePosOffsets[i]->x = 0; + _framePosOffsets[i]->y = 0; + } else { + src->setDynamicPhaseIndex(oldIdxs[i]); + + _dynamicPhases.push_back(src->_currDynamicPhase); + + _framePosOffsets[i]->x = src->_framePosOffsets[oldIdxs[i]]->x; + _framePosOffsets[i]->y = src->_framePosOffsets[oldIdxs[i]]->y; + } + } + _staticsObj1 = (Statics *)_dynamicPhases.front(); + _staticsObj2 = (Statics *)_dynamicPhases.back(); + } else { + for (int i = 0; i < newSize; i++) { + src->setDynamicPhaseIndex(i); + + if (i < newSize - 1) + _dynamicPhases.push_back(new DynamicPhase(src->_currDynamicPhase, 0)); + + _framePosOffsets[i]->x = src->_framePosOffsets[i]->x; + _framePosOffsets[i]->y = src->_framePosOffsets[i]->y; + } + + _staticsObj1 = ani->getStaticsById(src->_staticsObj1->_staticsId); + _staticsObj2 = ani->getStaticsById(src->_staticsObj2->_staticsId); + + _dynamicPhases.push_back(_staticsObj2); + + this->_updateFlag1 = src->_updateFlag1; + } + + updateCurrDynamicPhase(); + removeFirstPhase(); + + _counterMax = src->_counterMax; + _counter = src->_counter; } bool Movement::load(MfcArchive &file) { |