@@ -14,7 +14,7 @@ TROLLEY_IMAGE = TROLLEY_IMAGE_ASSET.readall()
1414TROLLEY_IMAGE_2X = TROLLEY_IMAGE_2X_ASSET .readall ()
1515
1616SEPTA_API = "https://www3.septa.org/api/TransitView/index.php?route=G1"
17- TROLLEY_STOPS = {"21481" : "Haverford Av & 63rd St" , "12196" : "Richmond St & Allegheny Av" , "650" : "Richmond St & Cumberland St" , "20984" : "Richmond St & Huntingdon St" , "21071" : "Girard Av & 26th St" , "30292" : "Girard Av & 34th St - MBFS" , "21035" : "Girard Av & 54th St" , "21100" : "Girard Av & Columbia Av" , "21081" : "Girard Av & Ridge Av" , "21005" : "Girard Av & 16th St" , "21021" : "Girard Av & 31st St" , "21061" : "Girard Av & 42nd St" , "21030" : "Girard Av & 49th St" , "21038" : "Girard Av & 57th St" , "20983" : "Richmond St & Lehigh Av" , "21033" : "Girard Av & 52nd St" , "21051" : "Girard Av & 56th St" , "21040" : "Girard Av & 60th St" , "20986" : "Girard Av & Berks St" , "21042" : "Haverford Av & 62nd St" , "649" : "Richmond St & Cumberland St" , "21086" : "Girard Av & 12th St" , "21070" : "Girard Av & 27th St" , "21018" : "Girard Av & 28th St" , "21022" : "Girard Av & 33rd St" , "20995" : "Girard Av & 4th St" , "21032" : "Girard Av & 51st St" , "21050" : "Girard Av & 57th St" , "21028" : "Girard Av & Belmont Av" , "24038" : "Frankford Av & Richmond St" , "21108" : "Richmond St & Lehigh Av" , "21016" : "Girard Av & 26th St" , "21069" : "Girard Av & 28th St" , "20993" : "Girard Av & 2nd St" , "21098" : "Girard Av & Frankford Av- FS" , "20978" : "Girard Av & Front St" , "30605" : "Girard Av & Merion Av" , "21105" : "Girard Av & Richmond St" , "31540" : "Frankford Av & Girard Av - FS" , "21110" : "Richmond St & Cambria St" , "21001" : "Girard Av & 11th St" , "21068" : "Girard Av & 29th St" , "30291" : "Girard Av & 34th St - MBFS" , "344" : "Girard Av & 40th St - FS" , "21101" : "Girard Av & Palmer St" , "20982" : "Richmond St & Cambria St" , "21113" : "Richmond St & Clearfield St" , "21075" : "College Av & 24th St - FS" , "21017" : "Girard Av & 27th St" , "21067" : "Girard Av & 31st St" , "21025" : "Girard Av & 39th St" , "21062" : "Girard Av & 41st St" , "21055" : "Girard Av & 52nd St" , "31443" : "Girard Av & 62nd St" , "21091" : "Girard Av & 7th St" , "21078" : "Girard Av & Corinthian Av" , "342" : "Girard Av & Front St" , "30550" : "Girard Av & Merion Av" , "21008" : "Girard Av & Ridge Av" , "21073" : "Poplar St & Stillman St" , "31347" : "Frankford Av & Delaware Av Loop" , "21087" : "Girard Av & 11th St" , "21006" : "Girard Av & 17th St" , "30290" : "Girard Av & 19th St" , "21009" : "Girard Av & 20th St" , "21063" : "Girard Av & 39th St" , "21044" : "Girard Av & 63rd St - MBFS" , "21072" : "26th St & Poplar St" , "30791" : "Girard Av & 24th St" , "349" : "Girard Av & 59th St" , "20996" : "Girard Av & 5th St" , "21093" : "Girard Av & 5th St" , "20998" : "Girard Av & 7th St" , "20999" : "Girard Av & 8th St" , "20979" : "Richmond St & Clearfield St" , "21114" : "Richmond St & Allegheny Av" , "21079" : "Girard Av & 20th St" , "21026" : "Girard Av & 41st St" , "21037" : "Girard Av & 56th St" , "345" : "Girard Av & 59th St" , "21090" : "Girard Av & 8th St" , "343" : "Girard Av & Broad St" , "352" : "Girard Av & Broad St" , "20989" : "Girard Av & Columbia Av" , "21014" : "Poplar St & 25th St" , "481" : "Frankford Av & Girard Av" , "21111" : "Richmond St & Ann St" , "21107" : "Richmond St & Huntingdon St" , "21082" : "Girard Av & 17th St" , "21080" : "Girard Av & 19th St" , "21053" : "Girard Av & 54th St" , "20981" : "Richmond St & Ann St" , "25779" : "Richmond St & Girard Av" , "21019" : "Girard Av & 29th St" , "21095" : "Girard Av & 3rd St" , "21048" : "Girard Av & 60th St" , "21103" : "Girard Av & Berks St" , "21058" : "Girard Av & Lancaster Av" , "12218" : "Richmond St & Somerset St" , "21041" : "Haverford Av & 61st St" , "21083" : "Girard Av & 16th St" , "21010" : "Girard Av & Corinthian Av" , "20988" : "Girard Av & Palmer St" , "341" : "Richmond St & Westmoreland St Loop" , "21002" : "Girard Av & 12th St" , "21096" : "Girard Av & 2nd St" , "20994" : "Girard Av & 3rd St" , "350" : "Girard Av & 40th St" , "23992" : "Frankford Av & Richmond St" , "21109" : "Richmond St & Somerset St" , "21027" : "Girard Av & 42nd St" , "21056" : "Girard Av & 51st St" , "21047" : "Girard Av & 61st St" , "21060" : "Girard Av & Belmont Av - FS" }
17+ TROLLEY_STOPS = {"21481" : "Haverford Av & 63rd St" , "12196" : "Richmond St & Allegheny Av" , "650" : "Richmond St & Cumberland St" , "20984" : "Richmond St & Huntingdon St" , "21071" : "Girard Av & 26th St" , "30292" : "Girard Av & 34th St - MBFS" , "21035" : "Girard Av & 54th St" , "21100" : "Girard Av & Columbia Av" , "21081" : "Girard Av & Ridge Av" , "21005" : "Girard Av & 16th St" , "21021" : "Girard Av & 31st St" , "21061" : "Girard Av & 42nd St" , "21030" : "Girard Av & 49th St" , "21038" : "Girard Av & 57th St" , "20983" : "Richmond St & Lehigh Av" , "21033" : "Girard Av & 52nd St" , "21051" : "Girard Av & 56th St" , "21040" : "Girard Av & 60th St" , "20986" : "Girard Av & Berks St" , "21042" : "Haverford Av & 62nd St" , "649" : "Richmond St & Cumberland St" , "21086" : "Girard Av & 12th St" , "21070" : "Girard Av & 27th St" , "21018" : "Girard Av & 28th St" , "21022" : "Girard Av & 33rd St" , "20995" : "Girard Av & 4th St" , "21032" : "Girard Av & 51st St" , "21050" : "Girard Av & 56th St" , "21028" : "Girard Av & Belmont Av" , "24038" : "Frankford Av & Richmond St" , "21108" : "Richmond St & Lehigh Av" , "21016" : "Girard Av & 26th St" , "21069" : "Girard Av & 28th St" , "20993" : "Girard Av & 2nd St" , "21098" : "Girard Av & Frankford Av- FS" , "20978" : "Girard Av & Front St" , "30605" : "Girard Av & Merion Av" , "21105" : "Girard Av & Richmond St" , "31540" : "Frankford Av & Girard Av - FS" , "21110" : "Richmond St & Cambria St" , "21001" : "Girard Av & 11th St" , "21068" : "Girard Av & 29th St" , "30291" : "Girard Av & 34th St - MBFS" , "344" : "Girard Av & 40th St - FS" , "21101" : "Girard Av & Palmer St" , "20982" : "Richmond St & Cambria St" , "21113" : "Richmond St & Clearfield St" , "21075" : "College Av & 24th St - FS" , "21017" : "Girard Av & 27th St" , "21067" : "Girard Av & 31st St" , "21025" : "Girard Av & 39th St" , "21062" : "Girard Av & 41st St" , "21055" : "Girard Av & 52nd St" , "31443" : "Girard Av & 62nd St" , "21091" : "Girard Av & 7th St" , "21078" : "Girard Av & Corinthian Av" , "342" : "Girard Av & Front St" , "30550" : "Girard Av & Merion Av" , "21008" : "Girard Av & Ridge Av" , "21073" : "Poplar St & Stillman St" , "31347" : "Frankford Av & Delaware Av Loop" , "21087" : "Girard Av & 11th St" , "21006" : "Girard Av & 17th St" , "30290" : "Girard Av & 19th St" , "21009" : "Girard Av & 20th St" , "21063" : "Girard Av & 39th St" , "21044" : "Girard Av & 63rd St - MBFS" , "21072" : "26th St & Poplar St" , "30791" : "Girard Av & 24th St" , "349" : "Girard Av & 59th St" , "20996" : "Girard Av & 5th St" , "21093" : "Girard Av & 5th St" , "20998" : "Girard Av & 7th St" , "20999" : "Girard Av & 8th St" , "20979" : "Richmond St & Clearfield St" , "21114" : "Richmond St & Allegheny Av" , "21079" : "Girard Av & 20th St" , "21026" : "Girard Av & 41st St" , "21037" : "Girard Av & 56th St" , "345" : "Girard Av & 59th St" , "21090" : "Girard Av & 8th St" , "343" : "Girard Av & Broad St" , "352" : "Girard Av & Broad St" , "20989" : "Girard Av & Columbia Av" , "21014" : "Poplar St & 25th St" , "481" : "Frankford Av & Girard Av" , "21111" : "Richmond St & Ann St" , "21107" : "Richmond St & Huntingdon St" , "21082" : "Girard Av & 17th St" , "21080" : "Girard Av & 19th St" , "21053" : "Girard Av & 54th St" , "20981" : "Richmond St & Ann St" , "25779" : "Richmond St & Girard Av" , "21019" : "Girard Av & 29th St" , "21095" : "Girard Av & 3rd St" , "21048" : "Girard Av & 60th St" , "21103" : "Girard Av & Berks St" , "21058" : "Girard Av & Lancaster Av" , "12218" : "Richmond St & Somerset St" , "21041" : "Haverford Av & 61st St" , "21083" : "Girard Av & 16th St" , "21010" : "Girard Av & Corinthian Av" , "20988" : "Girard Av & Palmer St" , "341" : "Richmond St & Westmoreland St Loop" , "21002" : "Girard Av & 12th St" , "21096" : "Girard Av & 2nd St" , "20994" : "Girard Av & 3rd St" , "350" : "Girard Av & 40th St" , "23992" : "Frankford Av & Richmond St" , "21109" : "Richmond St & Somerset St" , "21027" : "Girard Av & 42nd St" , "21056" : "Girard Av & 51st St" , "21047" : "Girard Av & 61st St" , "21060" : "Girard Av & Belmont Av - FS" }
1818
1919def get_trolley_frames (id , stop_name , direction , scale , img , id_font , text_font ):
2020 frames = []
@@ -25,26 +25,21 @@ def get_trolley_frames(id, stop_name, direction, scale, img, id_font, text_font)
2525 x , w , h = 1 , 39 , 14
2626 y_pos = 0
2727
28- # Continuous Entrance Sequence
29- if i < 30 :
30- # Phase 1: Slow slide from off-screen left (-40 to 1)
31- x = int (- 40.0 + (41.0 * i / 30.0 ))
28+ # Continuous Entrance Sequence (Phase 1 Slide -> Phase 2 Bounce -> Phase 3 Rest)
29+ if i < 30 : # Phase 1: Perfectly smooth slide from off-screen left (-40 to 0)
30+ x = int (- 40.0 + (40.0 * i / 29.0 ))
3231 elif i == 30 :
33- # Phase 2: Overshoot peak and Horizontal Squish (Overlap ID by 2 pixels)
34- # x + w = 42. ID starts at 40.
35- x = - 1
36- w = 43
32+ x = 1 # Step toward overshoot
3733 elif i == 31 :
38- # Phase 3: Recoil
39- x = - 1
40- w = 39
34+ x = 2 # Step toward overshoot
4135 elif i == 32 :
42- # Phase 4: Settle
43- x = 1
44- w = 39
36+ x = 3 # Peak impact (2px overlap with ID starting at 40)
37+ elif i == 33 :
38+ x = 2 # Recoil
39+ elif i == 34 :
40+ x = 1 # Final Resting Position
4541 else :
46- # Phase 5: Rest
47- x = 1
42+ x = 1 # Stable Rest
4843
4944 string = direction + " at " + stop_name .replace ("& " , "&\n " )
5045
@@ -56,17 +51,17 @@ def get_trolley_frames(id, stop_name, direction, scale, img, id_font, text_font)
5651 pad = (40 * scale , 1 * scale , 0 , 0 ),
5752 child = render .Text (content = id , font = id_font ),
5853 ),
59- # The Trolley - Animated slide, overshoot, and squish
54+ # The Trolley - Animated smooth slide and bounce
6055 render .Padding (
6156 pad = (x * scale , y_pos * scale , 0 , 0 ),
6257 child = render .Image (src = img , width = w * scale , height = h * scale ),
6358 ),
64- # Destination text - placed at y=14 to ensure clearance for 3 lines
59+ # Destination text - placed at y=15 to ensure clearance for 3 lines
6560 render .Padding (
66- pad = (0 , 14 * scale , 0 , 0 ),
61+ pad = (0 , 15 * scale , 0 , 0 ),
6762 child = render .Box (
6863 width = 64 * scale ,
69- height = 18 * scale ,
64+ height = 17 * scale ,
7065 child = render .WrappedText (string , font = text_font , align = "center" , width = 64 * scale ),
7166 ),
7267 ),
@@ -81,40 +76,37 @@ def get_empty_frames(scale, img, text_font):
8176 # Centering 39px image in 64px width: (64-39)/2 = 12.5 -> 12
8277 resting_x = 12
8378
84- # 200 frames total (20 seconds at 100ms delay)
85- for i in range (200 ):
79+ # 180 frames total (18 seconds at 100ms delay)
80+ for i in range (180 ):
8681 x = resting_x
8782
88- if i < 40 : # Phase 1: Slow roll in from off-screen left (-40 to 12)
89- x = int (- 40.0 + (resting_x + 40.0 ) * i / 40.0 )
83+ if i < 40 : # Phase 1: Smooth roll in from off-screen left (-40 to 12)
84+ x = int (- 40.0 + (52.0 * i / 39.0 ) )
9085 elif i < 60 : # Phase 2: Pause centered
9186 x = resting_x
9287 elif i < 100 : # Phase 3: Gentle Whimsical Shimmy (1-pixel shifts)
93- # 0,0,0,1,1,1,0,0,0,-1,-1,-1...
9488 shimmy = [0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , - 1 , - 1 , - 1 ] * 4
9589 x = resting_x + shimmy [i - 60 ]
9690 elif i < 120 : # Phase 4: Pause centered
9791 x = resting_x
98- elif i < 160 : # Phase 5: Slow roll off to right edge (12 to 64)
99- x = int (resting_x + (64 .0 - resting_x ) * (i - 120 ) / 40.0 )
92+ elif i < 160 : # Phase 5: Smooth roll off to right edge (12 to 64)
93+ x = int (resting_x + (52 .0 * (i - 120 ) / 40.0 ) )
10094 elif i < 180 : # Phase 6: Dead air pause before repeat
10195 x = 64
102- else : # Extra buffer
96+ else :
10397 x = 64
10498
10599 frame = render .Stack (
106100 children = [
107- # Trolley rolling across the screen at y=0
108101 render .Padding (
109102 pad = (x * scale , 0 , 0 , 0 ),
110103 child = render .Image (src = img , width = 39 * scale , height = 14 * scale ),
111104 ),
112- # Text centered at bottom (starts at y=14)
113105 render .Padding (
114- pad = (0 , 14 * scale , 0 , 0 ),
106+ pad = (0 , 15 * scale , 0 , 0 ),
115107 child = render .Box (
116108 width = 64 * scale ,
117- height = 18 * scale ,
109+ height = 17 * scale ,
118110 child = render .WrappedText ("No trolleys spotted.\n Check later!" , font = text_font , align = "center" , width = 64 * scale ),
119111 ),
120112 ),
0 commit comments