52 lines
		
	
	
		
			989 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			989 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| import fcntl
 | |
| import tempfile
 | |
| from pathlib import Path
 | |
| 
 | |
| from .config import Config
 | |
| from .utils import Utils
 | |
| from .ants import Ants
 | |
| from .window import Window
 | |
| from .game import Game
 | |
| from .settings import Settings
 | |
| from .filter import Filter
 | |
| from .args import Args
 | |
| 
 | |
| 
 | |
| def main() -> None:
 | |
|     Config.prepare()
 | |
|     Args.prepare()
 | |
| 
 | |
|     program = Config.program
 | |
|     title = Config.title
 | |
| 
 | |
|     pid = f"{program}.pid"
 | |
|     pid_file = Path(tempfile.gettempdir(), pid)
 | |
|     fp = pid_file.open("w", encoding="utf-8")
 | |
| 
 | |
|     try:
 | |
|         fcntl.lockf(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
 | |
|     except OSError:
 | |
|         Utils.print(f"{title} is already running.")
 | |
|         sys.exit(0)
 | |
| 
 | |
|     # Create singleton
 | |
|     fp.write(str(os.getpid()))
 | |
|     fp.flush()
 | |
| 
 | |
|     Utils.prepare()
 | |
|     Window.prepare()
 | |
|     Ants.prepare()
 | |
|     Settings.prepare()
 | |
|     Filter.prepare()
 | |
|     Game.prepare()
 | |
|     Game.start_loop()
 | |
|     Window.start()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | 
