@@ -193,6 +193,7 @@ def cleanquotes(text: str) -> str:
193193def write_project_file ():
194194 if not project_name .strip ():
195195 return
196+
196197 filename = filter (remove_non_ascii (f"{ project_name } .py" ))
197198 with open (filename , "w" ) as f :
198199 f .write ("# -*- coding: utf-8 -*-\n " )
@@ -203,19 +204,28 @@ def write_project_file():
203204 f .write ("from ursina.prefabs.first_person_controller import FirstPersonController\n \n " )
204205 f .write (f"# Project: { filter (project_name )} \n " )
205206 f .write ("# Created by GameBro Studio\n \n " )
206- f .write (f"app: Ursina = Ursina(title=\" { filter (remove_non_ascii (f" { project_name } " ))} \" )\n " )
207- f .write (f"window.title = \" { filter (remove_non_ascii (f" { project_name } " ))} \" \n " )
207+ f .write (f"app: Ursina = Ursina(title=\" { filter (remove_non_ascii (project_name ))} \" )\n " )
208+ f .write (f"window.title = \" { filter (remove_non_ascii (project_name ))} \" \n " )
208209 f .write ("if os.path.exists(os.path.join(\" assets\" , \" icon.ico\" )):\n " )
209210 f .write (" window.icon = os.path.join(\" assets\" , \" icon.ico\" )\n " )
210211 f .write ("window.exit_button.visible = False\n " )
211- f .write ("window.borderless = True\n " )
212- f .write ("player: FirstPersonController = FirstPersonController(y=1)\n " )
212+ f .write ("window.borderless = True\n \n " )
213+
214+ # Player above platform
215+ f .write ("player = FirstPersonController(position=(0, 5, 0))\n " )
213216 f .write ("player.gravity = 1\n \n " )
217+
218+ # Ground platform
219+ f .write ("platform: Entity = Entity(model='cube', color=color.green, scale=(10, 1, 10), position=(0, 0, 0), collider='box')\n \n " )
220+
221+ # Write sprites
214222 for sprite in sprites :
215223 spritetowrite : str = filter (sprite ['name' ])
216224 if is_int (spritetowrite ) or spritetowrite in ["Sprite" , "SpriteGroup" , * banned_kwords ]:
217225 spritetowrite = f"Sprite_{ spritetowrite } "
218226 f .write (f"{ spritetowrite } : Sprite = Sprite(customdata={ sprite ['data' ]} , name=\" { cleanquotes (sprite ['name' ].replace (' ' , '_' ).replace (';' , '' ))} \" )\n " )
227+
228+ # Write sprite groups
219229 for group in groups :
220230 group_name = filter (group ['name' ])
221231 if is_int (group_name ) or group_name in ["Sprite" , "SpriteGroup" , * banned_kwords ] or group_name in [sprite ['name' ] for sprite in sprites ]:
@@ -227,13 +237,17 @@ def write_project_file():
227237 for s in group ['sprites' ]
228238 )
229239 f .write (f"{ group_name } : SpriteGroup = SpriteGroup({ members } )\n " )
230- f .write ("def input(key: str) -> None:\n " )
240+
241+ # Handle input (properly)
242+ f .write ("\n def input(key: str) -> None:\n " )
231243 f .write (" if key == \" escape\" :\n " )
232- f .write (" sys.exit()\n \n " )
233- f .write ("def update() -> None:\n " )
234- f .write (" mouse.position = Vec2(0, 0)\n \n " )
235- f .write ("app.run()" )
236- f .close ()
244+ f .write (" sys.exit()\n " )
245+
246+ # Update function (no mouse.position reset)
247+ f .write ("\n def update() -> None:\n " )
248+ f .write (" pass\n \n " )
249+
250+ f .write ("app.run()\n " )
237251
238252def insert_newlines (text , max_chars ):
239253 return '\n ' .join (text [i :i + max_chars ] for i in range (0 , len (text ), max_chars ))
0 commit comments