Fix special line highlighting in minimap (more closely matches automap).
This commit is contained in:
parent
e30df13c2f
commit
42905bf24d
2 changed files with 71 additions and 10 deletions
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r295 \cu(Sun 21 Feb 21:26:05 CET 2021)\c-";
|
||||
SWWM_SHORTVER="\cw0.9.11b-pre r295 \cu(2021-02-21 21:26:05)\c-";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r296 \cu(Sun 21 Feb 21:57:37 CET 2021)\c-";
|
||||
SWWM_SHORTVER="\cw0.9.11b-pre r296 \cu(2021-02-21 21:57:37)\c-";
|
||||
|
|
|
|||
|
|
@ -830,16 +830,77 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
}
|
||||
|
||||
// minimap helper code
|
||||
private bool ShouldDisplaySpecial( int special )
|
||||
{
|
||||
// thanks graf/randi/whoever
|
||||
switch ( special )
|
||||
{
|
||||
// the following have (max_args < 0)
|
||||
// but we can't know this from zscript, so they're hardcoded here
|
||||
case Polyobj_StartLine:
|
||||
case Polyobj_ExplicitLine:
|
||||
case Transfer_WallLight:
|
||||
case Sector_Attach3dMidtex:
|
||||
case ExtraFloor_LightOnly:
|
||||
case Sector_CopyScroller:
|
||||
case Scroll_Texture_Left:
|
||||
case Scroll_Texture_Right:
|
||||
case Scroll_Texture_Up:
|
||||
case Scroll_Texture_Down:
|
||||
case Plane_Copy:
|
||||
case Line_SetIdentification:
|
||||
case Line_SetPortal:
|
||||
case Sector_Set3DFloor:
|
||||
case Sector_SetContents:
|
||||
case Plane_Align:
|
||||
case Static_Init:
|
||||
case Transfer_Heights:
|
||||
case Transfer_FloorLight:
|
||||
case Transfer_CeilingLight:
|
||||
case Scroll_Texture_Model:
|
||||
case Scroll_Texture_Offsets:
|
||||
case PointPush_SetForce:
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool CheckSectorAction( Sector s, out int special, bool useonly )
|
||||
{
|
||||
for ( Actor act=s.SecActTarget; act; act=act.tracer )
|
||||
{
|
||||
if ( (act.Health&(SectorAction.SECSPAC_Use|SectorAction.SECSPAC_UseWall) || !useonly)
|
||||
&& act.special && !act.bFRIENDLY )
|
||||
{
|
||||
special = act.special;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool RealLineSpecial( Line l, out int special )
|
||||
{
|
||||
if ( special && l.activation&SPAC_PlayerActivate )
|
||||
return true;
|
||||
if ( CheckSectorAction(l.frontsector,special,!l.backsector) )
|
||||
return true;
|
||||
return (l.backsector && CheckSectorAction(l.backsector,special,false));
|
||||
}
|
||||
|
||||
private bool ShowTriggerLine( Line l )
|
||||
{
|
||||
if ( am_showtriggerlines == 0 ) return false;
|
||||
if ( am_showtriggerlines >= 2 ) return true;
|
||||
if ( (l.special == Door_Open)
|
||||
|| (l.special == Door_Close)
|
||||
|| (l.special == Door_CloseWaitOpen)
|
||||
|| (l.special == Door_Raise)
|
||||
|| (l.special == Door_Animated)
|
||||
|| (l.special == Generic_Door) )
|
||||
int special = l.special;
|
||||
if ( !RealLineSpecial(l,special) ) return false;
|
||||
if ( !ShouldDisplaySpecial(special) ) return false;
|
||||
if ( special && (am_showtriggerlines >= 2) ) return true;
|
||||
if ( !special || (special == Door_Open)
|
||||
|| (special == Door_Close)
|
||||
|| (special == Door_CloseWaitOpen)
|
||||
|| (special == Door_Raise)
|
||||
|| (special == Door_Animated)
|
||||
|| (special == Generic_Door) )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
@ -934,7 +995,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
col = am_intralevelcolor;
|
||||
else if ( (lock > 1) && (lock < 256) && SWWMUtility.IsValidLockNum(lock) )
|
||||
col = SWWMUtility.GetLockColor(lock);
|
||||
else if ( (l.activation&SPAC_PlayerActivate) && l.special && ShowTriggerLine(l) )
|
||||
else if ( ShowTriggerLine(l) )
|
||||
col = am_specialwallcolor;
|
||||
else if ( l.frontsector && l.backsector )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue