FULLPIPE: Started implementation of MovGraph2::genMovement()

This commit is contained in:
Eugene Sandulenko 2013-12-30 22:56:04 +02:00
parent e7551f14fd
commit 3c64176719

View File

@ -1379,8 +1379,232 @@ int MovGraph2::findLink(Common::Array<MovGraphLink *> *linkList, int idx, Common
return node3->_x >= node2->_x;
}
MessageQueue *MovGraph2::genMovement(MovInfo1 *movinfo) {
warning("STUB: MovGraph2::genMovement()");
MessageQueue *MovGraph2::genMovement(MovInfo1 *info) {
#if 0
v69 = 0;
v70 = 0;
if (!(info->_flags & 2)) {
v6 = sizeof(MovGraph2Item) * info->field_0 + 184 * info->subIndex;
v7 = this->items2.m_pData;
v69 = *(int *)((char *)&v7->subItems[0].walk[0].mx + v6);
v70 = *(int *)((char *)&v7->subItems[0].walk[0].my + v6);
}
v59 = 0;
v64 = 0;
if (!(info->_flags & 4)) {
v8 = sizeof(MovGraph2Item) * info->field_0 + 184 * info->subIndex;
v9 = this->items2.m_pData;
v59 = *(Message **)((char *)&v9->subItems[0].walk[2].mx + v8);
v64 = *(int *)((char *)&v9->subItems[0].walk[2].my + v8);
}
v11 = info->_flags & 1;
v12 = info->subIndex;
v13 = info->pt2.y - info->pt1.y - v64 - v70;
v14 = info->field_0;
y = info->pt2.y - info->pt1.y - v64 - v70;
x = info->pt2.x - (_DWORD)v59 - v69 - info->pt1.x;
v10 = x;
v16 = _mgm->calcLength(&point, _items2[v14].subItems[v12].walk[1].mov, x, y, &v65, &a2, v11);
v17 = v16->x;
x1 = v16->x;
v18 = v16->y;
v19 = info->flags & 1;
y1 = v18;
flag = v19;
if (!v19) {
v20 = info->subIndex;
if (v20 == 1 || !v20) {
v21 = 23 * v20;
v22 = 31 * info->field_0;
a2 = -1;
v17 = v65 * this->items2.m_pData[24 * v22 / 0x2E8u].subItems[8 * v21 / 0xB8u].walk[1].mx;
v10 = v17;
x1 = v17;
x = v17;
info->pt2.x = (int)((char *)&v59->obj.vmt + v17 + v69 + info->pt1.x);
}
}
if (!flag) {
v23 = info->subIndex;
if (v23 == 2 || v23 == 3) {
v24 = 23 * v23;
v25 = 31 * info->field_0;
a2 = -1;
v18 = v65 * this->items2.m_pData[24 * v25 / 0x2E8u].subItems[8 * v24 / 0xB8u].walk[1].my;
v26 = v18 + info->pt1.y;
y1 = v18;
v13 = v18;
info->pt2.y = v70 + v64 + v26;
}
}
cnt = 0;
v60 = 0;
if (!(info->flags & 2)) {
cnt = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].mov, -1, 1);
v27 = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].mov, -1, 2);
v18 = y1;
v17 = x1;
v10 = x;
v60 = (Message *)v27;
}
if (v65 > 1) {
v28 = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 1);
cnt += (v65 - 1) * v28;
v29 = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].mov, -1, 2);
v17 = x1;
v10 = x;
v60 = (Message *)((char *)v60 + (v65 - 1) * v29);
v18 = y1;
}
if (v65 > 0) {
cnt += Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 1);
v30 = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].mov, a2, 2);
v17 = x1;
v10 = x;
v60 = (Message *)((char *)v60 + v30);
v18 = y1;
}
if (!(info->flags & 4)) {
cnt += Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 1);
v31 = Movement_countPhasesWithFlag(this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[2].mov, -1, 2);
v17 = x1;
v10 = x;
v60 = (Message *)((char *)v60 + v31);
v18 = y1;
}
v32 = v10 - v17;
v33 = v13 - v18;
x = v32;
v74 = v33;
if (cnt)
x1 = (signed __int64)((double)x / (double)cnt);
else
x1 = 0;
if (v60)
y1 = (signed __int64)((double)v74 / (double)(signed int)v60);
else
y1 = 0;
v34 = v32 - cnt * x1;
v35 = v33 - (_DWORD)v60 * y1;
y2 = v34;
v76 = v35;
if (v34)
x2 = v34 / abs(v34);
else
x2 = 0;
if (v35)
v72 = v35 / abs(v35);
else
v72 = 0;
v38 = GlobalMessageQueueList_compact(&g_globalMessageQueueList);
res = MessageQueue_ctor1(v36, v38);
mq = res;
v39 = info->flags & 2;
if ((_BYTE)v39) {
v45 = new ExCommand(
LOWORD(this->items2.m_pData[info->field_0].objectId),
5,
this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].movementId,
info->pt1.x,
info->pt1.y,
0,
1,
0,
0,
0);
v46 = info->distance1;
v45->msg._field_14 = v46;
v41 = (int)&res->exCommands.obj.vmt;
v47 = v45->_excFlags | 2;
v45->msg._keyCode = this->items2.m_pData[info->field_0].obj->go._okeyCode;
v45->msg._field_24 = 1;
v45->_excFlags = v47;
} else {
v40 = ExCommand_ctor(
(ExCommand *)v61,
LOWORD(this->items2.m_pData[info->field_0].objectId),
5,
this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].movementId,
info->pt1.x,
info->pt1.y,
0,
1,
0,
0,
0);
v41 = (int)&res->exCommands.obj.vmt;
v40->msg._field_14 = info->distance1;
v42 = info->field_0;
v43 = info->field_0;
LOWORD(v43) = *(_WORD *)(*((_DWORD *)&this->items2.m_pData->obj + 6 * (32 * v43 - v42)) + 4);
v44 = v40->_excFlags;
v40->msg._keyCode = (unsigned __int16)v43;
v40->msg._field_24 = 1;
v40->_excFlags = v44 | 2;
CPtrList::AddTail(&res->exCommands, v40);
v45 = MGM_buildExCommand2(
(MGM *)&this->movGraph.mgm,
this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[offsetof(MovGraph2Item, objectId)].mov,
LOWORD(this->items2.m_pData[info->field_0].objectId),
x1,
y1,
&x2,
&y2,
-1);
v45->_parId = res->_id;
v45->msg._keyCode = this->items2.m_pData[info->field_0].obj->go._okeyCode;
}
CPtrList::AddTail(v41, v45);
v48 = v65;
v49 = 0;
for (i = 0; i < v65; ++i) {
if (v49 == v48 - 1)
v50 = a2;
else
v50 = -1;
v51 = MGM_buildExCommand2(
(MGM *)&this->movGraph.mgm,
this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[1].mov,
LOWORD(this->items2.m_pData[info->field_0].objectId),
x1,
y1,
&x2,
&y2,
v50);
res = mq;
v51->_parId = mq->_id;
v51->msg._keyCode = this->items2.m_pData[info->field_0].obj->go._okeyCode;
CPtrList::AddTail(v41, v51);
v48 = v65;
v49 = i + 1;
}
if (!(info->flags & 4)) {
v52 = MGM_buildExCommand2(
(MGM *)&this->movGraph.mgm,
this->items2.m_pData[info->field_0].subItems[info->subIndex].walk[2].mov,
LOWORD(this->items2.m_pData[info->field_0].objectId),
x1,
y1,
&x2,
&y2,
-1);
v52->_parId = res->_id;
v52->msg._keyCode = this->items2.m_pData[info->field_0].obj->go._okeyCode;
CPtrList::AddTail(v41, v52);
}
v54 = ExCommand_ctor(v53, LOWORD(this->items2.m_pData[info->field_0].objectId), 5, -1, info->pt2.x, info->pt2.y, 0, 1, 0, 0, 0);
v54->msg._field_14 = info->distance2;
v55 = info->field_0;
v56 = this->items2.m_pData;
v54->msg._keyCode = v56[v55].obj->go._okeyCode;
v57 = v54->_excFlags | 2;
v54->msg._field_24 = 0;
v54->_excFlags = v57;
CPtrList::AddTail(v41, v54);
return res;
#endif
return 0;
}