Exemplo n.º 1
0
def move_ship(request, game_id):
        err = _check_phase(request.game, game_constants.MOVE_PHASE)
        if err:
            return err

        system_id = System.id_str_to_pk(request.REQUEST['systemId'])
        ship_id = Ship.id_str_to_pk(request.REQUEST['shipId'])

        system = System.objects.get(pk=system_id)
        ship = Ship.objects.get(pk=ship_id)

        if ship.owner != request.player:
            return _forbidden("You don't own that ship!")

        if ship.on_deploy_queue:
            return _forbidden(
                "That ship is deploying; cancel deployment to move it")

        enemy_fighters = ship.system.ship_set.exclude(owner=request.player). \
            exclude(attack_tech=0)
        if len(enemy_fighters):
            return _forbidden("You can't run from enemy ships")

        lane_traveled = ship.system.neighbors.filter(system=system)
        if not lane_traveled or not lane_traveled[0].lane.passable:
            return _forbidden("Those systems aren't connected")

        ship.system = system
        ship.moves -= 1
        ship.save();

        map_changed = False
        if request.player not in system.visible_to.all():
            system.visible_to.add(request.player)
            map_changed = True

        neighbors = system.neighbors.all()
        for neighbor in neighbors:
            if request.player not in neighbor.lane.visible_to.all():
                map_changed = True
                neighbor.lane.visible_to.add(request.player)
                neighbor.lane.save()

        _game_state_changed(request.game)
        if map_changed:
            _map_changed(request.game, [request.player])

        return _json(_game_state(request.game, request.player))