@ -37,6 +37,7 @@
case A2VRI_RAILTYPE_SIGNAL_RESTRICTION_INFO : return 0 ;
case A2VRI_RAILTYPE_SIGNAL_RESTRICTION_INFO : return 0 ;
case A2VRI_RAILTYPE_SIGNAL_CONTEXT : return this - > signal_context ;
case A2VRI_RAILTYPE_SIGNAL_CONTEXT : return this - > signal_context ;
case A2VRI_RAILTYPE_SIGNAL_SIDE : return GetNewSignalsSideVariable ( ) ;
case A2VRI_RAILTYPE_SIGNAL_SIDE : return GetNewSignalsSideVariable ( ) ;
case A2VRI_RAILTYPE_SIGNAL_VERTICAL_CLEARANCE : return 0xFF ;
}
}
}
}
@ -62,6 +63,8 @@
return GetNewSignalsSignalContext ( this - > signal_context , this - > tile ) ;
return GetNewSignalsSignalContext ( this - > signal_context , this - > tile ) ;
case A2VRI_RAILTYPE_SIGNAL_SIDE :
case A2VRI_RAILTYPE_SIGNAL_SIDE :
return GetNewSignalsSideVariable ( ) ;
return GetNewSignalsSideVariable ( ) ;
case A2VRI_RAILTYPE_SIGNAL_VERTICAL_CLEARANCE :
return GetNewSignalsVerticalClearanceInfo ( this - > tile , this - > z ) ;
}
}
DEBUG ( grf , 1 , " Unhandled rail type tile variable 0x%X " , variable ) ;
DEBUG ( grf , 1 , " Unhandled rail type tile variable 0x%X " , variable ) ;
@ -89,10 +92,12 @@ uint32 RailTypeResolverObject::GetDebugID() const
* @ param param1 Extra parameter ( first parameter of the callback , except railtypes do not have callbacks ) .
* @ param param1 Extra parameter ( first parameter of the callback , except railtypes do not have callbacks ) .
* @ param param2 Extra parameter ( second parameter of the callback , except railtypes do not have callbacks ) .
* @ param param2 Extra parameter ( second parameter of the callback , except railtypes do not have callbacks ) .
* @ param signal_context Signal context .
* @ param signal_context Signal context .
* @ param z Signal pixel z .
* @ param prog Routing restriction program .
* @ param prog Routing restriction program .
*/
*/
RailTypeResolverObject : : RailTypeResolverObject ( const RailtypeInfo * rti , TileIndex tile , TileContext context , RailTypeSpriteGroup rtsg , uint32 param1 , uint32 param2 , CustomSignalSpriteContext signal_context , const TraceRestrictProgram * prog )
RailTypeResolverObject : : RailTypeResolverObject ( const RailtypeInfo * rti , TileIndex tile , TileContext context , RailTypeSpriteGroup rtsg , uint32 param1 , uint32 param2 ,
: ResolverObject ( rti ! = nullptr ? rti - > grffile [ rtsg ] : nullptr , CBID_NO_CALLBACK , param1 , param2 ) , railtype_scope ( * this , rti , tile , context , signal_context , prog )
CustomSignalSpriteContext signal_context , const TraceRestrictProgram * prog , uint z )
: ResolverObject ( rti ! = nullptr ? rti - > grffile [ rtsg ] : nullptr , CBID_NO_CALLBACK , param1 , param2 ) , railtype_scope ( * this , rti , tile , context , signal_context , prog , z )
{
{
this - > root_spritegroup = rti ! = nullptr ? rti - > group [ rtsg ] : nullptr ;
this - > root_spritegroup = rti ! = nullptr ? rti - > group [ rtsg ] : nullptr ;
}
}
@ -135,7 +140,8 @@ inline uint8 RemapAspect(uint8 aspect, uint8 extra_aspects, uint8 style)
return aspect + 1 ;
return aspect + 1 ;
}
}
static PalSpriteID GetRailTypeCustomSignalSprite ( const RailtypeInfo * rti , TileIndex tile , SignalType type , SignalVariant var , uint8 aspect , CustomSignalSpriteContext context , const TraceRestrictProgram * prog )
static PalSpriteID GetRailTypeCustomSignalSprite ( const RailtypeInfo * rti , TileIndex tile , SignalType type , SignalVariant var , uint8 aspect ,
CustomSignalSpriteContext context , const TraceRestrictProgram * prog , uint z )
{
{
if ( rti - > group [ RTSG_SIGNALS ] = = nullptr ) return { 0 , PAL_NONE } ;
if ( rti - > group [ RTSG_SIGNALS ] = = nullptr ) return { 0 , PAL_NONE } ;
if ( type = = SIGTYPE_PROG & & ! HasBit ( rti - > ctrl_flags , RTCF_PROGSIG ) ) return { 0 , PAL_NONE } ;
if ( type = = SIGTYPE_PROG & & ! HasBit ( rti - > ctrl_flags , RTCF_PROGSIG ) ) return { 0 , PAL_NONE } ;
@ -144,7 +150,7 @@ static PalSpriteID GetRailTypeCustomSignalSprite(const RailtypeInfo *rti, TileIn
uint32 param1 = ( context = = CSSC_GUI ) ? 0x10 : 0x00 ;
uint32 param1 = ( context = = CSSC_GUI ) ? 0x10 : 0x00 ;
uint32 param2 = ( type < < 16 ) | ( var < < 8 ) | RemapAspect ( aspect , rti - > signal_extra_aspects , 0 ) ;
uint32 param2 = ( type < < 16 ) | ( var < < 8 ) | RemapAspect ( aspect , rti - > signal_extra_aspects , 0 ) ;
if ( ( prog ! = nullptr ) & & HasBit ( rti - > ctrl_flags , RTCF_RESTRICTEDSIG ) ) SetBit ( param2 , 24 ) ;
if ( ( prog ! = nullptr ) & & HasBit ( rti - > ctrl_flags , RTCF_RESTRICTEDSIG ) ) SetBit ( param2 , 24 ) ;
RailTypeResolverObject object ( rti , tile , TCX_NORMAL , RTSG_SIGNALS , param1 , param2 , context , prog );
RailTypeResolverObject object ( rti , tile , TCX_NORMAL , RTSG_SIGNALS , param1 , param2 , context , prog , z );
const SpriteGroup * group = object . Resolve ( ) ;
const SpriteGroup * group = object . Resolve ( ) ;
if ( group = = nullptr | | group - > GetNumResults ( ) = = 0 ) return { 0 , PAL_NONE } ;
if ( group = = nullptr | | group - > GetNumResults ( ) = = 0 ) return { 0 , PAL_NONE } ;
@ -163,12 +169,13 @@ static PalSpriteID GetRailTypeCustomSignalSprite(const RailtypeInfo *rti, TileIn
* @ param gui Is the sprite being used on the map or in the GUI ?
* @ param gui Is the sprite being used on the map or in the GUI ?
* @ return The sprite to draw .
* @ return The sprite to draw .
*/
*/
CustomSignalSpriteResult GetCustomSignalSprite ( const RailtypeInfo * rti , TileIndex tile , SignalType type , SignalVariant var , uint8 aspect , CustomSignalSpriteContext context , uint8 style , const TraceRestrictProgram * prog )
CustomSignalSpriteResult GetCustomSignalSprite ( const RailtypeInfo * rti , TileIndex tile , SignalType type , SignalVariant var , uint8 aspect ,
CustomSignalSpriteContext context , uint8 style , const TraceRestrictProgram * prog , uint z )
{
{
if ( _settings_client . gui . show_all_signal_default & & style = = 0 ) return { { 0 , PAL_NONE } , false } ;
if ( _settings_client . gui . show_all_signal_default & & style = = 0 ) return { { 0 , PAL_NONE } , false } ;
if ( style = = 0 ) {
if ( style = = 0 ) {
PalSpriteID spr = GetRailTypeCustomSignalSprite ( rti , tile , type , var , aspect , context , prog );
PalSpriteID spr = GetRailTypeCustomSignalSprite ( rti , tile , type , var , aspect , context , prog , z );
if ( spr . sprite ! = 0 ) return { spr , HasBit ( rti - > ctrl_flags , RTCF_RESTRICTEDSIG ) } ;
if ( spr . sprite ! = 0 ) return { spr , HasBit ( rti - > ctrl_flags , RTCF_RESTRICTEDSIG ) } ;
}
}
@ -182,7 +189,7 @@ CustomSignalSpriteResult GetCustomSignalSprite(const RailtypeInfo *rti, TileInde
uint32 param1 = ( context = = CSSC_GUI ) ? 0x10 : 0x00 ;
uint32 param1 = ( context = = CSSC_GUI ) ? 0x10 : 0x00 ;
uint32 param2 = ( type < < 16 ) | ( var < < 8 ) | RemapAspect ( aspect , grf - > new_signal_extra_aspects , style ) ;
uint32 param2 = ( type < < 16 ) | ( var < < 8 ) | RemapAspect ( aspect , grf - > new_signal_extra_aspects , style ) ;
if ( ( prog ! = nullptr ) & & HasBit ( grf - > new_signal_ctrl_flags , NSCF_RESTRICTEDSIG ) ) SetBit ( param2 , 24 ) ;
if ( ( prog ! = nullptr ) & & HasBit ( grf - > new_signal_ctrl_flags , NSCF_RESTRICTEDSIG ) ) SetBit ( param2 , 24 ) ;
NewSignalsResolverObject object ( grf , tile , TCX_NORMAL , param1 , param2 , context , style , prog );
NewSignalsResolverObject object ( grf , tile , TCX_NORMAL , param1 , param2 , context , style , prog , z );
const SpriteGroup * group = object . Resolve ( ) ;
const SpriteGroup * group = object . Resolve ( ) ;
if ( group ! = nullptr & & group - > GetNumResults ( ) ! = 0 ) {
if ( group ! = nullptr & & group - > GetNumResults ( ) ! = 0 ) {