mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Factor out high-level point inserting code into M32_InsertPoint().
This function only handles the actual insertion, also taking care of constrained TROR walls. Anything around the inserting such as backing up drawn walls or snapping the x/y position to the grid is handled outside. git-svn-id: https://svn.eduke32.com/eduke32@2123 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
39314586ac
commit
2d308625ff
1 changed files with 92 additions and 66 deletions
|
@ -421,6 +421,8 @@ static void reset_default_mapstate(void)
|
||||||
|
|
||||||
static void m32_keypresscallback(int32_t code, int32_t downp)
|
static void m32_keypresscallback(int32_t code, int32_t downp)
|
||||||
{
|
{
|
||||||
|
UNREFERENCED_PARAMETER(downp);
|
||||||
|
|
||||||
g_iReturnVar = code;
|
g_iReturnVar = code;
|
||||||
VM_OnEvent(EVENT_KEYPRESS, -1);
|
VM_OnEvent(EVENT_KEYPRESS, -1);
|
||||||
}
|
}
|
||||||
|
@ -2548,6 +2550,79 @@ static int32_t bakframe_fillandfade(char **origframeptr, int32_t sectnum, const
|
||||||
return ask_if_sure(querystr, 0);
|
return ask_if_sure(querystr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// high-level insert point, handles TROR constrained walls too
|
||||||
|
// onewnumwalls: old numwalls + drawn walls
|
||||||
|
static int32_t M32_InsertPoint(int32_t thewall, int32_t dax, int32_t day, int32_t onewnumwalls)
|
||||||
|
{
|
||||||
|
#ifdef YAX_ENABLE
|
||||||
|
int32_t nextw = wall[thewall].nextwall;
|
||||||
|
int32_t i, j, k, m, tmpcf;
|
||||||
|
|
||||||
|
if (yax_islockedwall(thewall) || (nextw>=0 && yax_islockedwall(nextw)))
|
||||||
|
{
|
||||||
|
// yax'ed wall -- first find out which walls are affected
|
||||||
|
for (i=0; i<numwalls; i++)
|
||||||
|
wall[i].cstat &= ~(1<<14);
|
||||||
|
|
||||||
|
// round 1
|
||||||
|
for (YAX_ITER_WALLS(thewall, i, tmpcf))
|
||||||
|
wall[i].cstat |= (1<<14);
|
||||||
|
if (nextw >= 0)
|
||||||
|
for (YAX_ITER_WALLS(nextw, i, tmpcf))
|
||||||
|
wall[i].cstat |= (1<<14);
|
||||||
|
// round 2 (enough?)
|
||||||
|
for (YAX_ITER_WALLS(thewall, i, tmpcf))
|
||||||
|
if (wall[i].nextwall >= 0 && (wall[wall[i].nextwall].cstat&(1<<14))==0)
|
||||||
|
wall[wall[i].nextwall].cstat |= (1<<14);
|
||||||
|
if (nextw >= 0)
|
||||||
|
for (YAX_ITER_WALLS(nextw, i, tmpcf))
|
||||||
|
if (wall[i].nextwall >= 0 && (wall[wall[i].nextwall].cstat&(1<<14))==0)
|
||||||
|
wall[wall[i].nextwall].cstat |= (1<<14);
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
for (i=0; i<numwalls; i++)
|
||||||
|
j += !!(wall[i].cstat&(1<<14));
|
||||||
|
if (max(numwalls,onewnumwalls)+j > MAXWALLS)
|
||||||
|
{
|
||||||
|
return 0; // no points inserted, would exceed limits
|
||||||
|
}
|
||||||
|
m = 0;
|
||||||
|
for (i=0; i<numwalls; i++)
|
||||||
|
{
|
||||||
|
if (wall[i].cstat&(1<<14))
|
||||||
|
if (wall[i].nextwall<0 || i<wall[i].nextwall) // || !(NEXTWALL(i).cstat&(1<<14)) ??
|
||||||
|
{
|
||||||
|
m += insertpoint(i, dax,day);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<numwalls; i++)
|
||||||
|
{
|
||||||
|
if (wall[i].cstat&(1<<14))
|
||||||
|
{
|
||||||
|
wall[i].cstat &= ~(1<<14);
|
||||||
|
k = yax_getnextwall(i+1, YAX_CEILING);
|
||||||
|
if (k >= 0)
|
||||||
|
yax_setnextwall(i+1, YAX_CEILING, k+1);
|
||||||
|
k = yax_getnextwall(i+1, YAX_FLOOR);
|
||||||
|
if (k >= 0)
|
||||||
|
yax_setnextwall(i+1, YAX_FLOOR, k+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m==j)
|
||||||
|
return m;
|
||||||
|
else
|
||||||
|
return m|(j<<16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
insertpoint(thewall, dax,day);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void overheadeditor(void)
|
void overheadeditor(void)
|
||||||
{
|
{
|
||||||
|
@ -6475,84 +6550,35 @@ point_not_inserted:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef YAX_ENABLE
|
int32_t insdpoints = M32_InsertPoint(linehighlight, dax, day, onewnumwalls);
|
||||||
int32_t nextw = wall[linehighlight].nextwall;
|
|
||||||
int32_t tmpcf;
|
|
||||||
|
|
||||||
if (yax_islockedwall(linehighlight) || (nextw>=0 && yax_islockedwall(nextw)))
|
if (insdpoints == 0)
|
||||||
{
|
{
|
||||||
// yax'ed wall -- first find out which walls are affected
|
printmessage16("Inserting points would exceed wall limit.");
|
||||||
for (i=0; i<numwalls; i++)
|
goto end_insert_points;
|
||||||
wall[i].cstat &= ~(1<<14);
|
|
||||||
|
|
||||||
// round 1
|
|
||||||
for (YAX_ITER_WALLS(linehighlight, i, tmpcf))
|
|
||||||
wall[i].cstat |= (1<<14);
|
|
||||||
if (nextw >= 0)
|
|
||||||
for (YAX_ITER_WALLS(nextw, i, tmpcf))
|
|
||||||
wall[i].cstat |= (1<<14);
|
|
||||||
// round 2 (enough?)
|
|
||||||
for (YAX_ITER_WALLS(linehighlight, i, tmpcf))
|
|
||||||
if (wall[i].nextwall >= 0 && (wall[wall[i].nextwall].cstat&(1<<14))==0)
|
|
||||||
wall[wall[i].nextwall].cstat |= (1<<14);
|
|
||||||
if (nextw >= 0)
|
|
||||||
for (YAX_ITER_WALLS(nextw, i, tmpcf))
|
|
||||||
if (wall[i].nextwall >= 0 && (wall[wall[i].nextwall].cstat&(1<<14))==0)
|
|
||||||
wall[wall[i].nextwall].cstat |= (1<<14);
|
|
||||||
|
|
||||||
j = 0;
|
|
||||||
for (i=0; i<numwalls; i++)
|
|
||||||
j += !!(wall[i].cstat&(1<<14));
|
|
||||||
if (max(numwalls,onewnumwalls)+j > MAXWALLS)
|
|
||||||
{
|
|
||||||
printmessage16("Inserting points would exceed wall limit.");
|
|
||||||
goto end_insert_points;
|
|
||||||
}
|
|
||||||
m = 0;
|
|
||||||
for (i=0; i<numwalls; i++)
|
|
||||||
{
|
|
||||||
if (wall[i].cstat&(1<<14))
|
|
||||||
if (wall[i].nextwall<0 || i<wall[i].nextwall) // || !(NEXTWALL(i).cstat&(1<<14)) ??
|
|
||||||
{
|
|
||||||
m += insertpoint(i, dax,day);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<numwalls; i++)
|
|
||||||
{
|
|
||||||
if (wall[i].cstat&(1<<14))
|
|
||||||
{
|
|
||||||
wall[i].cstat &= ~(1<<14);
|
|
||||||
k = yax_getnextwall(i+1, YAX_CEILING);
|
|
||||||
if (k >= 0)
|
|
||||||
yax_setnextwall(i+1, YAX_CEILING, k+1);
|
|
||||||
k = yax_getnextwall(i+1, YAX_FLOOR);
|
|
||||||
if (k >= 0)
|
|
||||||
yax_setnextwall(i+1, YAX_FLOOR, k+1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mkonwinvalid();
|
|
||||||
if (m==j)
|
|
||||||
message("Inserted %d points for constrained wall.", m);
|
|
||||||
else
|
|
||||||
message("Inserted %d points for constrained wall (expected %d, WTF?).", m, j);
|
|
||||||
}
|
}
|
||||||
else
|
else if (insdpoints == 1)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
insertpoint(linehighlight, dax,day);
|
|
||||||
mkonwinvalid();
|
|
||||||
printmessage16("Point inserted.");
|
printmessage16("Point inserted.");
|
||||||
}
|
}
|
||||||
|
else if (insdpoints > 1 && insdpoints < 65536)
|
||||||
|
{
|
||||||
|
message("Inserted %d points for constrained wall.", insdpoints);
|
||||||
|
}
|
||||||
|
else // insdpoints >= 65536
|
||||||
|
{
|
||||||
|
message("Inserted %d points for constrained wall (expected %d, WTF?).",
|
||||||
|
insdpoints&65535, insdpoints>>16);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
yax_updategrays(pos.z);
|
yax_updategrays(pos.z);
|
||||||
#endif
|
#endif
|
||||||
|
mkonwinvalid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef YAX_ENABLE
|
|
||||||
end_insert_points:
|
end_insert_points:
|
||||||
#endif
|
|
||||||
backup_drawn_walls(1);
|
backup_drawn_walls(1);
|
||||||
|
|
||||||
asksave = 1;
|
asksave = 1;
|
||||||
|
|
Loading…
Reference in a new issue