Skip to content

Commit

Permalink
place troops with troops xml
Browse files Browse the repository at this point in the history
  • Loading branch information
buxx committed Jun 25, 2018
1 parent b655c71 commit b26758f
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 2 deletions.
1 change: 1 addition & 0 deletions opencombat/ai/__init__.py
@@ -0,0 +1 @@
# coding: utf-8
39 changes: 39 additions & 0 deletions opencombat/ai/placement.py
@@ -0,0 +1,39 @@
# coding: utf-8
import typing

from synergine2.config import Config

from opencombat.const import SIDE
from opencombat.simulation.base import TileStrategySimulation

if typing.TYPE_CHECKING:
from opencombat.simulation.subject import TileSubject


class Placement(object):
"""
Place troops on a map
"""
def __init__(
self,
config: Config,
simulation: TileStrategySimulation,
) -> None:
self._config = config
self._simulation = simulation

def place(self) -> None:
# For now it is an extremely simple way to do it
subject_by_sides = {} # type: typing.Dict[str, typing.List[TileSubject]] # nopep8
for subject in self._simulation.subjects:
subject_by_sides.setdefault(subject.properties[SIDE], []).append(
subject,
)

x, y = 0, 0
for side, subjects in subject_by_sides.items():
y += 2
for subject in subjects:
x += 2

subject.position = (x, y)
16 changes: 14 additions & 2 deletions run.py
Expand Up @@ -11,6 +11,7 @@
from synergine2.cycle import CycleManager
from synergine2.terminals import TerminalManager

from opencombat.ai.placement import Placement
from opencombat.simulation.base import TileStrategySimulation
from opencombat.simulation.base import TileStrategySubjects
from opencombat.state import StateConstructorBuilder
Expand Down Expand Up @@ -48,6 +49,7 @@ def main(

simulation = TileStrategySimulation(config, map_file_path=map_file_path)
subjects = TileStrategySubjects(simulation=simulation)
simulation.subjects = subjects

if state_file_path:
state_loader_builder = StateConstructorBuilder(config, simulation)
Expand All @@ -58,10 +60,11 @@ def main(
elif troops_file_path:
troop_loader_builder = TroopConstructorBuilder(config, simulation)
troop_loader = troop_loader_builder.get_troop_loader()
placement = Placement(config, simulation)

troops = troop_loader.get_troop(troops_file_path)
subjects.extend(troops.subjects)

simulation.subjects = subjects
placement.place()

core = Core(
config=config,
Expand Down Expand Up @@ -114,6 +117,15 @@ def main(
)
exit(1)

if args.troops and not args.placement:
print(
'Cannot load troops "{}" without activate placement mode.'.format(
args.state,
),
file=sys.stderr,
)
exit(1)

main(
args.map_dir_path,
seed_value=args.seed,
Expand Down

0 comments on commit b26758f

Please sign in to comment.