Ejemplo n.º 1
0
 def __init__(self, world):
     self.world = world
     self.rsc   = Resources()
     # story state
     self.game_over   = False
     self.game_result = None
     self.exit_now    = False
     self.set_state("begin")
     self.story_time  = self.world.get_time()
     self.last_narrative = 0
     # stories need narrations
     self.narrations  = []
     self.queue       = []
     dbg("Starting a story: %s" % (self))
Ejemplo n.º 2
0
    if all(elem in regions for elem in arg_regions):
        regions = arg_regions
    else:
        input_error('region', str(list(set(arg_regions) - set(regions))[0]),
                    str(regions))
if args.skip:
    arg_skip = args.skip.split(',')
    if all(elem in supported_services for elem in arg_skip):
        skip = arg_skip
    else:
        input_error('service',
                    str(list(set(arg_skip) - set(supported_services))[0]),
                    str(supported_services))

# Create resources and alarm objects
resources = Resources()
alarms = Alarms()

# Get terminal size
rows, columns = os.popen('stty size', 'r').read().split()
print('=' * int(columns))


# Async function to get resources
async def get_resources(executor, regions):
    loop = asyncio.get_event_loop()
    blocking_tasks = []
    for region in regions:
        for service in supported_services:
            if service not in skip:
                blocking_tasks.append(
Ejemplo n.º 3
0
class Story:
      storybook_path = ""
      themesong = "happytheme"

      def __init__(self, world):
          self.world = world
          self.rsc   = Resources()
          # story state
          self.game_over   = False
          self.game_result = None
          self.exit_now    = False
          self.set_state("begin")
          self.story_time  = self.world.get_time()
          self.last_narrative = 0
          # stories need narrations
          self.narrations  = []
          self.queue       = []
          dbg("Starting a story: %s" % (self))

      def __str__(self):
          return self.__class__.__name__
      def debug_info(self):
          return "%s: over=%s result=%s state=%s time=%.1f" % \
                 (self, self.game_over, self.game_result,
                  self.state, self.world.get_time() - self.story_time)

      @classmethod
      def story_name(klass):
          try:
            return klass.story_title
          except:
            return klass.__name__

      @classmethod
      def gen_menuitem(klass):
          return { "action": klass, "txt": klass.story_name() }

      def default_scenery(self):
          """
          Reused a lot of times
          """
          world = self.world
          world.new_actor(actors.BackgroundHills, 0)
          world.new_actor(actors.ForegroundGrass, 0)
          world.new_actor(actors.ForegroundOldGrass, 0)
          # paint some scenery
          for i in xrange(10):
            world.new_actor(actors.Tree, -250 + (500 / 10) * i + random() * 25)
          for i in xrange(3):
            world.new_actor(actors.Sun, -1200 + (2500 / 3) * i)
          for i in xrange(6):
            world.new_actor(actors.Cloud, -1200 + (2500 / 6) * i)

          # some ambient lifeforms
          for i in xrange(25):
            bird = world.new_actor(actors.FlockingBird, random() * 1000 - 500)
            bird.ypos = random() * bird.controller.ypos_upper_bound
          for i in xrange(2):
            bird = world.new_actor(actors.PredatorBird, random() * 1000 - 500)
            bird.ypos = random() * 10.0

          # set music
          self.rsc.set_music(self.themesong)

      # all narrations done!
      def narrated(self, delay = 5.0):
          return len(self.narrations) == 0 and self.last_narrative + delay < self.world.get_time()
      def narrate(self, text, showtime = 0.0, duration = 5.0, id = False):
          if not id: id = text
          # make sure this id is unique
          if id in self.queue:
            return
          else:
            self.queue.append(id)
          now = self.world.get_time()
          # render
          img = self.rsc.fonts.textfont.render(text, True, (255, 255, 255))
          # add to narrations list
          self.narrations.append({ "showtime": now + showtime,
                                   "cleartime": now + showtime + duration,
                                   "img": img,
                                   "id": id,
                                 })

      def batch_narrate(self, narrations, id = "narrative"):
          """
          proccess a tuple of tuples containing narrations
          """
          if not id in self.queue:
            showtime = 0
            for narr in narrations:
              showtime += narr[0]
              narr = (narr[1], showtime) + narr[2:]
              self.narrate(*narr)
            self.queue.append(id)
          else:
            pass
      def clear_queue(self, id):
          if id in self.queue:
            self.queue.pop(self.queue.index(id))

      def set_state(self, state):
          self.state = state
          self.state_time = self.world.get_time()
          self.action_times = {}
          self.narrations = []
          self.queue = []
      def set_result(self, result, exit_now = False):
          self.game_over = True
          self.game_result = result
          self.exit_now = exit_now
          if result:
            self.game_over_img = self.rsc.fonts.smallgoth.render("You Win!", True, (0, 0, 64))
          else:
            self.game_over_img = self.rsc.fonts.smallgoth.render("Game Over!", True, (0, 0, 64))
      def time_passed(self, delay, action = "wait"):
          if not self.action_times.has_key(action):
            self.action_times[action] = self.world.get_time()
            return True
          else:
            if self.action_times[action] + delay < self.world.get_time():
              self.action_times[action] = self.world.get_time()
              return True
          return False
      
      def times(self):
          now = self.world.get_time()
          return now - self.story_time, now - self.state_time

      # must overload this
      def update(self):
          raise Exception()
      def get_player(self):
          raise Exception()

      def draw(self, draw_debug = False):
          cam = self.world.camera
          g = cam.graphics
          # draw game over
          if self.game_over:
            g.blit(self.game_over_img,
                   (cam.sc_w() / 2 - self.game_over_img.get_width() / 2,
                    cam.sc_h() / 2 - self.game_over_img.get_height() / 2 - 100))

          # proccess narratives
          draw_list = []
          extra_offset = 0
          i = 0
          now = self.world.get_time()
          while i < len(self.narrations):
            narr = self.narrations[i]
            showtime  = narr["showtime"]
            cleartime = narr["cleartime"]
            if showtime < now:
              if cleartime < now:
                if cleartime + 1.0 < now:
                  if narr["id"]:
                    self.queue.pop(self.queue.index(narr["id"]))
                  self.narrations.pop(i)
                else:
                  part = (cleartime + 1.0 - now)
                  extra_offset += int(part * (narr["img"].get_height() + 5))
                  i += 1
              else:
                draw_list.append(narr["img"])
                i += 1
            else:
              i += 1

          if draw_list:
            self.last_narrative = self.world.get_time()

          # draw them
          line_y = 10 + extra_offset
          for img in draw_list:
            g.blit(img, (10, line_y))
            line_y += img.get_height() + 5
Ejemplo n.º 4
0
import random

from discord.ext import commands
from dotenv import load_dotenv
from lib.greeting import Greeting
from lib.resources import Resources
from lib.parliament import Parliament

# set up loggin
import logging

logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='discord.log',
                              encoding='utf-8',
                              mode='w')
handler.setFormatter(
    logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
COMMAND_PREFIX = os.getenv('COMMAND_PREFIX')
PARLIAMENT_CHANNEL = os.getenv('PARLIAMENT_CHANNEL')

bot = commands.Bot(command_prefix=COMMAND_PREFIX)

bot.add_cog(Greeting(bot))
bot.add_cog(Resources(bot))
bot.add_cog(Parliament(bot, PARLIAMENT_CHANNEL))
bot.run(TOKEN)