run.py 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # coding: utf-8
  2. import argparse
  3. import logging
  4. from random import seed
  5. from synergine2.log import get_default_logger
  6. from synergine2.config import Config
  7. from synergine2_cocos2d.util import get_map_file_path_from_dir
  8. from synergine2.core import Core
  9. from synergine2.cycle import CycleManager
  10. from synergine2.terminals import TerminalManager
  11. from opencombat.simulation.base import TileStrategySimulation
  12. from opencombat.simulation.base import TileStrategySubjects
  13. from opencombat.state import StateConstructorBuilder
  14. from opencombat.terminal.base import CocosTerminal
  15. def main(
  16. map_dir_path: str,
  17. seed_value: int=None,
  18. state_file_path: str=None,
  19. state_save_dir: str='.',
  20. placement_mode: bool = False,
  21. ):
  22. if seed_value is not None:
  23. seed(seed_value)
  24. config = Config()
  25. config.load_yaml('config.yaml')
  26. # Runtime config
  27. config['_runtime'] = {}
  28. config['_runtime']['state_save_dir'] = state_save_dir
  29. config['_runtime']['placement_mode'] = placement_mode
  30. config['_runtime']['map_dir_path'] = map_dir_path
  31. level = logging.getLevelName(config.resolve('global.logging_level', 'ERROR'))
  32. logger = get_default_logger(level=level)
  33. map_file_path = get_map_file_path_from_dir(map_dir_path)
  34. simulation = TileStrategySimulation(config, map_file_path=map_file_path)
  35. subjects = TileStrategySubjects(simulation=simulation)
  36. if state_file_path:
  37. state_loader_builder = StateConstructorBuilder(config, simulation)
  38. state_loader = state_loader_builder.get_state_loader()
  39. state = state_loader.get_state(state_file_path)
  40. subjects.extend(state.subjects)
  41. simulation.subjects = subjects
  42. core = Core(
  43. config=config,
  44. simulation=simulation,
  45. cycle_manager=CycleManager(
  46. config=config,
  47. simulation=simulation,
  48. ),
  49. terminal_manager=TerminalManager(
  50. config=config,
  51. terminals=[CocosTerminal(
  52. config,
  53. asynchronous=False,
  54. map_dir_path=map_dir_path,
  55. )]
  56. ),
  57. cycles_per_seconds=1 / config.resolve('core.cycle_duration'),
  58. )
  59. core.run()
  60. if __name__ == '__main__':
  61. parser = argparse.ArgumentParser(description='Run TileStrategy')
  62. parser.add_argument('map_dir_path', help='map directory path')
  63. parser.add_argument('--seed', dest='seed', default=None)
  64. parser.add_argument('--state', dest='state', default=None)
  65. parser.add_argument(
  66. '--state-save-dir',
  67. dest='state_save_dir',
  68. default='.',
  69. )
  70. parser.add_argument(
  71. '--placement',
  72. dest='placement',
  73. action='store_true',
  74. )
  75. args = parser.parse_args()
  76. main(
  77. args.map_dir_path,
  78. seed_value=args.seed,
  79. state_file_path=args.state,
  80. state_save_dir=args.state_save_dir,
  81. placement_mode=args.placement,
  82. )