~facundo/enjuewemela/trunk

« back to all changes in this revision

Viewing changes to enjuewemela/highscores.py

  • Committer: facundo at com
  • Date: 2011-05-14 18:13:25 UTC
  • mfrom: (67.1.4 v3rel)
  • Revision ID: facundo@taniquetil.com.ar-20110514181325-614h8kjz32w5cmoy
Refactor back

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf8 -*-
 
2
 
 
3
# This code is part of the 'enjuewemela' game
 
4
# License: GPLv3
 
5
# Main author: Facundo Batista
 
6
# Code, bug tracker, etc:
 
7
#   https://launchpad.net/enjuewemela/
 
8
#
 
9
"""High scores window."""
 
10
 
 
11
import os
 
12
import pickle
 
13
 
 
14
from xdg.BaseDirectory import xdg_data_home
 
15
 
 
16
from cocos import layer
 
17
from cocos.director import director
 
18
 
 
19
import utils
 
20
 
 
21
WHITE = (255, 255, 255, 255)
 
22
 
 
23
class HighScores(layer.Layer):
 
24
    """Show the high scores."""
 
25
 
 
26
    _styles = [
 
27
        ('classic', 'Classic', (255, 0, 0, 255)),
 
28
        ('rush',    'Rush',    (0, 0, 255, 255)),
 
29
    ]
 
30
 
 
31
    def __init__(self):
 
32
        super(HighScores, self).__init__()
 
33
 
 
34
        f_varbl = utils.FontWriter(self, "Sansation")
 
35
        f_fixed = utils.FontWriter(self, "SV Basic Manual")
 
36
 
 
37
        fname = os.path.join(xdg_data_home, 'enjuewemela.hs')
 
38
        if not os.path.exists(fname):
 
39
            return
 
40
 
 
41
        try:
 
42
            with open(fname, 'rb') as fh:
 
43
                all_hs = pickle.load(fh)
 
44
        except Exception, e:
 
45
            print "WARNING: problems with the high score filename:", e
 
46
            return
 
47
 
 
48
        # some info for the initial drawing
 
49
        win_w, win_h = director.get_window_size()
 
50
        border = 50
 
51
        separ = 30
 
52
 
 
53
        # panels
 
54
        cant_paneles = len(self._styles)
 
55
        cant_separ = cant_paneles - 1
 
56
        panel_width = (win_w - border * 2 - separ * cant_separ) // cant_paneles
 
57
        alto_panel = win_h - border * 2
 
58
 
 
59
        x = border
 
60
        for i in range(cant_paneles):
 
61
            # x, y, w, h
 
62
            b = utils.Base(100, x, border, panel_width, alto_panel)
 
63
            self.add(b)
 
64
            x += panel_width + separ
 
65
 
 
66
        for i, (style, title, color) in enumerate(self._styles):
 
67
            # location of panel border
 
68
            panel_left = border + (panel_width + separ) * i
 
69
            panel_center = panel_left + panel_width // 2
 
70
            panel_right = panel_left + panel_width
 
71
 
 
72
            # title
 
73
            y = win_h - border - 40
 
74
            f_varbl(title, (panel_center, y), 40, "center", color=color)
 
75
            y -= 60
 
76
 
 
77
            for name, score in all_hs[style][:10]:
 
78
                f_varbl(name, (panel_left+10, y), 20, "left", color=WHITE)
 
79
                s = "%10s" % score
 
80
                f_fixed(s, (panel_right-10, y), 20, "right", color=WHITE)
 
81
                y -= 40