예제 #1
0
class BotSideAMPProtocol(amp.AMP):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.game = None

    @ConnectToServer.responder
    @defer.inlineCallbacks
    def connectToServer(self, port):
        cc = ClientCreator(reactor, TrosnothClientProtocol)
        client = yield cc.connectTCP(LOCALHOST, port, timeout=10)
        settings = yield client.getSettings()
        client.onConnectionLost.addListener(self.lostServerConnection)

        layoutDatabase = LayoutDatabase()
        self.game = RemoteGame(layoutDatabase)
        client.connectNode(self.game)
        self.game.connected(settings)
        return []

    def lostServerConnection(self, reason=None):
        if reactor.running:
            reactor.stop()

    @StartBot.responder
    @defer.inlineCallbacks
    def startBot(self, name, fromLevel, nick, teamId, authTag):
        assert self.game
        team = self.game.world.getTeam(teamId)
        bot = yield self.game.addBot(
            name, team, fromLevel, nick, forceLocal=True, authTag=authTag)

        return []
예제 #2
0
    def startGame(self, level=None):
        db = mapLayout.LayoutDatabase(pathGetter=self.theme.getPath,
                                      blocks=self.mapBlocks)
        gameType = 'solo'
        self.game = game = LocalGame(
            db,
            self.size[0],
            self.size[1],
            onceOnly=True,
            blockRatio=self.blockRatio,
            duration=self.duration * 60,
            level=level,
            gameType=gameType,
        )
        if self.testMode:
            game.world.setTestMode()

        self.ais[:] = []

        try:
            for i in range(self.aiCount):
                if self.stackTeams:
                    ai = game.addBot(self.aiClass, team=game.world.teams[0])
                else:
                    ai = game.addBot(self.aiClass)
                self.ais.append(ai)
        except ImportError:
            print('AI module not found: %s' % (self.aiClass, ),
                  file=sys.stderr)
            sys.exit(1)
        except AttributeError:
            print(
                ('AI module does not define BotClass: %s' % (self.aiClass, )),
                file=sys.stderr)
            sys.exit(1)

        # Create a client and an interface.
        if self.isolate:
            rgame = RemoteGame(db)
            hub = LocalHub(game)
            self.tweener = UIMsgThrottler()
            if self.delay:
                delayer = DelayNodeHub(self.delay)
                hub.connectNode(delayer)
                delayer.connectNode(self.tweener)
            else:
                hub.connectNode(self.tweener)
            self.tweener.connectNode(rgame)
            self.rgame = rgame
            rgame.connected(game.world.dumpEverything())
            self.uiAgent = agent = PandaUIAgent(self, rgame)
        else:
            self.tweener = LocalGameTweener(game)
            self.uiAgent = agent = PandaUIAgent(self, game)
        agent.onDisconnectRequest.addListener(self.stop)
        agent.onConnectionLost.addListener(self.stop)

        agent.show()
예제 #3
0
    def connectionEstablished(self, settings, authTag=0):
        'Called when this client establishes a connection to a server.'
        self.trosnothClient.onConnectionLost.addListener(self.connectionLost)

        game = RemoteGame(self.app.layoutDatabase)
        self.app.tweener = UIMsgThrottler()
        self.trosnothClient.connectNode(self.app.tweener)
        self.app.tweener.connectNode(game)

        game.connected(settings)
        self.setupGame(game, authTag, local=False)

        self.game = game
        self.elements = [self.gi]
예제 #4
0
    def connectToReplay(self, filename):
        self.trosnothClient = player = replays.ReplayPlayer(filename)

        game = RemoteGame(self.app.layoutDatabase)
        self.app.tweener = UIMsgThrottler()

        player.connectNode(self.app.tweener)
        self.app.tweener.connectNode(game)

        game.connected(player.popSettings())
        self.setupReplay(game)
        player.start()

        self.game = game
        self.elements = [self.gi]