@Override public void run() { if (run) { // Chose if an AI player should place a bid or the level should change int nextBid = auction.getCurrentBid() + AuctionEngine.BID_DELTA; EBidLevel bidLevel = auction.getBidLevel(); List<IAIPlayer> biddingPlayers = new ArrayList<>(auction.getBiddingPlayers()); biddingPlayers.remove(auction.getBiddingPlayer()); boolean aiBid = rnd.nextInt(2) % 2 == 0 || bidLevel == EBidLevel.INITIAL; if (aiBid && !biddingPlayers.isEmpty()) { Collections.shuffle(biddingPlayers); IAIPlayer bidder = biddingPlayers.get(0); clientServerEventBus.post(new AuctionBid(bidder, nextBid, auction)); } else { EBidLevel nextLevel; switch (bidLevel) { case ONE: nextLevel = EBidLevel.TWO; break; case TWO: nextLevel = EBidLevel.DONE; break; default: throw new IllegalStateException("Levels "+EBidLevel.INITIAL+" and "+EBidLevel.DONE + " are not valid"); } clientServerEventBus.post(new AuctionBidLevel(bidLevel, nextLevel, auction.getBiddingPlayer(), auction)); } } }
@Subscribe public void handleBidLevelChange(AuctionBidLevel change) { currentBidLevel.setValue(change.getNewLevel()); if (!change.getBidder().equals(city.getPlayer())) { auctionBtn.setDisable(false); } // update bid labels int index = dialogHelper.removeById(box, "noBid"); if (index < 0) { index = dialogHelper.removeById(box, "currentBid"); } addCurrentBidInformation(box, change.getAuction(), index); index = dialogHelper.removeById(box, "bidLevel-"+change.getOldLevel()); box.getChildren().remove(index); addBidLevelCountDown(box, change.getAuction(), index); if (change.getNewLevel() == EBidLevel.DONE) { auctionBtn.setVisible(false); clientEventBus.unregister(this); } else { String label = messageSource.getMessage("ch.sahits.game.openpatrician.display.dialog.guild.AuctionGuildDialog.nextBid", new Object[]{change.getAuction().getCurrentBid() + AuctionEngine.BID_DELTA}, locale.getCurrentLocal()); auctionBtn.setText(label); } }
@Subscribe public void handleBidLevelChange(AuctionBidLevel change) { IAuction auction = change.getAuction(); auction.setBidLevel(change.getNewLevel()); auction.setBiddingPlayer(change.getBidder()); if (change.getNewLevel() == EBidLevel.DONE) { if (change.getAuction() instanceof IShipAuction) { IShipAuction shipAuction = (IShipAuction) auction; clientServerEventBus.post(new ShipAuctionFinished(shipAuction.getAuctionedShip(), newOwner)); CancelableRunnable task = factory.createNextBidTask(change.getAuction()); timer.schedule(task, 30, TimeUnit.SECONDS);
@Subscribe public void handleBid(AuctionBid bid) { Preconditions.checkArgument(!bid.getBidder().equals(bid.getAuction().getBiddingPlayer()), "The bidder has to change"); IAuction auction = bid.getAuction(); auction.getCurrentTask().cancel(); auction.setBidLevel(EBidLevel.INITIAL); auction.setBiddingPlayer(bid.getBidder()); auction.setCurrentBid(bid.getAmount()); clientServerEventBus.post(new AuctionBidLevel(auction.getBidLevel(), EBidLevel.INITIAL, bid.getBidder(), auction)); CancelableRunnable task = factory.createNextBidTask(auction); auction.setCurrentTask(task); timer.schedule(task, 30, TimeUnit.SECONDS); }
EBidLevel current = currentBidLevel.get(); EBidLevel next = nextAuction.getBiddingPlayer() == null ? EBidLevel.INITIAL : calculateNextBidLevel(current); clientEventBus.post(new AuctionBidLevel(current, next, city.getPlayer(), nextAuction)); } catch (RuntimeException e) { logger.error("Failed to auction ship", e);