renames and a fix

This commit is contained in:
aap 2019-05-15 22:15:49 +02:00
parent 600bf03514
commit e9e72523d5
3 changed files with 97 additions and 98 deletions

View file

@ -2,4 +2,4 @@
#include "patcher.h" #include "patcher.h"
#include "ParticleObject.h" #include "ParticleObject.h"
void CParticleObject::AddObject(uint16, const CVector &pos, bool remove) { EAXJMP(0x4BC4D0); } WRAPPER void CParticleObject::AddObject(uint16, const CVector &pos, bool remove) { EAXJMP(0x4BC4D0); }

View file

@ -56,7 +56,7 @@ CPathFind::PreparePathData(void)
DetachedNodesCars && DetachedNodesPeds){ DetachedNodesCars && DetachedNodesPeds){
tempNodes = new CTempNode[4000]; tempNodes = new CTempNode[4000];
m_numLinks = 0; m_numConnections = 0;
for(i = 0; i < PATHNODESIZE; i++) for(i = 0; i < PATHNODESIZE; i++)
m_pathNodes[i].flags &= ~(PathNodeFlag1 | PathNodeFlag2); m_pathNodes[i].flags &= ~(PathNodeFlag1 | PathNodeFlag2);
@ -200,7 +200,7 @@ CPathFind::CountFloodFillGroups(uint8 type)
prev = node; prev = node;
node = node->next; node = node->next;
for(i = 0; i < prev->numLinks; i++){ for(i = 0; i < prev->numLinks; i++){
l = m_linkTo[prev->firstLink + i]; l = m_connections[prev->firstLink + i];
if(m_pathNodes[l].group == 0){ if(m_pathNodes[l].group == 0){
m_pathNodes[l].group = n; m_pathNodes[l].group = n;
if(m_pathNodes[l].group == 0) if(m_pathNodes[l].group == 0)
@ -237,7 +237,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
typeoff = 12*type; typeoff = 12*type;
oldNumPathNodes = m_numPathNodes; oldNumPathNodes = m_numPathNodes;
oldNumLinks = m_numLinks; oldNumLinks = m_numConnections;
// Initialize map objects // Initialize map objects
for(i = 0; i < m_numMapObjects; i++) for(i = 0; i < m_numMapObjects; i++)
@ -347,7 +347,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
for(i = oldNumPathNodes; i < m_numPathNodes; i++){ for(i = oldNumPathNodes; i < m_numPathNodes; i++){
// Init link // Init link
m_pathNodes[i].numLinks = 0; m_pathNodes[i].numLinks = 0;
m_pathNodes[i].firstLink = m_numLinks; m_pathNodes[i].firstLink = m_numConnections;
// See if node connects to external nodes // See if node connects to external nodes
for(j = 0; j < TempListLength; j++){ for(j = 0; j < TempListLength; j++){
@ -356,44 +356,44 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
// Add link to other side of the external // Add link to other side of the external
if(tempnodes[j].link1 == i) if(tempnodes[j].link1 == i)
m_linkTo[m_numLinks] = tempnodes[j].link2; m_connections[m_numConnections] = tempnodes[j].link2;
else if(tempnodes[j].link2 == i) else if(tempnodes[j].link2 == i)
m_linkTo[m_numLinks] = tempnodes[j].link1; m_connections[m_numConnections] = tempnodes[j].link1;
else else
continue; continue;
dist = m_pathNodes[i].pos - m_pathNodes[m_linkTo[m_numLinks]].pos; dist = m_pathNodes[i].pos - m_pathNodes[m_connections[m_numConnections]].pos;
m_distTo[m_numLinks] = dist.Magnitude(); m_distances[m_numConnections] = dist.Magnitude();
m_linkFlags[m_numLinks] = 0; m_connectionFlags[m_numConnections] = 0;
if(type == PathTypeCar){ if(type == PathTypeCar){
// IMPROVE: use a goto here // IMPROVE: use a goto here
// Find existing navi node // Find existing car path link
for(k = 0; k < m_numNaviNodes; k++){ for(k = 0; k < m_numCarPathLinks; k++){
if(m_naviNodes[k].dirX == tempnodes[j].dirX && if(m_carPathLinks[k].dirX == tempnodes[j].dirX &&
m_naviNodes[k].dirY == tempnodes[j].dirY && m_carPathLinks[k].dirY == tempnodes[j].dirY &&
m_naviNodes[k].posX == tempnodes[j].pos.x && m_carPathLinks[k].posX == tempnodes[j].pos.x &&
m_naviNodes[k].posY == tempnodes[j].pos.y){ m_carPathLinks[k].posY == tempnodes[j].pos.y){
m_naviNodeLinks[m_numLinks] = k; m_carPathConnections[m_numConnections] = k;
k = m_numNaviNodes; k = m_numCarPathLinks;
} }
} }
// k is m_numNaviNodes+1 if we found one // k is m_numCarPathLinks+1 if we found one
if(k == m_numNaviNodes){ if(k == m_numCarPathLinks){
m_naviNodes[m_numNaviNodes].dirX = tempnodes[j].dirX; m_carPathLinks[m_numCarPathLinks].dirX = tempnodes[j].dirX;
m_naviNodes[m_numNaviNodes].dirY = tempnodes[j].dirY; m_carPathLinks[m_numCarPathLinks].dirY = tempnodes[j].dirY;
m_naviNodes[m_numNaviNodes].posX = tempnodes[j].pos.x; m_carPathLinks[m_numCarPathLinks].posX = tempnodes[j].pos.x;
m_naviNodes[m_numNaviNodes].posY = tempnodes[j].pos.y; m_carPathLinks[m_numCarPathLinks].posY = tempnodes[j].pos.y;
m_naviNodes[m_numNaviNodes].pathNodeIndex = i; m_carPathLinks[m_numCarPathLinks].pathNodeIndex = i;
m_naviNodes[m_numNaviNodes].numLeftLanes = tempnodes[j].numLeftLanes; m_carPathLinks[m_numCarPathLinks].numLeftLanes = tempnodes[j].numLeftLanes;
m_naviNodes[m_numNaviNodes].numRightLanes = tempnodes[j].numRightLanes; m_carPathLinks[m_numCarPathLinks].numRightLanes = tempnodes[j].numRightLanes;
m_naviNodes[m_numNaviNodes].trafficLightType = 0; m_carPathLinks[m_numCarPathLinks].trafficLightType = 0;
m_naviNodeLinks[m_numLinks] = m_numNaviNodes++; m_carPathConnections[m_numConnections] = m_numCarPathLinks++;
} }
} }
m_pathNodes[i].numLinks++; m_pathNodes[i].numLinks++;
m_numLinks++; m_numConnections++;
} }
// Find i inside path segment // Find i inside path segment
@ -414,9 +414,9 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
if(objectpathinfo[istart + iseg].next == jseg || if(objectpathinfo[istart + iseg].next == jseg ||
objectpathinfo[jstart + jseg].next == iseg){ objectpathinfo[jstart + jseg].next == iseg){
// Found a link between i and j // Found a link between i and j
m_linkTo[m_numLinks] = j; m_connections[m_numConnections] = j;
dist = m_pathNodes[i].pos - m_pathNodes[j].pos; dist = m_pathNodes[i].pos - m_pathNodes[j].pos;
m_distTo[m_numLinks] = dist.Magnitude(); m_distances[m_numConnections] = dist.Magnitude();
if(type == PathTypeCar){ if(type == PathTypeCar){
posx = (m_pathNodes[i].pos.x + m_pathNodes[j].pos.x)*0.5f; posx = (m_pathNodes[i].pos.x + m_pathNodes[j].pos.x)*0.5f;
@ -431,39 +431,39 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
dy = -dy; dy = -dy;
} }
// IMPROVE: use a goto here // IMPROVE: use a goto here
// Find existing navi node // Find existing car path link
for(k = 0; k < m_numNaviNodes; k++){ for(k = 0; k < m_numCarPathLinks; k++){
if(m_naviNodes[k].dirX == dx && if(m_carPathLinks[k].dirX == dx &&
m_naviNodes[k].dirY == dy && m_carPathLinks[k].dirY == dy &&
m_naviNodes[k].posX == posx && m_carPathLinks[k].posX == posx &&
m_naviNodes[k].posY == posy){ m_carPathLinks[k].posY == posy){
m_naviNodeLinks[m_numLinks] = k; m_carPathConnections[m_numConnections] = k;
k = m_numNaviNodes; k = m_numCarPathLinks;
} }
} }
// k is m_numNaviNodes+1 if we found one // k is m_numCarPathLinks+1 if we found one
if(k == m_numNaviNodes){ if(k == m_numCarPathLinks){
m_naviNodes[m_numNaviNodes].dirX = dx; m_carPathLinks[m_numCarPathLinks].dirX = dx;
m_naviNodes[m_numNaviNodes].dirY = dy; m_carPathLinks[m_numCarPathLinks].dirY = dy;
m_naviNodes[m_numNaviNodes].posX = posx; m_carPathLinks[m_numCarPathLinks].posX = posx;
m_naviNodes[m_numNaviNodes].posY = posy; m_carPathLinks[m_numCarPathLinks].posY = posy;
m_naviNodes[m_numNaviNodes].pathNodeIndex = i; m_carPathLinks[m_numCarPathLinks].pathNodeIndex = i;
m_naviNodes[m_numNaviNodes].numLeftLanes = -1; m_carPathLinks[m_numCarPathLinks].numLeftLanes = -1;
m_naviNodes[m_numNaviNodes].numRightLanes = -1; m_carPathLinks[m_numCarPathLinks].numRightLanes = -1;
m_naviNodes[m_numNaviNodes].trafficLightType = 0; m_carPathLinks[m_numCarPathLinks].trafficLightType = 0;
m_naviNodeLinks[m_numLinks] = m_numNaviNodes++; m_carPathConnections[m_numConnections] = m_numCarPathLinks++;
} }
}else{ }else{
// Crosses road // Crosses road
if(objectpathinfo[istart + iseg].next == jseg && objectpathinfo[istart + iseg].flag & 1 || if(objectpathinfo[istart + iseg].next == jseg && objectpathinfo[istart + iseg].flag & 1 ||
objectpathinfo[jstart + jseg].next == iseg && objectpathinfo[jstart + jseg].flag & 1) objectpathinfo[jstart + jseg].next == iseg && objectpathinfo[jstart + jseg].flag & 1)
m_linkFlags[m_numLinks] |= 1; m_connectionFlags[m_numConnections] |= 1;
else else
m_linkFlags[m_numLinks] &= ~1; m_connectionFlags[m_numConnections] &= ~1;
} }
m_pathNodes[i].numLinks++; m_pathNodes[i].numLinks++;
m_numLinks++; m_numConnections++;
} }
} }
} }
@ -477,35 +477,35 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
for(i = 0; i < m_numPathNodes; i++){ for(i = 0; i < m_numPathNodes; i++){
if(m_pathNodes[i].numLinks != 2) if(m_pathNodes[i].numLinks != 2)
continue; continue;
l1 = m_naviNodeLinks[m_pathNodes[i].firstLink]; l1 = m_carPathConnections[m_pathNodes[i].firstLink];
l2 = m_naviNodeLinks[m_pathNodes[i].firstLink+1]; l2 = m_carPathConnections[m_pathNodes[i].firstLink+1];
if(m_naviNodes[l1].numLeftLanes == -1 && if(m_carPathLinks[l1].numLeftLanes == -1 &&
m_naviNodes[l2].numLeftLanes != -1){ m_carPathLinks[l2].numLeftLanes != -1){
done = 0; done = 0;
if(m_naviNodes[l2].pathNodeIndex == i){ if(m_carPathLinks[l2].pathNodeIndex == i){
// why switch left and right here? // why switch left and right here?
m_naviNodes[l1].numLeftLanes = m_naviNodes[l2].numRightLanes; m_carPathLinks[l1].numLeftLanes = m_carPathLinks[l2].numRightLanes;
m_naviNodes[l1].numRightLanes = m_naviNodes[l2].numLeftLanes; m_carPathLinks[l1].numRightLanes = m_carPathLinks[l2].numLeftLanes;
}else{ }else{
m_naviNodes[l1].numLeftLanes = m_naviNodes[l2].numLeftLanes; m_carPathLinks[l1].numLeftLanes = m_carPathLinks[l2].numLeftLanes;
m_naviNodes[l1].numRightLanes = m_naviNodes[l2].numRightLanes; m_carPathLinks[l1].numRightLanes = m_carPathLinks[l2].numRightLanes;
} }
m_naviNodes[l1].pathNodeIndex = i; m_carPathLinks[l1].pathNodeIndex = i;
}else if(m_naviNodes[l1].numLeftLanes != -1 && }else if(m_carPathLinks[l1].numLeftLanes != -1 &&
m_naviNodes[l2].numLeftLanes == -1){ m_carPathLinks[l2].numLeftLanes == -1){
done = 0; done = 0;
if(m_naviNodes[l1].pathNodeIndex == i){ if(m_carPathLinks[l1].pathNodeIndex == i){
// why switch left and right here? // why switch left and right here?
m_naviNodes[l2].numLeftLanes = m_naviNodes[l1].numRightLanes; m_carPathLinks[l2].numLeftLanes = m_carPathLinks[l1].numRightLanes;
m_naviNodes[l2].numRightLanes = m_naviNodes[l1].numLeftLanes; m_carPathLinks[l2].numRightLanes = m_carPathLinks[l1].numLeftLanes;
}else{ }else{
m_naviNodes[l2].numLeftLanes = m_naviNodes[l1].numLeftLanes; m_carPathLinks[l2].numLeftLanes = m_carPathLinks[l1].numLeftLanes;
m_naviNodes[l2].numRightLanes = m_naviNodes[l1].numRightLanes; m_carPathLinks[l2].numRightLanes = m_carPathLinks[l1].numRightLanes;
} }
m_naviNodes[l2].pathNodeIndex = i; m_carPathLinks[l2].pathNodeIndex = i;
}else if(m_naviNodes[l1].numLeftLanes == -1 && }else if(m_carPathLinks[l1].numLeftLanes == -1 &&
m_naviNodes[l2].numLeftLanes == -1) m_carPathLinks[l2].numLeftLanes == -1)
done = 0; done = 0;
} }
} }
@ -513,11 +513,11 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
// Fall back to default values for number of lanes // Fall back to default values for number of lanes
for(i = 0; i < m_numPathNodes; i++) for(i = 0; i < m_numPathNodes; i++)
for(j = 0; j < m_pathNodes[i].numLinks; j++){ for(j = 0; j < m_pathNodes[i].numLinks; j++){
k = m_naviNodeLinks[m_pathNodes[i].firstLink + j]; k = m_carPathConnections[m_pathNodes[i].firstLink + j];
if(m_naviNodes[k].numLeftLanes < 0) if(m_carPathLinks[k].numLeftLanes < 0)
m_naviNodes[k].numLeftLanes = 1; m_carPathLinks[k].numLeftLanes = 1;
if(m_naviNodes[k].numRightLanes < 0) if(m_carPathLinks[k].numRightLanes < 0)
m_naviNodes[k].numRightLanes = 1; m_carPathLinks[k].numRightLanes = 1;
} }
} }
@ -532,7 +532,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
if((m_pathNodes[i].flags & PathNodeDeadEnd) == 0){ if((m_pathNodes[i].flags & PathNodeDeadEnd) == 0){
k = 0; k = 0;
for(j = 0; j < m_pathNodes[i].numLinks; j++) for(j = 0; j < m_pathNodes[i].numLinks; j++)
if((m_pathNodes[m_linkTo[m_pathNodes[i].firstLink + j]].flags & PathNodeDeadEnd) == 0) if((m_pathNodes[m_connections[m_pathNodes[i].firstLink + j]].flags & PathNodeDeadEnd) == 0)
k++; k++;
if(k < 2){ if(k < 2){
m_pathNodes[i].flags |= PathNodeDeadEnd; m_pathNodes[i].flags |= PathNodeDeadEnd;
@ -554,9 +554,9 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
m_pathNodes[j] = m_pathNodes[j+1]; m_pathNodes[j] = m_pathNodes[j+1];
// Fix links // Fix links
for(j = oldNumLinks; j < m_numLinks; j++) for(j = oldNumLinks; j < m_numConnections; j++)
if(m_linkTo[j] >= i) if(m_connections[j] >= i)
m_linkTo[j]--; m_connections[j]--;
// Also in treadables // Also in treadables
for(j = 0; j < m_numMapObjects; j++) for(j = 0; j < m_numMapObjects; j++)

View file

@ -40,8 +40,7 @@ struct CPathNode
*/ */
}; };
// TODO: name? struct CCarPathLink
struct NaviNode
{ {
float posX; float posX;
float posY; float posY;
@ -51,8 +50,8 @@ struct NaviNode
int8 numLeftLanes; int8 numLeftLanes;
int8 numRightLanes; int8 numRightLanes;
int8 trafficLightType; int8 trafficLightType;
// probably only padding
int8 field15; int8 field15;
// probably only padding
int8 field16; int8 field16;
int8 field17; int8 field17;
}; };
@ -93,28 +92,28 @@ class CPathFind
public: public:
/* For reference VC: /* For reference VC:
CPathNode pathNodes[9650]; CPathNode pathNodes[9650];
NaviNode naviNodes[3500]; CCarPathLink m_carPathLinks[3500];
CBuilding *mapObjects[1250]; CBuilding *m_mapObjects[1250];
// 0x8000 is cross road flag // 0x8000 is cross road flag
// 0x4000 is traffic light flag // 0x4000 is traffic light flag
uint16 linkTo[20400]; uint16 m_connections[20400];
uint8 distTo[20400]; uint8 m_distances[20400];
int16 naviNodeLinks[20400]; int16 m_carPathConnections[20400];
*/ */
CPathNode m_pathNodes[4930]; CPathNode m_pathNodes[4930];
NaviNode m_naviNodes[2076]; CCarPathLink m_carPathLinks[2076];
CTreadable *m_mapObjects[1250]; CTreadable *m_mapObjects[1250];
uint8 m_objectFlags[1250]; uint8 m_objectFlags[1250];
int16 m_linkTo[10260]; int16 m_connections[10260];
int16 m_distTo[10260]; int16 m_distances[10260];
uint8 m_linkFlags[10260]; uint8 m_connectionFlags[10260];
int16 m_naviNodeLinks[10260]; int16 m_carPathConnections[10260];
int32 m_numPathNodes; int32 m_numPathNodes;
int32 m_numCarPathNodes; int32 m_numCarPathNodes;
int32 m_numPedPathNodes; int32 m_numPedPathNodes;
int16 m_numMapObjects; int16 m_numMapObjects;
int16 m_numLinks; int16 m_numConnections;
int32 m_numNaviNodes; int32 m_numCarPathLinks;
int32 h; int32 h;
uint8 m_numGroups[2]; uint8 m_numGroups[2];
CPathNode m_aExtraPaths[872]; CPathNode m_aExtraPaths[872];