Beispiel #1
0
    def __init__( self, x, y, angle, squirrel=False ):
    
        self.squirrel = squirrel
    
        # Get references
        self.videoManager = annchienta.getVideoManager()
        self.cacheManager = annchienta.getCacheManager()
        
        # Load sprites...
        if self.squirrel:
            self.sprite = self.cacheManager.getSurface("data/squirrel1.png")
        else:
            self.sprite = self.cacheManager.getSurface("data/splatter"+str(random.randint(1,5))+
".png")
        # Set X and Y
        self.x = x
        self.y = y

        self.velStart = random.uniform( 0.15, 0.25 )
        self.yAccel = random.uniform( 0.0002, 0.0008 )
        
        # Choose start direction
        angle += random.uniform(-math.pi/8, math.pi/8)
        self.xVel = self.velStart*math.cos( angle )
        self.yVel = self.velStart*math.sin( angle )
        
        self.sticksToTree = random.random()<0.5
        
        self.xScale = -1 if random.random()<0.5 else 1
        self.yScale = -1 if self.squirrel else 1
Beispiel #2
0
    def __init__(self,
                 name="Equipment",
                 description="Manage and view equipment.",
                 combatantIndex=0):

        # Stuff for sounds
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.soundClickRev = self.cacheManager.getSound(
            'sounds/click-reverse.ogg')
        self.soundClickNeg = self.cacheManager.getSound(
            'sounds/click-negative.ogg')
        self.soundClickPos = self.cacheManager.getSound(
            'sounds/click-positive.ogg')
        self.soundClickNeu = self.cacheManager.getSound(
            'sounds/click-neutral.ogg')
        self.soundSave = self.cacheManager.getSound('sounds/save.ogg')

        # Call superclass constructor
        Menu.Menu.__init__(self, name, description)

        # Get references
        self.partyManager = PartyManager.getPartyManager()

        # Set index
        self.combatantIndex = combatantIndex
Beispiel #3
0
    def __init__(self, combatants):

        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.mapManager = annchienta.getMapManager()
        self.audioManager = annchienta.getAudioManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mathManager = annchienta.getMathManager()
        self.sceneManager = scene.getSceneManager()
        self.battleManager = getBattleManager()

        self.activeCombatants = self.combatants = combatants
        self.running = True

        self.enemies = filter(lambda c: c.hostile, self.activeCombatants)
        self.allies = filter(lambda c: not c.hostile, self.activeCombatants)

        # Set positions for combatants
        for i in range(len(self.allies)):
            a = self.allies[i]
            w, h = a.getSize()
            a.setPosition(
                self.videoManager.getScreenWidth() / 2 - 30 - i * 10 - w,
                100 + i * 40 - h)

        for i in range(len(self.enemies)):
            e = self.enemies[i]
            w, h = e.getSize()
            e.setPosition(self.videoManager.getScreenWidth() / 2 + 30 + i * 10,
                          100 + i * 40 - h)

        self.updateCombatantArrays()

        self.background = None
Beispiel #4
0
    def __init__( self ):

        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mapManager   = annchienta.getMapManager()
        self.mathManager  = annchienta.getMathManager()
        self.sceneManager = SceneManager.getSceneManager()

        # Background spriteace
        self.background = annchienta.Surface( "images/backgrounds/sky.png" )
        self.backgroundY = 0.0

        # Create a ship for the player
        self.ship = GameObject( annchienta.Vector( videoManager.getScreenWidth()/2, videoManager.getScreenHeight()/2 ),
                                annchienta.Surface( "sprites/ship_small.png" ) )

        # Load sprites into cache
        self.enemySprite = annchienta.Surface("sprites/ship_pirate.png")

        # All enemies
        self.enemies = []

        # The final enemy
        self.captain = None

        # Number of miliseconds we need to fly to gain victory
        self.victoryTime = 60000
Beispiel #5
0
    def __init__(self, m_battle, m_combatant):

        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.mathManager = annchienta.getMathManager()
        self.sceneManager = scene.getSceneManager()

        self.m_combatant = m_combatant
        self.m_battle = m_battle
        self.turns = 0
Beispiel #6
0
    def __init__(self, xmlElement):

        # Stuff for sounds
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.soundLevelup = self.cacheManager.getSound('sounds/levelup.ogg')
        self.soundClickNeu = self.cacheManager.getSound(
            'sounds/click-neutral.ogg')

        # Base constructor
        Combatant.Combatant.__init__(self, xmlElement)

        # References
        self.partyManager = PartyManager.getPartyManager()
        self.logManager = annchienta.getLogManager()
        self.inputManager = annchienta.getInputManager()
        self.videoManager = annchienta.getVideoManager()

        # Get our weapon
        weaponElements = xmlElement.getElementsByTagName("weapon")
        if len(weaponElements):
            # Get the weapon name and search for the corresponding element
            weaponName = str(weaponElements[0].getAttribute("name"))
            self.setWeapon(weaponName)
        else:
            self.logManager.warning("No Weapon defined for Ally!")

        # Get the position of our hand
        handElements = xmlElement.getElementsByTagName("hand")
        if len(handElements):
            self.hand = annchienta.Vector(
                float(handElements[0].getAttribute("x")),
                float(handElements[0].getAttribute("y")))
        else:
            self.hand = None

        # Create a dictionary describing the level grades
        self.grades = {}
        gradesElement = xmlElement.getElementsByTagName("grades")[0]
        for k in gradesElement.attributes.keys():
            self.grades[k] = int(gradesElement.attributes[k].value)

        # Create dictionary describing the level learns
        self.learn = {}
        learnElement = xmlElement.getElementsByTagName("learn")[0]
        text = str(learnElement.firstChild.data)
        words = text.split()
        for i in range(int(len(words) / 2)):
            self.learn[int(words[i * 2])] = words[i * 2 + 1]

        # Build the menu.
        self.buildMenu()
Beispiel #7
0
 def __init__( self ):
 
     # Get nessecary references
     self.engine = annchienta.getEngine()
     self.videoManager = annchienta.getVideoManager()
     self.inputManager = annchienta.getInputManager()
     self.audioManager = annchienta.getAudioManager()
     self.cacheManager = annchienta.getCacheManager()
     
     # Set video mode.
     self.videoManager.setVideoMode( 480, 320, "Happy Squirrel Land!" )
     self.inputManager.setMouseVisibility( False )
     
     self.game = Game.Game()
Beispiel #8
0
    def __init__(self):

        # Get nessecary references
        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.audioManager = annchienta.getAudioManager()
        self.cacheManager = annchienta.getCacheManager()

        # Various sprites
        self.background = self.cacheManager.getSurface("data/background.png")
        self.target = self.cacheManager.getSurface("data/target.png")

        # Main font
        self.font = annchienta.Font("data/regular.ttf", 14)
Beispiel #9
0
    def __init__( self, name, toolTip=None ):
        
        # Stuff for sounds
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.soundClickRev = self.cacheManager.getSound('sounds/click-reverse.ogg')
        self.soundClickNeg = self.cacheManager.getSound('sounds/click-negative.ogg')
        self.soundClickPos = self.cacheManager.getSound('sounds/click-positive.ogg')
        self.soundClickNeu = self.cacheManager.getSound('sounds/click-neutral.ogg')
        self.soundSave =     self.cacheManager.getSound('sounds/save.ogg')
    
        # Base constructor
        MenuItem.MenuItem.__init__( self, name, toolTip )
        
        # Get references
        self.inputManager = annchienta.getInputManager()
        self.videoManager = annchienta.getVideoManager()
        self.mapManager = annchienta.getMapManager()
        self.sceneManager = SceneManager.getSceneManager()

        # Flags
        self.done = False
        self.canceled = False
        
        # Size of the menu
        self.width, self.height = 0, 0

        # Position on the screen
        self.x, self.y = 0, 0
        self.columns = 1
        self.rows = 1

        # If the tooltip should be drawn on top of the screen
        self.toolTipOnTop = True

        # Kinda self explanatory
        self.maxItemsInColumn = 4

        # The options in the menu. Use setOptions() to set them!
        self.options = []

        # The currently selected item index
        self.selectedOptionIndex = 0
        self.selectedOption = None
Beispiel #10
0
    def __init__(self, xmlElement):

        # Call super constructor.
        BattleEntity.__init__(self, xmlElement)

        # Set our name
        self.description = str(xmlElement.getAttribute("description"))

        # Get our sprite
        spriteElements = xmlElement.getElementsByTagName("sprite")
        if len(spriteElements):
            cacheManager = annchienta.getCacheManager()
            self.sprite = cacheManager.getSurface(
                str(spriteElements[0].getAttribute("filename")))
            self.grip = annchienta.Vector(
                float(spriteElements[0].getAttribute("gripx")),
                float(spriteElements[0].getAttribute("gripy")))
        else:
            self.sprite = None
            self.grip = None
Beispiel #11
0
    def __init__(self):

        # Get references
        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.audioManager = annchienta.getAudioManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mapManager = annchienta.getMapManager()

        # Load our assets
        self.defaultFont = annchienta.Font("assets/regular.ttf", 14)
        self.italicsFont = annchienta.Font("assets/italics.ttf", 14)
        self.largeDefaultFont = annchienta.Font("assets/regular.ttf", 20)
        self.largeItalicsFont = annchienta.Font("assets/italics.ttf", 20)
        self.boxTextures = map(
            lambda i: annchienta.Surface("assets/box" + str(i) + ".png"),
            range(9))

        self.margin = 6
Beispiel #12
0
 def __init__( self ):
 
     # Get references
     self.videoManager = annchienta.getVideoManager()
     self.cacheManager = annchienta.getCacheManager()
     self.audioManager = annchienta.getAudioManager()
     
     # Load sprites...
     self.sprite = self.cacheManager.getSurface("data/squirrel1.png")
     self.balloon = self.cacheManager.getSurface("data/balloon"+str(random.randint(1,3))+".png")
     
     # Set X and Y
     self.x = -self.sprite.getWidth() if random.random()<0.5 else self.videoManager.getScreenWidth()+self.sprite.getWidth()
     self.y = float(Level.treeUpperY() - self.sprite.getHeight()/2)
     
     self.xVel = 0.1 if self.x<0 else -0.1
     self.jumping = random.random()<0.6
     self.yVel = self.yVelStart
     
     # Balloontimer
     self.balloonTimer = random.randint(-3000,-1000)
Beispiel #13
0
    def __init__(self):

        # Get references
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()

        # Load sprites...
        self.sprite = self.cacheManager.getSurface("data/player.png")
        self.gun = self.cacheManager.getSurface("data/player_gun.png")

        # Set X and Y
        self.x = float(self.videoManager.getScreenWidth() / 2)
        self.y = float(Level.treeUpperY() - self.sprite.getHeight() / 2)

        self.xScale = 1
        self.angle = 0

        self.weaponReloadTimer = -1000
        self.rage = self.maxRage
Beispiel #14
0
    def __init__(self, xmlElement):

        # Stuff for sounds
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.soundNeg = self.cacheManager.getSound('sounds/click-negative.ogg')
        self.soundHeal = self.cacheManager.getSound('sounds/cure.ogg')
        self.soundHealHi = self.cacheManager.getSound('sounds/cura.ogg')
        self.soundExplode = self.cacheManager.getSound('sounds/grenade.ogg')

        # Get some references
        self.logManager = annchienta.getLogManager()

        text = str(xmlElement.firstChild.data)
        words = text.split()

        self.dictionary = {}

        # Get all the items
        for i in range(int(len(words) / 2)):

            self.dictionary[words[i * 2]] = int(words[i * 2 + 1])
Beispiel #15
0
    def __init__( self ):

        # Get references
        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mapManager   = annchienta.getMapManager()
        self.mathManager  = annchienta.getMathManager()
        self.sceneManager = SceneManager.getSceneManager()

        # Load images
        self.background = annchienta.Surface("images/backgrounds/water.png")
        self.cacheManager.getSurface("sprites/rock1.png")
        self.cacheManager.getSurface("sprites/rock2.png")

        # Initial positions
        self.backgroundY = 0.0
        self.speed = 0.1
        self.nextSpawn = 500
        self.rocks = []

        self.raft = RaftObject( annchienta.Surface("sprites/raft.png"), annchienta.Vector( self.videoManager.getScreenWidth()/2, self.videoManager.getScreenHeight()/2 ) )
Beispiel #16
0
    def __init__(self, combatants, background, canFlee):

        # Set variables
        self.combatants = combatants
        self.running = True
        self.background = background
        self.canFlee = canFlee
        self.won = False
        self.actionLock = False

        # Get references
        self.engine = annchienta.getEngine()
        self.videoManager = annchienta.getVideoManager()
        self.inputManager = annchienta.getInputManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mathManager = annchienta.getMathManager()
        self.mapManager = annchienta.getMapManager()
        self.audioManager = annchienta.getAudioManager()
        self.sceneManager = SceneManager.getSceneManager()
        self.partyManager = PartyManager.getPartyManager()

        # Lines for the 'console' window
        self.lines = []
Beispiel #17
0
    def __init__(self):

        # Get some references
        self.engine = annchienta.getEngine()
        self.inputManager = annchienta.getInputManager()
        self.mapManager = annchienta.getMapManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mathManager = annchienta.getMathManager()
        self.sceneManager = SceneManager.getSceneManager()

        # Set variables
        self.player = 0
        self.records = []
        self.inventory = 0
        self.lastMaps = []
        self.currentMap = 0
        self.startTime = 0

        # Create a map loader
        self.mapLoader = MapLoader()

        # Battle variables
        self.randomBattleDelay = self.mathManager.randInt(300, 400)
Beispiel #18
0
    def __init__(self):

        # Stuff for sounds
        self.cacheManager = annchienta.getCacheManager()
        self.audioManager = annchienta.getAudioManager()
        self.soundClickRev = self.cacheManager.getSound(
            'sounds/click-reverse.ogg')
        self.soundClickNeg = self.cacheManager.getSound(
            'sounds/click-negative.ogg')
        self.soundClickPos = self.cacheManager.getSound(
            'sounds/click-positive.ogg')
        self.soundClickNeu = self.cacheManager.getSound(
            'sounds/click-neutral.ogg')
        self.soundSave = self.cacheManager.getSound('sounds/save.ogg')

        # General references
        self.mapManager = annchienta.getMapManager()
        self.inputManager = annchienta.getInputManager()
        self.partyManager = PartyManager.getPartyManager()

        self.menu = Menu.Menu("In-Game Menu", "Select action.")

        options = []

        # An option that does nothing.
        options += [
            MenuItem.MenuItem("continue", "Close menu and continue playing.")
        ]

        # A submenu for party management.
        options += [MenuItem.MenuItem("party", "Change equipment, heal...")]

        # An option to quit.
        options += [MenuItem.MenuItem("quit", "Stop playing.")]

        self.menu.setOptions(options)
        self.menu.top()
Beispiel #19
0
class SceneManager:

    margin = 6
    defaultFont, italicsFont = None, None
    boxTextures = []

    engine = annchienta.getEngine()
    videoManager = annchienta.getVideoManager()
    inputManager = annchienta.getInputManager()
    audioManager = annchienta.getAudioManager()
    cacheManager = annchienta.getCacheManager()
    mathManager = annchienta.getMathManager()
    mapManager = annchienta.getMapManager()

    def waitForClick(self):
        self.videoManager.storeBuffer(7)
        self.inputManager.update()
        while self.inputManager.running(
        ) and not self.inputManager.buttonTicked(0):
            self.inputManager.update()
            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.videoManager.flip()

        self.mapManager.resync()

    def defaultColor(self):
        self.videoManager.setColor(255, 255, 255)

    def activeColor(self):
        self.videoManager.setColor(255, 255, 0)

    def inactiveColor(self):
        self.videoManager.setColor(170, 170, 170)

    ## \brief Draw a box.
    #
    #  A box is the main GUI element. You can customize the box layout
    #  by changing bitmaps.
    def drawBox(self, x1, y1, x2, y2):

        #self.videoManager.push()
        #self.videoManager.identity()
        self.videoManager.boxBlur(x1, y1, x2, y2)
        #self.videoManager.pop()

        # If there are not enough textures, just draw a stupid simple box.
        if (len(self.boxTextures) <= 8):
            self.videoManager.setColor(100, 100, 150, 200)
            self.videoManager.drawRectangle(x1, y1, x2, y2)
            self.videoManager.setColor()
        else:
            # Draw the corner textures
            self.videoManager.drawSurface(self.boxTextures[0], x1, y1)
            self.videoManager.drawSurface(self.boxTextures[2],
                                          x2 - self.boxTextures[2].getWidth(),
                                          y1)
            self.videoManager.drawSurface(self.boxTextures[6], x1,
                                          y2 - self.boxTextures[6].getHeight())
            self.videoManager.drawSurface(self.boxTextures[8],
                                          x2 - self.boxTextures[2].getWidth(),
                                          y2 - self.boxTextures[6].getHeight())

            # Draw the side textures as patterns.
            self.videoManager.drawPattern(self.boxTextures[1],
                                          x1 + self.boxTextures[0].getWidth(),
                                          y1,
                                          x2 - self.boxTextures[2].getWidth(),
                                          y1 + self.boxTextures[1].getHeight())
            self.videoManager.drawPattern(self.boxTextures[7],
                                          x1 + self.boxTextures[7].getWidth(),
                                          y2 - self.boxTextures[7].getHeight(),
                                          x2 - self.boxTextures[8].getWidth(),
                                          y2)
            self.videoManager.drawPattern(self.boxTextures[3], x1,
                                          y1 + self.boxTextures[0].getHeight(),
                                          x1 + self.boxTextures[3].getWidth(),
                                          y2 - self.boxTextures[6].getHeight())
            self.videoManager.drawPattern(self.boxTextures[5],
                                          x2 - self.boxTextures[5].getWidth(),
                                          y1 + self.boxTextures[2].getHeight(),
                                          x2,
                                          y2 - self.boxTextures[8].getHeight())

            # Draw the main texture as pattern.
            self.videoManager.drawPattern(self.boxTextures[4],
                                          x1 + self.boxTextures[0].getWidth(),
                                          y1 + self.boxTextures[0].getHeight(),
                                          x2 - self.boxTextures[8].getWidth(),
                                          y2 - self.boxTextures[8].getHeight())

    ## \brief Renders justified text.
    #
    #  \return The height of the rendered text.
    def renderTextInArea(self, text, x1, y1, x2, font):
        paragraphs = text.split('\n')
        spaceWidth = font.getStringWidth(' ')
        maxWidth = x2 - x1
        oy1 = y1
        for paragraph in paragraphs:
            words = paragraph.split()
            lineWords = []
            totalWidth = 0
            for word in words:
                if totalWidth + font.getStringWidth(
                        word) + spaceWidth < maxWidth:
                    totalWidth += font.getStringWidth(word) + spaceWidth
                    lineWords.append(word)
                else:
                    if len(lineWords) <= 0:
                        break
                    totalWidth = -spaceWidth
                    for w in lineWords:
                        totalWidth += font.getStringWidth(w)
                    actualSpaceWidth = (maxWidth -
                                        totalWidth) / (len(lineWords))
                    x = x1
                    for w in lineWords:
                        self.videoManager.drawString(font, w, x, y1)
                        x += font.getStringWidth(w) + actualSpaceWidth
                    y1 += font.getLineHeight()
                    totalWidth = font.getStringWidth(word)
                    lineWords = [word]
            x = x1
            for w in lineWords:
                self.videoManager.drawString(font, w, x, y1)
                x += font.getStringWidth(w) + spaceWidth
            y1 += font.getLineHeight()
        # Return the height elapsed.
        return y1 - oy1

    ## \brief Display some text.
    #
    #  \param text The text to be displayed.
    def text(self, text, font=None):

        font = self.defaultFont if font is None else font

        text = str(text)

        self.inputManager.update()
        self.videoManager.storeBuffer(7)

        while self.inputManager.running(
        ) and not self.inputManager.buttonTicked(0):

            self.inputManager.update()

            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.drawBox(self.margin, self.margin,
                         self.videoManager.getScreenWidth() - self.margin, 110)
            self.videoManager.setClippingRectangle(
                2 * self.margin, 2 * self.margin,
                self.videoManager.getScreenWidth() - 3 * self.margin,
                110 - self.margin)
            self.defaultColor()
            height = self.renderTextInArea(
                text, 2 * self.margin, 2 * self.margin,
                self.videoManager.getScreenWidth() - 3 * self.margin, font)
            height -= 110 - font.getLineHeight()
            self.videoManager.disableClipping()
            self.videoManager.flip()

        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()

    def thoughts(self, text):

        text = str(text)
        scroll = 0
        self.inputManager.update()
        self.videoManager.storeBuffer(7)
        while self.inputManager.running(
        ) and not self.inputManager.buttonTicked(0):

            self.inputManager.update()

            self.videoManager.clear()
            self.videoManager.setColor(0, 0, 0)
            self.videoManager.drawRectangle(
                0, 0, self.videoManager.getScreenWidth(),
                self.videoManager.getScreenHeight())
            self.defaultColor()
            self.renderTextInArea(
                text, 2 * self.margin, 100,
                self.videoManager.getScreenWidth() - 2 * self.margin,
                self.italicsFont)
            self.videoManager.flip()

        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()

    ## \brief Display some info.
    #
    #  \param text The text to be displayed.
    def info(self, text, timeOut=800):

        text = str(text)
        self.inputManager.update()
        self.videoManager.storeBuffer(7)

        start = self.engine.getTicks()

        done = False

        while not done:

            self.inputManager.update()

            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.drawBox(
                self.margin,
                self.videoManager.getScreenHeight() - self.margin * 3 -
                self.defaultFont.getLineHeight(),
                self.videoManager.getScreenWidth() - self.margin,
                self.videoManager.getScreenHeight() - self.margin)
            self.defaultColor()
            self.videoManager.drawString(
                self.defaultFont, text, 2 * self.margin,
                self.videoManager.getScreenHeight() - self.margin * 2 -
                self.defaultFont.getLineHeight())
            self.videoManager.flip()

            if not self.inputManager.running(
            ) or self.inputManager.buttonTicked(0):
                done = True

            if timeOut is not None:
                if self.engine.getTicks() > start + timeOut:
                    done = True

        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()

    ## \brief lets someone say something.
    #
    def speak(self, object, text):

        self.mapManager.cameraPeekAt(object, True)
        self.videoManager.clear()
        self.mapManager.renderFrame()
        self.text(object.getName().capitalize() + ":\n" + text,
                  self.defaultFont)

    def chat(self, speaker, intro, answers):

        if speaker is not None:
            self.mapManager.cameraPeekAt(speaker, True)
        self.videoManager.clear()
        self.mapManager.renderFrame()

        selected = 0
        self.inputManager.update()
        self.videoManager.storeBuffer(7)

        intro = (speaker.getName().capitalize() + ":\n" +
                 intro) if speaker is not None else intro

        done = False

        while self.inputManager.running() and not done:

            self.inputManager.update()

            y = 0

            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.drawBox(self.margin, self.margin,
                         self.videoManager.getScreenWidth() - self.margin, 110)
            # Make sure everything goes in the box.
            self.videoManager.setClippingRectangle(
                2 * self.margin, 2 * self.margin,
                self.videoManager.getScreenWidth() - 2 * self.margin,
                110 - self.margin)
            self.defaultColor()
            height = self.renderTextInArea(
                intro, 2 * self.margin, 2 * self.margin + y,
                self.videoManager.getScreenWidth() - 2 * self.margin,
                self.defaultFont)
            y += height + self.margin

            for i in range(len(answers)):

                if self.inputManager.hover(
                        2 * self.margin, 2 * self.margin + y,
                        self.videoManager.getScreenWidth() - 2 * self.margin,
                        2 * self.margin + y +
                        self.defaultFont.getLineHeight()):
                    self.activeColor()
                    if self.inputManager.buttonTicked(0):
                        selected = i
                        done = True
                else:
                    self.inactiveColor()

                height = self.renderTextInArea(
                    answers[i], 2 * self.margin, 2 * self.margin + y,
                    self.videoManager.getScreenWidth() - 2 * self.margin,
                    self.defaultFont)
                y += height

            self.videoManager.disableClipping()
            self.videoManager.flip()

        self.videoManager.setColor()
        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()
        return selected

    def choose(self, title, answers):

        selected = 0
        done = False
        self.inputManager.update()
        self.videoManager.storeBuffer(7)

        while self.inputManager.running() and not done:

            self.inputManager.update()

            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.drawBox(self.margin, self.margin,
                         self.videoManager.getScreenWidth() - self.margin, 110)
            self.defaultColor()
            y = self.margin * 2
            self.videoManager.drawString(self.defaultFont, title,
                                         self.margin * 2, y)
            y += self.defaultFont.getLineHeight()
            for i in range(len(answers)):

                if self.inputManager.hover(
                        self.margin * 2, y,
                        self.videoManager.getScreenWidth() - self.margin * 2,
                        y + self.defaultFont.getLineHeight()):
                    self.activeColor()
                    if self.inputManager.buttonTicked(0):
                        selected = i
                        done = True
                else:
                    self.inactiveColor()

                self.videoManager.drawString(self.defaultFont, answers[i],
                                             self.margin * 2, y)
                y += self.defaultFont.getLineHeight()
            self.videoManager.flip()

        self.videoManager.setColor()
        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()
        return answers[selected]

    ## \moves someone.
    #
    def move(self, objects, points):

        # Convert objects and points to lists if they aren't.
        if type(objects) is not type([]):
            objects = [objects]
            points = [points]

        self.inputManager.update()
        self.inputManager.setInputMode(annchienta.CinematicMode)

        going = 1

        while self.inputManager.running() and going:

            going = sum(
                map(lambda i: int(objects[i].stepTo(points[i])),
                    range(len(objects))))

            self.mapManager.update(False)
            self.inputManager.update()

            self.mapManager.cameraPeekAt(objects[0], True)

            self.videoManager.clear()
            self.mapManager.renderFrame()
            self.videoManager.flip()

        self.inputManager.setInputMode(annchienta.InteractiveMode)
        self.mapManager.resync()

    ## \brief Inits a dialog.
    #
    def initDialog(self, objects):
        for o in objects:
            o.freeze(True)
            o.setStandAnimation()
        for i in range(len(objects)):
            objects[i].lookAt(objects[(i + 1) % len(objects)])
        self.objectsInDialog = objects

    ## \brief Ends a dialog.
    #
    def quitDialog(self):
        for object in self.objectsInDialog:
            object.freeze(False)

    ## \fades
    #
    def fadeOut(self, r=0, g=0, b=0, ms=500):
        start = self.engine.getTicks()
        self.videoManager.storeBuffer(7)
        while self.engine.getTicks(
        ) < start + ms and self.inputManager.running():
            self.inputManager.update()
            alpha = float(self.engine.getTicks() - start) / float(ms) * 255.0
            self.videoManager.clear()
            self.videoManager.restoreBuffer(7)
            self.videoManager.setColor(r, g, b, int(alpha))
            self.videoManager.drawRectangle(
                0, 0, self.videoManager.getScreenWidth(),
                self.videoManager.getScreenHeight())
            self.videoManager.flip()
        self.mapManager.resync()

    def rotateEffect(self, duration=1500):
        start = self.engine.getTicks()
        self.videoManager.storeBuffer(7)
        while self.engine.getTicks(
        ) < start + duration and self.inputManager.running():
            factor = float(self.engine.getTicks() - start) / float(duration)
            self.videoManager.clear()
            self.videoManager.translate(
                self.videoManager.getScreenWidth() / 2,
                self.videoManager.getScreenHeight() / 2)
            self.videoManager.rotate((factor + 1.) * (factor + 1.) * 360.)
            self.videoManager.scale(factor * 50., factor * 50.)
            self.videoManager.translate(
                -self.videoManager.getScreenWidth() / 2,
                -self.videoManager.getScreenHeight() / 2)
            self.videoManager.restoreBuffer(7)
            self.videoManager.flip()
        self.mapManager.resync()

    def noise(self, duration=1000):
        start = self.engine.getTicks()
        self.videoManager.storeBuffer(7)
        s = self.cacheManager.getSound("sounds/noise.ogg")
        self.audioManager.playSound(s)
        while self.engine.getTicks(
        ) < start + duration and self.inputManager.running():
            self.inputManager.update()
            self.videoManager.clear()
            r = self.mathManager.randInt(0, 256)
            self.videoManager.setColor(r, r, r)
            self.videoManager.drawRectangle(
                0, 0, self.videoManager.getScreenWidth(),
                self.videoManager.getScreenHeight())
            self.videoManager.flip()
        self.videoManager.setColor()
        self.videoManager.restoreBuffer(7)
        self.mapManager.resync()
Beispiel #20
0
import annchienta
import MenuItem, Menu
import PartyManager
import SceneManager

cacheManager = annchienta.getCacheManager()
sound = cacheManager.getSound('sounds/crystal.ogg')

audioManager = annchienta.getAudioManager()
audioManager.playSound( sound )

partyManager = PartyManager.getPartyManager()
partyManager.heal()

sceneManager = SceneManager.getSceneManager()

sceneManager.initDialog( [annchienta.getActiveObject(), annchienta.getPassiveObject()] )
sceneManager.text("Your health was restored!")

menu = Menu.Menu("Save menu.", "Save your game.")
options = [ MenuItem.MenuItem("save", "Save your progress."), MenuItem.MenuItem("cancel", "Return to the game.") ]
menu.setOptions( options )
menu.top()

ans = menu.pop()
if ans is not None:
    if ans.name == "save":
        path = os.path.join(os.path.expanduser("~"), ".fall-of-imiryn/save.xml")
        partyManager.save(path)
        sceneManager.text("The progress in your travels has been recorded.")
Beispiel #21
0
    def __init__(self, xmlElement):

        # Call super constructor
        BattleEntity.BattleEntity.__init__(self, xmlElement)

        # We need to log stuff
        self.logManager = annchienta.getLogManager()

        # Get references
        self.videoManager = annchienta.getVideoManager()
        self.cacheManager = annchienta.getCacheManager()
        self.mathManager = annchienta.getMathManager()
        self.sceneManager = SceneManager.getSceneManager()

        # Create a dictionary describing the level stuff
        self.level = {}
        levelElement = xmlElement.getElementsByTagName("level")[0]
        for k in levelElement.attributes.keys():
            self.level[k] = int(levelElement.attributes[k].value)

        # Create a dictionary describing the health stats
        self.healthStats = {}
        healthStatsElement = xmlElement.getElementsByTagName("healthstats")[0]
        for k in healthStatsElement.attributes.keys():
            self.healthStats[k] = int(healthStatsElement.attributes[k].value)

        # Get all possible actions. The actual actions are in the first child
        # of the element, hence the code. <actions> action1 action2 </actions>
        actionsElement = xmlElement.getElementsByTagName("actions")[0]
        actionNames = str(actionsElement.firstChild.data).split()
        # Prepare to get the from the xml data
        self.actions = []
        # Get them
        for a in actionNames:
            self.addAction(a)

        # Create a dictionary describing the elemental properties
        # Only enemies have them, usually
        self.primaryElemental = {}
        elementalElements = xmlElement.getElementsByTagName("elemental")
        if len(elementalElements):
            for k in elementalElements[0].attributes.keys():
                self.primaryElemental[k] = float(
                    elementalElements[0].attributes[k].value)

        # Load sprite
        spriteElement = xmlElement.getElementsByTagName("sprite")[0]
        # Keep the filename so we can save it later on
        self.spriteFilename = str(spriteElement.getAttribute("filename"))
        self.sprite = annchienta.Surface(self.spriteFilename)
        if spriteElement.hasAttribute("x1"):
            self.sx1 = int(spriteElement.getAttribute("x1"))
            self.sy1 = int(spriteElement.getAttribute("y1"))
            self.sx2 = int(spriteElement.getAttribute("x2"))
            self.sy2 = int(spriteElement.getAttribute("y2"))
        else:
            self.sx1, self.sy1 = 0, 0
            self.sx2 = self.sprite.getWidth()
            self.sy2 = self.sprite.getHeight()

        # Get width and height from those facts.
        self.width = self.sx2 - self.sx1
        self.height = self.sy2 - self.sy1

        self.position = annchienta.Vector(0, 0)

        # We will draw a mark upon ourselves sometimes
        self.active = False
        self.selected = False

        # Damage done by an attack
        self.damage = 0
        self.damageTimer = 0.0

        self.reset()
Beispiel #22
0
    def __init__(self, xmlElement=None):

        self.cacheManager = annchienta.getCacheManager()
        self.elemental = {}

        if xmlElement:

            # Set our name and category
            self.name = str(xmlElement.getAttribute("name"))
            self.category = str(xmlElement.getAttribute("category"))
            self.target = int(xmlElement.getAttribute("target"))

            # Get the description
            descriptionElement = xmlElement.getElementsByTagName(
                "description")[0]
            self.description = str(descriptionElement.firstChild.data)

            # Set cost
            costElement = xmlElement.getElementsByTagName("cost")[0]
            self.cost = int(costElement.getAttribute("mp"))

            # Create a dictionary describing the elemental properties
            found = xmlElement.getElementsByTagName("elemental")
            if len(found):
                elementalElement = found[0]
                for k in elementalElement.attributes.keys():
                    self.elemental[k] = int(
                        elementalElement.attributes[k].value)

            # Set factor, hit and type
            found = xmlElement.getElementsByTagName("power")
            if len(found):
                powerElement = found[0]
                self.factor = float(powerElement.getAttribute("factor"))
                self.hit = float(powerElement.getAttribute("hit"))
                self.type = str(powerElement.getAttribute("type"))

            # Set statusEffect and statusHit
            found = xmlElement.getElementsByTagName("status")
            if len(found):
                statusElement = found[0]
                self.statusEffect = str(statusElement.getAttribute("effect"))
                self.statusHit = float(statusElement.getAttribute("hit"))

            # Set animation and animationData
            found = xmlElement.getElementsByTagName("animation")
            if len(found):

                animationElement = found[0]

                sprite, sound = None, None

                if animationElement.hasAttribute("sprite"):
                    sprite = self.cacheManager.getSurface(
                        str(animationElement.getAttribute("sprite")))

                if animationElement.hasAttribute("sound"):
                    sound = self.cacheManager.getSound(
                        str(animationElement.getAttribute("sound")))

                type = str(animationElement.getAttribute("type"))

                if type == "attack":
                    self.animation = AttackAnimation.AttackAnimation(
                        sprite, sound)
                elif type == "sprite":
                    self.animation = SpriteAnimation.SpriteAnimation(
                        sprite, sound)
                else:
                    self.animation = None