aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe
diff options
context:
space:
mode:
authorEugene Sandulenko2014-05-24 11:05:07 +0300
committerEugene Sandulenko2014-05-24 11:17:03 +0300
commit9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26 (patch)
treec6c2029f4cf3a7408f28a701981b8dea175abf24 /engines/fullpipe
parentc4f3f77d74adb7a513819c7542dd1eed67badb95 (diff)
downloadscummvm-rg350-9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26.tar.gz
scummvm-rg350-9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26.tar.bz2
scummvm-rg350-9f447e0ff4b5fa9ec407cf7fc4e1a55fc7837d26.zip
FULLPIPE: Fix MovGraphItem structure
Diffstat (limited to 'engines/fullpipe')
-rw-r--r--engines/fullpipe/motion.cpp50
-rw-r--r--engines/fullpipe/motion.h19
2 files changed, 22 insertions, 47 deletions
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index cc248e131e..20ae2dfa61 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -507,14 +507,6 @@ bool MctlCompoundArray::load(MfcArchive &file) {
MovGraphItem::MovGraphItem() {
ani = 0;
field_4 = 0;
- movarr = 0;
- field_C = 0;
- field_10 = 0;
- field_14 = 0;
- field_18 = 0;
- field_1C = 0;
- field_20 = 0;
- field_24 = 0;
movitems = 0;
count = 0;
field_30 = 0;
@@ -529,7 +521,7 @@ void MovGraphItem::free() {
int MovGraph_messageHandler(ExCommand *cmd);
-Common::Array<MovArr *> *movGraphCallback(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter) {
+MovArr *movGraphCallback(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter) {
int residx = 0;
int itemidx = 0;
@@ -592,10 +584,7 @@ void MovGraph::freeItems() {
for (uint i = 0; i < _items.size(); i++) {
_items[i]->free();
- for (uint j = 0; j < _items[i]->movarr->size(); j++)
- delete (*_items[i]->movarr)[j];
-
- delete _items[i]->movarr;
+ _items[i]->movarr._movSteps.clear();
}
_items.clear();
@@ -684,7 +673,7 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f
return method50(ani, _callback1(ani, movitems, count), staticsId);
}
-void MovGraph::changeCallback(Common::Array<MovArr *> *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
+void MovGraph::changeCallback(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
_callback1 = callback1;
}
@@ -734,11 +723,11 @@ bool MovGraph::method44(StaticANIObject *ani, int x, int y) {
Common::Array<MovItem *> *movitem = method28(ani, x, y, 0, &counter);
if (movitem) {
- Common::Array<MovArr *> *movarr = _callback1(ani, movitem, counter);
- int cnt = (*movarr)[0]->_movStepCount;
+ MovArr *movarr = _callback1(ani, movitem, counter);
+ int cnt = movarr->_movStepCount;
if (cnt > 0) {
- if ((*movarr)[0]->_movSteps[cnt - 1]->link->_flags & 0x4000000)
+ if (movarr->_movSteps[cnt - 1]->link->_flags & 0x4000000)
return true;
}
}
@@ -759,7 +748,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
subj->getPicAniInfo(&picAniInfo);
if (movitem) {
- Common::Array<MovArr *> *goal = _callback1(subj, movitem, ss);
+ MovArr *goal = _callback1(subj, movitem, ss);
int idx = getItemIndexByStaticAni(subj);
for (int i = 0; i < _items[idx]->count; i++) {
@@ -787,7 +776,7 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss);
if (movitem) {
- Common::Array<MovArr *> *goal = _callback1(subj, movitem, ss);
+ MovArr *goal = _callback1(subj, movitem, ss);
int idx = getItemIndexByStaticAni(subj);
if (_items[idx]->count > 0) {
@@ -802,18 +791,13 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
}
}
- _items[idx]->movarr->clear();
-
- for (int i = 0; i < (*_items[idx]->movitems->operator[](arridx)->movarr)[i]->_movStepCount; i++) {
- MovArr *m = new MovArr;
-
- *m = *(*_items[idx]->movitems->operator[](arridx)->movarr)[i];
- }
-
- _items[idx]->field_10 = -1;
- _items[idx]->field_14 = 0;
+ _items[idx]->movarr._movSteps.clear();
+ _items[idx]->movarr = *_items[idx]->movitems->operator[](arridx)->movarr;
+ _items[idx]->movarr._movSteps = _items[idx]->movitems->operator[](arridx)->movarr->_movSteps;
+ _items[idx]->movarr._afield_8 = -1;
+ _items[idx]->movarr._link = 0;
- MessageQueue *mq = fillMGMinfo(_items[idx]->ani, (*_items[idx]->movarr)[0], staticsId);
+ MessageQueue *mq = fillMGMinfo(_items[idx]->ani, &_items[idx]->movarr, staticsId);
if (mq) {
ExCommand *ex = new ExCommand();
ex->_messageKind = 17;
@@ -925,7 +909,7 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
return mq;
}
-MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *movarr, int staticsId) {
+MessageQueue *MovGraph::method50(StaticANIObject *ani, MovArr *movarr, int staticsId) {
#if 0
if (_itemsCount <= 0)
return 0;
@@ -958,11 +942,9 @@ MessageQueue *MovGraph::method50(StaticANIObject *ani, Common::Array<MovArr *> *
if (_items[idx]->movarr)
delete _items[idx]->movarr;
- _items[idx]->movarr = _items[idx]->movitems[movidx].movarr;
-
+ _items[idx]->copyPart(_items[idx]->movitems[movidx]);
_items[idx]->movarr->_movSteps.clear();
_items[idx]->movarr->_movSteps = _items[idx]->movitems[movidx].movarr->_movSteps;
-
_items[idx]->field_10 = -1;
_items[idx]->field_14 = 0;
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index dbd41b8f9e..3aa07c143e 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -58,7 +58,7 @@ public:
virtual bool method2C(StaticANIObject *obj, int x, int y) { return false; }
virtual int method30() { return 0; }
virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; }
- virtual void changeCallback(Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
+ virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
virtual bool method3C(StaticANIObject *ani, int flag) { return 0; }
virtual int method40() { return 0; }
virtual bool method44(StaticANIObject *ani, int x, int y) { return false; }
@@ -316,7 +316,7 @@ struct MovArr {
};
struct MovItem {
- Common::Array<MovArr *> *movarr;
+ MovArr *movarr;
int _mfield_4;
int _mfield_8;
int _mfield_C;
@@ -325,14 +325,7 @@ struct MovItem {
struct MovGraphItem {
StaticANIObject *ani;
int field_4;
- Common::Array<MovArr *> *movarr;
- int field_C;
- int field_10;
- int field_14;
- int field_18;
- int field_1C;
- int field_20;
- int field_24;
+ MovArr movarr;
Common::Array<MovItem *> *movitems;
int count;
int field_30;
@@ -350,7 +343,7 @@ public:
ObList _links;
int _field_44;
Common::Array<MovGraphItem *> _items;
- Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter);
+ MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter);
MGM _mgm;
public:
@@ -365,11 +358,11 @@ public:
virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount);
virtual bool method2C(StaticANIObject *obj, int x, int y);
virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
- virtual void changeCallback(Common::Array<MovArr *> *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
+ virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
virtual bool method3C(StaticANIObject *ani, int flag);
virtual bool method44(StaticANIObject *ani, int x, int y);
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
- virtual MessageQueue *method50(StaticANIObject *ani, Common::Array<MovArr *> *movarr, int staticsId);
+ virtual MessageQueue *method50(StaticANIObject *ani, MovArr *movarr, int staticsId);
double calcDistance(Common::Point *point, MovGraphLink *link, int fuzzyMatch);
void calcNodeDistancesAndAngles();