"""in game help screens"""

import math
import pygame
from pygame.locals import *
import game
import gfx, snd, txt
import input
import gameplay, objtext

fonts = []

def load_game_resources():
    fonts.append(txt.Font('sans', 14, italic=1))
    fonts.append(txt.Font('sans', 20, bold=1))
    snd.preload('chimein', 'chimeout')


Help = {
"player":"""SolarWolf Help
You pilot the mighty SolarWolf fleet of ships.
-
There are no weapons, but it has the most advanced
manuevering of it's kind. Control your ship with the
arrow keys or a joystick.
(You can also use "vi" keys, if you know what that is.)
-
Take advantage of the Hyper Jets by holding the space
bar or joystick button.
-
Collect all the Power Cubes on each level to advance.""",

"multibox":"""Color Power Cubes
Some power cubes will have alternate colors, which means
the SolarWolf ship must contact the cube multiple times
for it to be collected.""",

"guardians":"""Guardian Info
The Guardians protect the Power Cubes on every level.
They will become more aggressive in the later levels.
-
Don't get too close, they like to shoot point blank.""",

"asteroids":"""Asteroid Warning
Asteroids have started to appear. They will destroy anything
they touch.
-
As you progress to deeper space, more asteroids will start to appear.""",

"spikes":"""Spike Mine
There is a deadly spike mine on this level. Touching it will destroy
your ship.""",

"secretspikes":"""Hidden Spike Mine
Sensors indicate there is a Spike Mine somewhere on this level.
Be careful, it could turn up anywhere.
-
There is only one Spike Mine hidden on this level, but there
will be more than one on harder levels.""",

"powerup":"""Power Ups
When the green Power Ups appear be sure to grab them. They
will grant you with special abilities and bonuses.
-
As you reach harder levels the power ups will
have better effects.""",

"skip":"""Skip Level Timer
On the right side of the screen you see the large red
Skip A Level Timer. If you can clear a level before the
timer runs out, you will automatically skip the next level.""",

"Skip Bonus":"""Time Skip Power Up
This powerup adds more time to the Skip A Level Timer for a little while.
-
Collecting this prize makes it
much easier to pass the level and beat the skip timer.""",

"Shot Blocker":"""Shot Blocker Power Up
This Power Up destroys all the bullets currently in space.
It can be a life saver when things have gotten crazy.""",

"Shield":"""Shield Power Up
This powerup enables a temporary shield on your SolarWolf
ship. You will also be able to fly faster through space
when the shield is active.
-
Beware, the shield does not protect you from the Asteroids.
-
You will are given a second of invincibility even after the
shield effect wears out.""",

"Bullet Time":"""Bullet Time Power Up
This powerup enhances temporarily enhances your reflexes
which makes everything appear to move slowly.
-
Watch closely after a few seconds, as time will slowly
speed up before returning to full speed.""",

"Extra Life":"""Extra Life Power Up
This powerup adds another SolarWolf ship to your fleet.
-
With skilled play and this prize you can collect many
more ships than the original fleet of 3.""",

"Combustion":"""Guardian Combustion
This powerup explodes one of the Guardians.
-
The enemy will remain dead until the end of the level.""",

}



QuickHelp = {
"asteroids":"Beware of Asteroids",
"spikes":"Beware of Spike Mines",
"secretspikes":"Beware of Hidden Spike Mines",
"powerup":"Grab the Powerups",
"Skip Bonus":"Adds To Skip Timer",
"Shot Blocker":"Destroys All Bullets",
"Shield":"Temporary Invincibility",
"Bullet Time":"Slow Motion Effect",
"Extra Life":"Extra Life",
"Combustion":"Destroys One Guardian",
}



def help(helpname, helppos):
    if not game.player.help.has_key(helpname):
        game.player.help[helpname] = 1
        if game.help == 0:
            game.handler = GameHelp(game.handler, helpname, helppos)
        elif hasattr(game.handler, "textobjs"):
            t = getattr(game.handler, "textobjs")
            message = QuickHelp.get(helpname, None)
            if message and game.comments >= 1:
                t.append(objtext.Text(message))



class GameHelp:
    def __init__(self, prevhandler, helpname, helppos):
        self.prevhandler = prevhandler
        self.helpname = helpname
        self.helppos = helppos
        self.time = 0.0
        self.img = None
        self.rect = None
        self.needdraw = 1
        self.done = 0
        if snd.music:
            vol = snd.music.get_volume()
            if vol:
                snd.music.set_volume(vol * 0.6)
        snd.play('chimein')

        if hasattr(game.handler, 'player'):
            game.handler.player.cmd_turbo(0)

    def quit(self):
        snd.play('chimeout')
        if snd.music:
            snd.tweakmusicvolume()
        if self.rect:
            r = self.rect.inflate(2, 2)
            r = self.prevhandler.background(r)
            gfx.dirty(r)
        game.handler = self.prevhandler
        self.done = 1

    def input(self, i):
        if self.time > 30.0:
            self.quit()

    def event(self, e):
        pass


    def drawhelp(self, name, pos):
        if Help.has_key(name):
            text = Help[name]
            lines = text.splitlines()
            for x in range(1, len(lines)):
                if lines[x] == '-':
                    lines[x] = "\n\n"
            title = lines[0]
            text = ' '.join(lines[1:])
        else:
            title = name
            text = "no help available"

        self.img = fonts[0].textbox((255, 240, 200), text, 260, (50, 100, 50), 30)
        r = self.img.get_rect()
        titleimg, titlepos = fonts[1].text((255, 240, 200), title, (r.width/2, 10))
        self.img.blit(titleimg, titlepos)
        r.topleft = pos
        r = r.clamp(game.arena)
        alphaimg = pygame.Surface(self.img.get_size())
        alphaimg.fill((50, 100, 50))
        alphaimg.set_alpha(192)
        gfx.surface.blit(alphaimg, r)
        self.img.set_colorkey((50, 100, 50))
        self.rect = gfx.surface.blit(self.img, r)
        gfx.dirty(self.rect)


    def run(self):
        if self.needdraw:
            self.needdraw = 0
            self.drawhelp(self.helpname, self.helppos)

        ratio = game.clockticks / 25
        speedadjust = max(ratio, 1.0)
        self.time += speedadjust

        if not self.done:
            pts = (self.rect.topleft, self.rect.topright,
                  self.rect.bottomright, self.rect.bottomleft)
            s = gfx.surface
            clr = 40, 80, 40
            gfx.dirty(pygame.draw.line(s, clr, pts[0], pts[1]))
            gfx.dirty(pygame.draw.line(s, clr, pts[1], pts[2]))
            gfx.dirty(pygame.draw.line(s, clr, pts[2], pts[3]))
            gfx.dirty(pygame.draw.line(s, clr, pts[3], pts[0]))
            off = int(self.time * 0.9)
            r = 255
            g = int(220 + math.cos(self.time * .2) * 30)
            b = int(180 + math.cos(self.time * .2) * 65)
            clr = r, g, b
            gfx.drawvertdashline(s, pts[0], pts[3], clr, 10, off)
            gfx.drawvertdashline(s, pts[1], pts[2], clr, 10, -off)
            gfx.drawhorzdashline(s, pts[0], pts[1], clr, 10, off)
            gfx.drawhorzdashline(s, pts[3], pts[2], clr, 10, -off)

        #gfx.updatestars(self.background, gfx)


    def background(self, area):
        return gfx.surface.fill((0, 0, 0), area)



