FULLPIPE: Implement MovGraph2::initDirections()

This commit is contained in:
Eugene Sandulenko 2013-09-28 15:59:46 +03:00
parent dd7995958d
commit ac1be668d9
4 changed files with 137 additions and 7 deletions

View file

@ -244,9 +244,132 @@ int MovGraph2::getItemIndexByGameObjectId(int objectId) {
}
bool MovGraph2::initDirections(StaticANIObject *obj, MovGraph2Item *item) {
warning("STUB: MovGraph2::initDirections()");
item->_obj = obj;
item->_objectId = obj->_id;
return false;
GameVar *var = g_fullpipe->getGameLoaderGameVar()->getSubVarByName(obj->_objectName);
if (!var)
return false;
var = var->getSubVarByName("Test_walk");
if (!var)
return false;
GameVar *varD = 0;
Common::Point point;
for (int dir = 0; dir < 4; dir++) {
switch (dir) {
case 0:
varD = var->getSubVarByName("Right");
break;
case 1:
varD = var->getSubVarByName("Left");
break;
case 2:
varD = var->getSubVarByName("Up");
break;
case 3:
varD = var->getSubVarByName("Down");
break;
}
if (!varD)
return false;
for (int act = 0; act < 3; act++) {
int idx;
switch(act) {
case 0:
idx = varD->getSubVarAsInt("Start");
break;
case 1:
idx = varD->getSubVarAsInt("Go");
break;
case 2:
idx = varD->getSubVarAsInt("Stop");
break;
}
item->_subItems[dir]._walk[act]._movementId = idx;
Movement *mov = obj->getMovementById(idx);
item->_subItems[dir]._walk[act]._mov = mov;
if (mov) {
mov->calcSomeXY(point, 0);
item->_subItems[dir]._walk[act]._mx = point.x;
item->_subItems[dir]._walk[act]._my = point.y;
}
}
for (int act = 0; act < 4; act++) {
int idx;
switch(act) {
case 0:
idx = varD->getSubVarAsInt("TurnR");
break;
case 1:
idx = varD->getSubVarAsInt("TurnL");
break;
case 2:
idx = varD->getSubVarAsInt("TurnU");
break;
case 3:
idx = varD->getSubVarAsInt("TurnD");
break;
}
item->_subItems[dir]._turn[act]._movementId = idx;
Movement *mov = obj->getMovementById(idx);
item->_subItems[dir]._turn[act]._mov = mov;
if (mov) {
mov->calcSomeXY(point, 0);
item->_subItems[dir]._turn[act]._mx = point.x;
item->_subItems[dir]._turn[act]._my = point.y;
}
}
for (int act = 0; act < 4; act++) {
int idx;
switch(act) {
case 0:
idx = varD->getSubVarAsInt("TurnSR");
break;
case 1:
idx = varD->getSubVarAsInt("TurnSL");
break;
case 2:
idx = varD->getSubVarAsInt("TurnSU");
break;
case 3:
idx = varD->getSubVarAsInt("TurnSD");
break;
}
item->_subItems[dir]._turnS[act]._movementId = idx;
Movement *mov = obj->getMovementById(idx);
item->_subItems[dir]._turnS[act]._mov = mov;
if (mov) {
mov->calcSomeXY(point, 0);
item->_subItems[dir]._turnS[act]._mx = point.x;
item->_subItems[dir]._turnS[act]._my = point.y;
}
}
item->_subItems[dir]._staticsId1 = item->_subItems[dir]._walk[0]._mov->_staticsObj1->_staticsId;
item->_subItems[dir]._staticsId2 = item->_subItems[dir]._walk[0]._mov->_staticsObj2->_staticsId;
}
return true;
}
void MovGraph2::addObject(StaticANIObject *obj) {
@ -257,7 +380,6 @@ void MovGraph2::addObject(StaticANIObject *obj) {
if (id >= 0) {
_items[id]->_obj = obj;
} else {
MovGraph2Item *item = new MovGraph2Item;
if (initDirections(obj, item)) {

View file

@ -204,7 +204,7 @@ class Movement;
struct MG2I {
int _movementId;
Movement *_movement;
Movement *_mov;
int _mx;
int _my;
};
@ -212,9 +212,9 @@ struct MG2I {
struct MovGraph2ItemSub {
int _staticsId2;
int _staticsId1;
MG2I _field_8[3];
MG2I _field_38[4];
MG2I _field_78[4];
MG2I _walk[3];
MG2I _turn[4];
MG2I _turnS[4];
};
struct MovGraph2Item {

View file

@ -1245,6 +1245,12 @@ Common::Point *Movement::getCurrDynamicPhaseXY(Common::Point &p) {
return &p;
}
Common::Point *Movement::calcSomeXY(Common::Point &p, int idx) {
warning("STUB: Movement::calcSomeXY()");
return &p;
}
void Movement::setAlpha(int alpha) {
if (_currMovement)
for (uint i = 0; i < _currMovement->_dynamicPhases.size(); i++) {

View file

@ -140,6 +140,8 @@ class Movement : public GameObject {
Common::Point *getCenter(Common::Point *p);
Common::Point *getDimensionsOfPhase(Common::Point *p, int phaseIndex);
Common::Point *calcSomeXY(Common::Point &p, int idx);
void initStatics(StaticANIObject *ani);
void updateCurrDynamicPhase();